하루살이 개발자

[JAVA] 01. 자바란? (자바의 특징, 장단점) 본문

Language/Java

[JAVA] 01. 자바란? (자바의 특징, 장단점)

하루살이 2023. 3. 21. 01:35

1. 자바의 탄생과 역사

  • 자바는 1991년 썬 마이크로시스템즈(Sun Microsystems)사에서 제임스 고슬링(James Gosling)이 고안하였고 오크(Oak), 혹은 그린(Green) 이라고 불렸다.
  • 오크는 최초 가전제품에서 쓰일 프로그램의 개발이 목적이었지만 인터넷과 웹의 출현으로  자바의 초점은 가전제품에서 인터넷으로 옮겨지게 되었고, 이후 1995년 이름을 자바로 변경하게되었다.
  • 고슬링의 목표는 C/C++ 스타일의 언어와 가상 머신을 구현하는 것으로, Write Once, Run Anywhere(한 번 쓰고 어느 곳에도 실행) 하는것을 약속하였다.
  • 자바는 인기플랫폼에 무료 런타임을 제공하였고, 대부분의 브라우저들은 곧 자바 애플릿(Java Applet)을 웹페이지 안에서 실행할 수 있었으며 자바의 인기는 급상승 하였다.
  • 2009년 썬 마이크로시스템즈는 오라클과 인수 합병되었고 자바에 대한 권리 및 유지보수 또한 오라클로 넘어가게 되었다.

2. 자바의 특징 - 장점

1) 객체지향 언어이다

  • 객체지향 프로그래밍(OOP: Object Oriented Programming)이란 프로그램을 개발하는 기법으로, 부품에 해당하는 객체들을 먼저 만들고, 객체를 하나씩 조립 및 연결하여 전체 프로그램을 완성하는 것을 말한다.
  • 객체를 만들기 위해 설계도인 클래스를 작성하고, 객체와 객체를 연결하여 목적에 맞는 프로그램을 만들어 낸다.
  • 객체지향 언어의 특징인 캡슐화, 상속성, 다형성을 완벽하게 지원한다.

2)이식성이 높다

  • 서로 다른 실행환경을 가진 시스템 간에 프로그램을 옮겨 실행할 수 있는 것을 말한다.
  • 자바는 자바 실행환경(JRE)이 설치되어있는 모든 운영체제에서 실행이 가능하다
더보기

[참고1] 자바의 런타임 환경인 JRE란?

JRE(Java Runtime Environment)는 자바 실행환경의 약자로, JVM이 자바 프로그램을 동작시킬 때 필요한 라이브러리 파일들과 기터 파일들을 가지고 있다. JRE는 JVM의 실행환경을 구현했다고 할 수 있다.

 

[참고2] JDK란?

JDK(Java Development Kik)는 자바 개발 도구의 약자로, JRE + 개발을 위해 필요한 도구(javac, java 등)을 포함한다.

3) 인터프리터 언어이다

  • 컴파일 언어인 동시에 인터프리터 언어이다.
  • 텍스트 소스를 컴파일하여 클래스 파일로 만든 다음 자바 런타임이 클래스 파일을 인터프리트하면서 실행된다.
  • 시스템에 무관한 클래스 파일을 만듬으로써 자바는 컴파일 언어에 가까운 속도와 시스템 독립성을 얻을 수 있다.
더보기

[참고] 자바는 컴파일 언어이기도 하고, 인터프리터 언어이기도 하다.

 

컴파일언어?

자바는 다른 컴파일 언어들이 작동하듯이 컴파일러를 이용해 전체 코드를 한번에 번역한다. 여기서 사용하는 컴파일러를 "자바 컴파일러"라고 하며, 이 자바 컴파일러는 우리가 작성한 Java코드를 "자바 가상머신(JVM)"이 실행시킬 수 있는 "자바 바이트 코드"로 번역한다.  (자바 바이트코드의 확장자는 .class이다, 바이트코드는 JVM에서 바로 실행가능한 형태이다.)

 

인터프리터 언어?

자바 바이트코드는 JVM의 자바 인터프리터를 이용해 한 줄씩 실행된다. 즉, 자바 바이트코드로 작성되어 있는 실행 프로그램을 자바 인터프리터가 한 줄씩 읽으면서 컴퓨터가 이해할 수 있는 2진 코드(바이트코드)로 번역한 후 실행시는 것이다. 

 

결론) 자바는 컴파일 언어이면서 인터프리터 언어이므로 "하이브리드 언어"라고 불린다.

처음에는 인터프리터 언어로 사용되다가, 성능 향상을 위하여 컴파일 언어의 장점을 가져왔다고 한다.

