클래스 로더(Class Loader)자바는 컴파일 타임이 아닌 런타임(Byte Code를 실행하는 시점)에 클래스를 로드하고 링크하는 특징을 가지고 있습니다. 이를 동적 로드라 합니다. 이러한 동적 로드를 담당하는 것이 JVM의 구성 요소 중 하나인 클래스 로더(Class Loader) 입니다. 클래스 로더(Class Loader)는 JVM의 Runtime Data Area의 메소드 영역(=Method Area, Static Area, Class Area)에 동적으로 클래스를 로드하는 역할을 합니다. 이러한 클래스 로더는 로딩, 링크, 초기화 단계로 나뉘어져 있습니다. 클래스 로더의 3단계로딩(Loading)자바 바이트 코드(.class)를 메소드 영역에 저장합니다.각 자바 바이트 코드(.class)는 ..
여러 JDK가 존재하는 이유여러 JDK가 존재하는 가장 큰 이유는 라이센스 때문입니다.최신 버전의 Oracle JDK 17, 18의 경우 "Oracle No-Free Terms and Conditions(NFTC)" 라이센스가 적용됩니다. 사용 가능한 목적과 대상은 다음과 같으며 회사에서 상용 목적으로는 사용이 불가합니다."internally use the unmodified Programs for the purposes of developing, testing, prototyping and demonstrating your applications, and running the Program for Your own personal use or internal business operations” JAVA..
JVM의 init 메서드, 객체 초기화를 위한 인스턴스 초기화 메서드인스턴스 초기화 메서드(instance initialization method)JVM은 객체 인스턴스를 초기화할 때 init 이라는 고유한 메서드를 활용합니다. 예를 들어, 다음과 같이 Object 객체를 생성하는 코드가 있다고 가정해보겠습니다.Object obj = new Object(); 해당 코드를 컴파일 한 후 Byte Code를 살펴보면 다음과 같습니다.0: new #2 // class java/lang/Object3: dup4: invokespecial #1 // Method java/lang/Object."":()V7: astore_1 JVM은 객체의 초기화를 위해 이라는 특별한 이름의 ..
ReflectionReflection은 구체적인 클래스 정보를 알지 못하더라도, 그 클래스의 메서드, 타입, 변수들에 접근할 수 있도록 도와주는 자바 API입니다.컴파일 시간이 아닌 실행 시간에 동적으로 특정 클래스의 정보를 추출할 수 있는 프로그래밍 기법입니다. 이는 동적 바인딩과 관련이 있습니다. Reflection은 언제 사용하나요?1. 동적으로 클래스 로드 시코드 작성 시점에는 어떤 Class를 사용해야 할지 모르지만, Runtime에 Class를 가져와서 실행해야 하는 경우입니다.대표적으로 Spring의 Annotation 기능의 Reflection을 이용하여 프로그램 실행 도중 동적으로 클래스의 정보를 가져와 사용합니다.2. 테스트 코드 작성 시private 변수를 변경하고 싶거나 privat..
JDK(=Java Development Kit)란?Java Application을 개발하기 위해 필요한 도구들의 모음입니다.이는 개발자가 Java 코드를 작성하고 컴파일하여 Byte Code로 변환하는데 사용됩니다.JDK는 Java Compiler, JRE, Java Development Tools로 구성되어 있습니다. JDK는 Oracle Corporation에서 출시한 아래 Java 플랫폼들 중 하나를 구현한 것입니다.Java 플랫폼Java SE: Java Platform, Standard Edition표준 자바 플랫폼으로 표준적인 컴퓨팅 환경을 지원하기 위한 자바 가상머신 규격 및 API 집합을 포함합니다.Java EE, Java ME는 구체적인 목적에 따라서 이 Java SE를 기반으로 API 추..
JVM(=Java Virtual Machine)OS(=운영체제)에 구애 받지 않고 CPU가 자바를 인식, 실행할 수 있게 하는 일종의 가상 컴퓨터입니다.따라서, Java는 JVM으로 인해 "운영체제에 독립적이다."는 장점이 있습니다. 컴파일 과정 원시 코드(=*.java)는 CPU가 인식하지 못하기 때문에 반드시 기계어로 컴파일 해야 합니다.Java는 JVM을 거쳐 OS에 도달하기 때문에 곧바로 OS가 인식할 수 있는 기계어로 컴파일 되지 않고, JVM이 인식할 수 있는 Byte Code(=*.class)로 변환됩니다. Java compiler를 통해 변환된 Byte Code는 기계어가 아니기 때문에 OS가 해석할 수 없습니다.따라서, JVM을 통해 Byte Code를 OS가 해석할 수 있는 기계어로..
- Total
- Today
- Yesterday