클래스 로더(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은 객체의 초기화를 위해 이라는 특별한 이름의 ..
해당 게시글의 내용은'김영한의 실전 자바 - 중급편'을 기반으로 작성되었으며, 제가 학습한 내용을 토대로 다시 작성하게 되었습니다.익명 클래스(Anonymous Class)익명 클래스(Anonymous class)는 지역 클래스의 특별한 종류의 하나입니다. 익명 클래스는 지역 클래스인데 클래스의 이름이 없다는 특징이 있습니다. 다음 코드를 살펴보겠습니다.package chapter08.local;public class LocalOuterV2 { private int outInstanceVar = 3; public void process(int paramVar) { int localVar = 1; class LocalPrinter implements Printer { ..
해당 게시글의 내용은'김영한의 실전 자바 - 중급편'을 기반으로 작성되었으며, 제가 학습한 내용을 토대로 다시 작성하게 되었습니다.지역 클래스내부 클래스의 종류 중 하나로, 내부 클래스의 특징을 그대로 갖습니다. 따라서, 바깥 클래스의 인스턴스 멤버에 접근할 수 있습니다.class Outer { public void process() { //지역 변수 int localVar = 0; //지역 클래스 class Local {...} Local local = new Local(); }}위 코드 처럼 바깥 클래스의 메서드 안에 정의한 클래스를 지역 클래스라 합니다.특징지역 변수처럼 코드 블럭 안에 클래스를 선언합니다.지역 클래스는 지역 변수에 접근할 수 있습니다.package chapter0..
해당 게시글의 내용은 '김영한의 실전 자바 - 중급편' 을 기반으로 작성되었으며, 제가 학습한 내용을 토대로 다시 작성하게 되었습니다.내부 클래스package chapter08.inner;public class InnerOuter { private static int outClassValue = 3; private int outInstanceValue = 2; class Inner{ private int innerInstanceValue = 1; public void print(){ //자기 자신에 접근 System.out.println(innerInstanceValue); //바깥 클래스의 인스턴스 멤버..
해당 게시글의 내용은 '김영한의 실전 자바 - 중급편' 을 기반으로 작성되었으며, 제가 학습한 내용을 토대로 다시 작성하게 되었습니다.중첩 클래스, 내부 클래스란?클래스 안에 클래스를 중첩해놓은 클래스를 중첩 클래스(Nested Class)라고 합니다.class(...){ class(...){ }}중첩 클래스의 분류중첩 클래스는 크게 1. 정적 중첩 클래스와 2. 내부 클래스들(내부 클래스, 지역 클래스, 익명 클래스)로 나뉘어 집니다. 또한, 중첩 클래스를 선언하는 위치는 변수를 선언할 때의 위치와 동일합니다.[중첩 클래스의 선언 위치]class Outer{ //정적 중첩 클래스 (static nested class) static class StaticNested { ... } //내부 클래..
Static?자바에서 Static를 사용한다는 것은 메모리에 한 번만 할당되고 프로그램이 종료될 때 해제되는 것을 의미합니다.이를 정확히 이해하기 위해선 메모리 영역에 대한 이해가 필요합니다.Static의 메모리일반적으로 우리가 만든 Class는 Static 영역에 생성되고, new 키워드를 통해 생성된 객체는 Heap 영역에 생성됩니다. 객체 생성 시 할당된 Heap 영역의 메모리는 GC(Garbage Collector)에 의해 관리되어 집니다. 하지만 Static를 통해 Static 영역에 할당된 메모리는 모든 객체가 공유하는 메모리 라는 장점을 지니지만, Garbage Collector의 관리 영역 밖에 존재하기 때문에 Static을 자주 사용하면 프로그램의 종료 시까지 메모리가 할당된 채로 존재하..
- Total
- Today
- Yesterday