카테고리 없음

[Java] 자바의 특징

yujinius 2024. 4. 4. 14:18

자바의 특징

플랫폼 독립성

  • 자바는 H/W, OS 등 플랫폼에 종속되지 않는 독립적인 바이트 코드로 컴파일 됨
  • JVM만 있으면 하드웨어/운영체제 상관 없이 자바 프로그램 실행 가능

 

객체 지향

  • 자바는 객체 지향 언어로서 ① 캡슐화 ② 상속 ③ 다형성 지원
  • 객체 간의 상호 관계로 모델링 되어 인간 사고에 가깝게 표현됨

 

클래스로 캡슐화

  • 자바는 객체 지향 언어의 캡슐화(encapsulation) 원칙을 철저히 지켜, 변수나 메소드는 반드시 클래스 내에 구현하도록 함
  • 클래스에 속하지 않은 변수나 메소드는 있을 수 없음
  • 자바는 클래스 안에 새로운 클래스 = 내부 클래스를 만들 수 있음
  •  

소스와 클래스 파일

  • 클래스 파일(.class)에는 반드시 하나의 클래스만 들어 있음
  • 즉, 하나의 자바 소스 파일에 여러 개의 클래스를 작성한 경우, 컴파일 하면 클래스마다 별도의 클래스 파일이 생성됨
  • 하나의 자바 소스 파일에 작성된 클래스 중 오직 한 클래스만 public으로 선언할 수 있음 
  • 소스 파일 내에 public으로 선언된 클래스의 이름으로 자바 소스 파일을 저장해야 함
  • public class의 이름이 파일 이름이어야 하기 때문에 public은 하나만 쓰자

소스 파일과 클래스, 클래스 파일의 관계

실행 코드 배포

  • 자바 응용프로그램 = 한 개의 클래스 파일 or 다수의 클래스 파일로 구성
  • 다수의 클래스 파일을 jar 파일 형태로 압축하여 배포하거나 실행 가능
  • Java 9부터는 자바 응용프로그램을 위한 맞춤형 커스텀 JRE를 만들어 실행 가능
  • 자바의 실행은 main() 메소드에서 시작
  • 하나의 클래스 파일에 2개 이상의 main() 메소드가 있을 수 없음 => 1 클래스 당 1 main()
  • 그러나 각 클래스 파일이 main() 메소드를 가지는 것은 상관 없음

패키지

  • 서로 관련 있는 클래스는 패키지로 묶어 관리
  • 패키지는 파일 시스템의 폴더와 같은 개념
  • java.lang.System 클래스 : java\lang 폴더의 System.class 파일

멀티스레드

  • 하나의 자바 프로그램이 다수의 작업을 처리할 수 있도록 다수의 스레드가 동시에 실행할 수 있는 환경 지원
  • 보통 멀티스레드 프로그램 작성하기 위해서는 아래 2개 필요
    1. 운영체제가 멀티스레드 지원
    2. 멀티스레드와 관련된 API나 라이브러리 제공
  • C/C++ 등 많은 언어들은 자체적으로 멀티스레드를 지원하지 않아 운영체제의 도움을 받음
  • 자바는 운영체제의 도움 없이 멀티스레드 프로그래밍이 가능
  • 멀티스레드를 지원하지 않는 운영체제에서도 자바를 이용하면 멀티스레드 프로그램 개발 가능

 

가비지 컬렉션

  • 자바 언어는 메모리를 할당받는 기능은 있지만, 메모리를 반환하는 기능은 없음
  • 프로그램 내에 사용되지 않는 메모리(가비지)는 JVM(자바 가상 기계)의 가비지 컬렉션 기능에 의해 자동으로 회수됨
  • 가비지 컬렉션은 언제 실행될지 모름!

 

실시간 응용 시스템에 부적합

  • 자바 응용프로그램은 실행 도중 예측할 수 없는 시점에 가비지 컬렉션이 실행되므로, 프로그램 실행이 일시적으로 중단됨
  • 이런 문제로 인해 일정 시간(deadline) 내에 반드시 실행 결과를 내야만 하는 실시간 시스템에는 자바 언어가 적합하지 않음

 

자바 프로그램은 안전

  • 자바 언어는 타입 체크가 매우 엄격
  • C/C++과 달리 메모리의 물리적 주소를 사용하는 포인터의 개념이 없음
  • 잘못된 자바 프로그래밍으로 시스템이 중단되는 일 없음

 

프로그래밍 작성 쉬움

  • C/C++에 있는 포인터 개념이 없어 프로그램 작성 부담 적음
  • 개발 도와주는 다양한 라이브러리, Swing 등 강력한 GUI 라이브러리 지원

 

실행 속도를 개선하기 위해 JIT 컴파일러가 사용됨

  • 자바는 JVM(자바 가상 기계)가 인터프리터 방식으로 바이트 코드를 실행
  • C/C++로 작성된 프로그램보다 실행이 느리다고 알려져 있음
  • 최근에는 실행하는 도중 자바 프로그램을 해당 CPU의 기계어 코드로 컴파일 하고 CPU가 바로 기계어를 실행하도록 하는 JIT(Just in Time) 컴파일링 기법을 사용
  • 실행 성능이 C/C++와 거의 비슷하도록 개선됨