본문 바로가기

면접 대비 이것저것

면접 대비 정리2

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로 변환해주기 때문
  1. Java Compiler가 JAVA로 작성된 소스 코드 .java 파일을 .class 파일인 Byte Code로 컴파일
    (단, 해당 코드는 직접 CPU에서 동작할 수 있는 코드가 아님 정확히 말하면 가상머신 JVM이 이해할 수 있는 코드)
  2. 이제 이 Byte Code를 기계어로 변환시키기 위해 가상 CPU가 필요한데, 이것이 JVM(Java Virtual Machine)의 역할
  3. JVM이 Byte Code를 기계어(Binary Code)로 변환
  4. 이렇게 JVM에 의해 컴파일된 기계어는 바로 CPU에서 실행되어 사용자에게 서비스를 제공

JVM 단점

  • 자바 프로그램은 일반 프로그램보다 자바 가상 머신이라는 한 단계를 더 거쳐야 하므로, 결국은 상대적으로 실행 속도가 느림
  • 이를 보완하기 위해 JIT 컴파일러 라는내부 프로그램을 사용
    • JIT(Just-In-Time Compiler)
      • JIT 컴파일러는 같은 코드를 매번 해석하지 않고, 실행할 때 컴파일을 하면서 해당 코드를 캐싱, 이후에는 바뀐 부분만 컴파일하고 나머지는 캐싱된 코드를 사용

 

JAVA 프로그램 실행 과정

  1. 소스코드(MyPrograme.java)를 작성
  2. 컴파일러(Compiler)는 자바 소스코드를 이용하여 클래스 파일(MyProgram.class)을 생성
    컴파일 된 클래스 파일은JVM(Java Virtual Machine)이 인식할 수 있는 바이트 코드 파일
  3. JVM은 클래스 파일의 바이트 코드를 해석하여 바이너리 코드로 변환하고 프로그램을 수행
  4. 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