JDK / JVM / JRE
JDK(Java Development Kit)
- JDK는 자바 개발키트(Java Development Kit)의 약자로 개발자들이 자바로 개발하는 데 사용되는 SDK 키트
- SDK(Software Development Kit) : 하드웨어 플랫폼, 운영체제 또는 프로그래밍 언어 제작사가 제공하는 툴
- 자바를 개발 시 필요한 라이브러리들과 javac, javadoc 등의 개발 도구들을 포함되어 있고, 개발을 하려면 자바 프로그램을 실행도 시켜줘야 하기 때문에 JRE도 포함되어 있음
JRE(Java Runtime Environment)
- JVM과 자바 프로그램을 실행(동작)시킬 때 필요한 라이브러리 API를 함께 묶어서 배포되는 패키지
- 자바 런타임 환경에서 사용하는 프로퍼티 세팅이나 리소스 파일(jar 파일)을 가지고 있음
- JRE는 기본적으로 JDK에 포함되어 있기 때문에 JDK를 설치하면 함께 설치됨
- Java로 프로그램을 직접 개발하려면 JDK가 필요하고, 컴파일 된 Java 프로그램을 실행시키려면 JRE가 필요하다고 보면 됨
JVM(Java Virtual Muchine)
- 자바를 실행하는 머신 즉, 자바를 돌리는 프로그램
- 자바로 작성된 모든 프로그램은 JVM(자바 가상 머신)에서만 실행될 수 있으므로, 자바 프로그램을 실행하기 위해서는 반드시 자바 가상 머신이 설치되어 있어야함
- JVM을 사용하면 자바 프로그램을 모든 플랫폼에서 제약 없이 동작하도록 할 수 있음
JAVA의 실행
- C언어의 경우 특정 OS마다 다르게 컴파일 되기 때문에 다른 OS에서 컴파일 된 언어는 읽을 수가 없음
- JAVA 언어로 작성한 소스파일은 직접 운영체제로 가서 실행하는 것이 아닌, JVM을 거쳐서 운영체제와 상호작용
- JVM만 있으면 운영체제가 리눅스든, 맥이든 관계없이 운영체제로부터 독립적으로 프로그램을 제약없이 실행할 수 있다는 의미
- 컴파일된 코드와 하드웨어/OS 사이 중간에서, 해당 하드웨어/OS 환경에 알맞게 JVM이 Byte Code로 변환해주기 때문
- Java Compiler가 JAVA로 작성된 소스 코드 .java 파일을 .class 파일인 Byte Code로 컴파일
(단, 해당 코드는 직접 CPU에서 동작할 수 있는 코드가 아님 정확히 말하면 가상머신 JVM이 이해할 수 있는 코드) - 이제 이 Byte Code를 기계어로 변환시키기 위해 가상 CPU가 필요한데, 이것이 JVM(Java Virtual Machine)의 역할
- JVM이 Byte Code를 기계어(Binary Code)로 변환
- 이렇게 JVM에 의해 컴파일된 기계어는 바로 CPU에서 실행되어 사용자에게 서비스를 제공
JVM 단점
- 자바 프로그램은 일반 프로그램보다 자바 가상 머신이라는 한 단계를 더 거쳐야 하므로, 결국은 상대적으로 실행 속도가 느림
- 이를 보완하기 위해 JIT 컴파일러 라는내부 프로그램을 사용
- JIT(Just-In-Time Compiler)
- JIT 컴파일러는 같은 코드를 매번 해석하지 않고, 실행할 때 컴파일을 하면서 해당 코드를 캐싱, 이후에는 바뀐 부분만 컴파일하고 나머지는 캐싱된 코드를 사용
- JIT(Just-In-Time Compiler)
JAVA 프로그램 실행 과정
- 소스코드(MyPrograme.java)를 작성
- 컴파일러(Compiler)는 자바 소스코드를 이용하여 클래스 파일(MyProgram.class)을 생성
컴파일 된 클래스 파일은JVM(Java Virtual Machine)이 인식할 수 있는 바이트 코드 파일 - JVM은 클래스 파일의 바이트 코드를 해석하여 바이너리 코드로 변환하고 프로그램을 수행
- MyProgram 수행 결과가 컴퓨터에 반영
SOLID 원칙
- SRP(Single Responsibility Principle) - 단일 책임 원칙
- 한 클래스는 하나의 책임만 가져야 함
- OCP(Open/Closed Principle) - 개방-폐쇄 원칙
- 확장에는 열려있고, 수정에는 닫혀 있어야 함
- LSP(Liskov Substitution Principle) - 리스코프 치환 원칙
- 파생 클래스는 기본 클래스의 역할을 대체할 수 있어야 함
- ISP(Interface Segregation Principle) - 인터페이스 분리 원칙
- 인터페이스 내의 메소드는 최소한 일수록 좋음
- 여러개의 구체적인 인터페이스가 더 나음
- 인터페이스 내의 메소드는 최소한 일수록 좋음
- DIP(Dependency Inversion Principle) - 의존 역전 원칙
- 고수준 모듈은 저수준 모듈에 의존해서는 안 되며, 둘 다 추상화에 의존해야 함
즉, 추상화된 인터페이스나 추상 클래스에 의존하여 구체적인 구현에 대한 의존을 낮춰야 함
- 고수준 모듈은 저수준 모듈에 의존해서는 안 되며, 둘 다 추상화에 의존해야 함
'면접 대비 이것저것' 카테고리의 다른 글
면접 대비 정리 (0) | 2023.10.27 |
---|