Dev/JAVA

[JAVA] 자바란?

just-e 2021. 1. 12. 23:54

안녕하세요. 저스티입니다.

블로그를 이전하여 옮기게 된 내용입니다.

JAVA란?

  • 등장 - 처음 Oak(오크)라는 이름에서 JAVA로 변경.    ! 이 후, 인터넷에서 실행되는 프로그래밍 언어로 사용되었고, 이름도 JAVA로 변경.
    • 오크는 가전제품에서 사용될 목적이었으나, 후에 인터넷의 등장!
    • 1991년에 Sun Microsystems의 James Gosling과 엔지니어들에 의해서 개발
  • JAVA는 C++에 비해 메모리 및 CPU를 지나치게 많이 사용.

 

자바의 특징

  • 이식성이 높은 언어이다(운영체제 독립적). - 자바는 자바 실행 환경(JRE: Java Runtime Enviroment)이 설치되어 모든 운영체제에서 실행 가능.
        ! JVM(Java Virtual Machine - 자바 가상 기계)를 통해 중간단계인 바이트 코드를 해석하고 실행하게 됨.
          자바를 실행시키는 가상의 기계.
    이식성이란: 서로 다른 실행 환경을 가진 시스템간에 개발한 하나의 프로그램을 옮겨 실행할 수 있는 것.
    ex) A라는 프로그램을 Window나 Unux 등에서 실행 가능하면 이식성 높은 것!
  • 객체지향 언어이다.
     - 프로그램을 개발하는 기법(부품에 필요한 객체들을 먼저 만들고 이것들을 하나씩 조립하여 연결)
     - 객체를 만들기 위해선 설계도인 클래스 작성.
     - 객체지향 프로그래밍(OOP: Object Oriented Programming).
     - OOP의 특성[간략]
         ! 캡슐화(Encapsulation): 같은 목적을 가지고 있는 Method(메소드)와 Variable(변수)를 하나로 묶는 것. 
         ! 상속(Inheritance): 상위 클래스(부모)를 정보를 하위 클래스(자식)가 물려받는 것, 
         ! 다형성(Polymorphism): 상속을 통해 기능을 Overloading(정의 || 확장)하거나 Overriding(재정의) 하는 것.
         ! 추상화(Abstraction): 공통되는 특성이나 속성을 추출하여 정의하는 것. 
  • 멀티 스레드(Multi-Thread)를 쉽게 구현할 수 있다.
     - 동시에 여러 작업을 처리해야 할 경우와 대용량 작업을 빨리 처리(서브 작업으로 분리)하기 위해 필요.
     - 멀티 스레드 프로그램은 시스템과는 관계없이 구현 가능.
     - 라이브러리 API가 제공되어 쉽게 구현 가능.
     - 여러 스레드에 대한 스케줄링(Scheduling)을 자바 인터프리터가 담당.
  • 동적 로딩(Dynamic Loading)을 지원한다.
    자바 애플리케이션은 여러 개의 객체가 서로 연결되어 실행 -> 이 객체들은 클래스로부터 생성!
     - 애플리케이션이 실행될 때 모든 객체 생성 X
     - 객체가 필요한 시점에 클래스를 동적로딩 후 객체를 생성.(유지보수 할때 전체 컴파일 X, 유지보수 쉽고 빠름).
  • 오픈소스 라이브러리가 풍부하다.
     - 고급 기능을 구현하려면 시간과 노력이 많이 필요하고, 안전성 보장 X.
       검증된 라이브러리 사용시 개발 기간을 단축 쉬킬 수 있다.
  • 자동 메모리 관리(Garbage Collection)를 한다.
     - 가비지컬렉터(Garbage Collector)가 자동적으로 메모리 관리하기 때문에 메모리 관리 X.

 

추가

  1. 모든것이 객체다 ★★★(중요)
     - 문제내의 어떤 개념 요소들이든 프로그램의 객체로 나타낼 수 있다.
     - 객체는 상태(State)와 행동(Behavior), 정체정(Identity)를 갖는다.
  2. 각 객체들은 상호간의 메시지를 보내어 일을 수행한다.
     - 객체에게 일을 요청하려면 `메시지를 보낸다`
        [메소드(Method)를 호출하는 것을 메시지라고 생각하면 된다.]
  3. 각 객체는 다른 객체들로 이루어딘 자신의 메모리를 갖는다.
     - 기존 객체를 포함해서 새로운 종류의 객체를 만든다.
     - 복잡도가 높은 프로그램을 만들 수 있다.
  4. 모든 객체는 자신의 타입이 있다.
     - 객체는 클래스(class)의 인스터스(Instance)이다.
     - 클래스
         ! 설계도
         ! 같은 목적을 가지는 변수와 메소드 집합.
     - 인스턴스
         ! 설계도를 바탕으로 구현(실체)된 것.
         ! 실체가 되면 메모리에 할당된다.

 

 

 

정리

OOP에서는 절자적 언어에 새로운 개념을 추가했기 때문에,

같은 기능의 절차적 프로그램보다 자바 프로그램이 훨씬 더 복잡하다고 생각할 것입니다.

그래도 일반 절자적 프로그램보다 쉽게 쉬울것입니다.

 

우리가 언어로 자바를 선택했으면 최소한 어떤 선택사항들이 있는지 알아야하고, 

왜 그런 방향을 택했는지에 대한 명확한 비전을 가져야 한다.

 

 

 

참고 자료

[도서] JAVA의 정석
[도서] 이것이 자바다 

[도서] Thingking in JAVA - 4TH