JAVA 작동원리(자바 컴파일러, 자바 인터프리터)

 

4) 메모리를 자동으로 관리한다

  • 자바는 개발자가 직접 메모리에 접근할 수 없으며, 메모리는 자바가 직접 관린한다.
  • 객체 생성시 자동으로 메모리 영역을 찾아서 할당하고, 사용이 완료되면 Garbage Collector(쓰레기 수집기, GC)를 실행시켜 자동으로 사용하지 않는 객체를 제거한다
  • 덕분에 개발자는 메모리 관리의 수고를 덜고, 핵심기능 코딩에 집중할 수 있다. -> 효율적
더보기

[참고] 이게 왜 좋은데?

C++은 메모리에 생성된 객체를 제거하기 위해 개발자가 직접 코드를 작성해야 한다. 만약 이 작업을 해주지 않는다면 프로그램은 불완전해지고, 갑자기 다운되는 현상을 겪을 수도 있다.

5) 멀티 스레드 구현이 쉽다

  •  운영체제에 따라 멀티 스레드를 구현하는 방법이 다르지만, 자바는 스레드 생성 및 제어와 관련된 라이브러리 API를 제공하므로 운영체제에 상관없이 멀티 스레드를 쉽게 구현할 수 있다.

6) 동적 로딩을 지원한다

  • 실행 시 모든 클래스가 로딩되는 것이 아니라, 필요한 시점에 클래스를 로딩하여 사용할 수 있다.
  • 애플리케이션의 변경사항이 발생해도 비교적 적은 작업만으로 처리할 수 있는 유연한 애플리케이션을 작성할 수 있다.

7) 분산환경을 지원한다

  • 자바에는 TCP/IP 라이브러리가 기본적으로 포함되어 있다.
  • HTTP와 HTP 프로토콜을 기본적으로 지원한다.

8) 오픈소스 라이브러리가 풍부하다

  • 자바는 오픈소스 언어이고, 자바 프로그램에서 사용하는 라이브러리 또한 오픈소스의 양이 방대하다.
  • 고급 기능을 구현하는 코드를 작성하는 대신 검증된 오픈소스 라이브러리를 사용하면, 애플리케이션을 다시 컴파일 할 필요가 없다
  • 따라서, 유지보수를 쉽고 빠르게 진행할 수 있다.

3. 자바의 특징 - 단점

  • 자바는 실행을 위해 자바 가상 머신을 거쳐야 하므로, 다른 언어에 비해 실행 속도가 느리다.
  • 자바는 예외 처리가 잘 되어 있지만, 개발자가 일일이 처리를 지정해줘야 한다는 불편함이 있다.
  • 자바는 다른 언어에 비해 작성해야 하는 코드의 길이가 긴 편이다.

 

면접 질문 대비하기!

더보기

Q. 자바의 장단점에 대해 설명해 주세요.

장점

(우선순위 높은 것)

  • 특정 하드웨어, 운영체제에 종속되지 않아 플랫폼에 독립적으로 실행 가능하다.
  • 자바는 JVM의 가상환경을 사용하여, 멀티 스레드를 지원하지 않는 운영체제의 경우에도 자바 언어를 활용해 멀티 스레드를 구현할 수 있다.
  • 가비지 컬렉션을 사용하여 메모리를 자동으로 관리한다.

 

(추가적으로 말할 것)

  • 객체지향 언어로 신뢰성있는 소프트웨어를 손쉽게 작성할 수 있고, 재사용이 가능하다.
  • 오픈소스 라이브러리가 풍부해서 빠르게 개발 가능하다.
  • 수많은 개발자와 레퍼런스가 있다.

 

단점

(우선순위 높은 것)

  • JVM을 거쳐 코드가 실행되기 때문에, 실행 속도가 다른 언어에 비해 느리고, 더 많은 메모리를 사용한다.
  • 자바는 예외 처리가 잘 되어 있지만, 개발자가 일일이 처리를 지정해줘야 한다는 불편함이 있다.
  • 가비지 컬렉션이 언제 어떻게 작동될지 모르기 때문에, 중간에 끊김 현상이 발생할 수 있어 실시간 응용 시스템으로는 부적합하다.

 

(추가적으로 말할 것)

  • 소스 코드 길이가 긴 편이다.
  • Oracle사의 Java 유료화

 

[참고문헌]

JRE, JDK 관련: https://wikidocs.net/257

인터프리터 관련: https://jooona.tistory.com/157

자바 특징 관련: https://helloworld-88.tistory.com/3