CheerUp_Cheers

자바 언어의 기본 문법 본문

인프런/개체지향 프로그래밍 및 설계 (Java)

자바 언어의 기본 문법

meorimori 2020. 11. 25. 15:19

JAVA는 크로스 플랫폼인가요?

한번만 빌드하면 어디서든 돈다!
 - 특정 언어로 작성한 코드를 여러 플랫폼에서 실행 가능.
 - 여러 디바이스와 운영체제에서 실행가능한 소프트웨어

자바의 장점으로 항상 언급.

크로스 플랫폼일수도 있고, 아닐수도 있다!

 

# 전통적인 컴파일 방식

컴파일하면 실행파일이 나옴.

실행파일은 기계어이며 운영체제가 직접 실행 파일

실행파일은 특정 OS로 겨냥해서 만들어진 것.

 -> 각 운영체제/디바이스마다 실행파일 따로만들어야함

 -> C는 진정한 크로스 플랫폼

 

# 자바의 컴파일 모델

코드 컴파일 -> 바이트코드(실행파일X)

 

- 바이트 코드

  JVM이라는 특수한 프로그램이 이해하는 명령어.

 운영체제/디바이스가 이해하는 기계어가 아님.

 JVM이 실행 중, 최종 플랫폼에 맞는 명령어로 바꾸어 실행해줌.

 JVM에 최적화지만, 기계어보단 느림!

 

# JVM

운영체제에 설치하는 별도의 프로그램

- 컴파일된 바이트코드를 JVM 변환 시켜주는 거다..

 -> 이런 점에서는 크로스 플랫폼이다..

 

- JVM이 설치 안되어있따면?

 Java 프로그램 실행 불가.

 이런 관점에서는 크로스 플랫폼이라고 하기에는 어려움.

 

- JVM이 바이트 코드를 실제 실행하는 방식은?

 과거는 인터프리터 방식.

 최신은 JIT(just-in-time) 컴파일 추가.

 여러가지 컴파일 방식이 공존

 


모듈

# 기존 패키지 시스템 한계1

- 애플래키에션이 사용하는 클래스 목록을 찾는 공식적인 방법이 없었음

 누락된 클래스는 사용하려할때 오류 발생(실행하는 중에 오류)

 그래서 모든 클래스를 같이 배포하는것이 일반적

 

- 문제점

 자바버전이 증가함에 따라 라이브러리의 크기 증가.

 쓰지않는 클래쓰까지..

 패키지 안의 public클래스는 아무나 사용함.

 

# 새로운 방식 : 모듈!

java 8부터 지원
패키지 보다 상위 개념
 - 패키지를 내포

패키지 위에 또다른 개념(모듈)을 만든 것.

 

- 장점

 정말 필요한 패키지만 (경량)

 프로그램 시작시 누락된 모듈 사용 가능.

 어떤 모듈이 사용하는 다른 모듈 목록 찾기 쉬움.

 모듈 사용자에게 공개할 클래스를 특정 가능.

 

- 왜써?

 모듈은 좀더 효율적으로 패키지를 관리 및 배포하는 방법.