Language/JAVA 15

[JAVA]클래스 로더(Class Loader)란?

클래스 로더(Class Loader)자바는 컴파일 타임이 아닌 런타임(Byte Code를 실행하는 시점)에 클래스를 로드하고 링크하는 특징을 가지고 있습니다. 이를 동적 로드라 합니다. 이러한 동적 로드를 담당하는 것이 JVM의 구성 요소 중 하나인 클래스 로더(Class Loader) 입니다. 클래스 로더(Class Loader)는 JVM의 Runtime Data Area의 메소드 영역(=Method Area, Static Area, Class Area)에 동적으로 클래스를 로드하는 역할을 합니다. 이러한 클래스 로더는 로딩, 링크, 초기화 단계로 나뉘어져 있습니다. 클래스 로더의 3단계로딩(Loading)자바 바이트 코드(.class)를 메소드 영역에 저장합니다.각 자바 바이트 코드(.class)는 ..

Language/JAVA 2024.10.22

[JAVA]JDK 종류 파헤치기(Open JDK, Oracle JDK, Adpot, Corretto, Zulu)

여러 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..

Language/JAVA 2024.10.18

[JAVA]JVM의 init 메서드?

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은 객체의 초기화를 위해 이라는 특별한 이름의 ..

Language/JAVA 2024.10.11

[JAVA]익명 클래스(Anonymous Class)

해당 게시글의 내용은'김영한의 실전 자바 - 중급편'을 기반으로 작성되었으며, 제가 학습한 내용을 토대로 다시 작성하게 되었습니다.익명 클래스(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 { ..

Language/JAVA 2024.09.24

[JAVA]지역 클래스(Local Class)

해당 게시글의 내용은'김영한의 실전 자바 - 중급편'을 기반으로 작성되었으며, 제가 학습한 내용을 토대로 다시 작성하게 되었습니다.지역 클래스내부 클래스의 종류 중 하나로, 내부 클래스의 특징을 그대로 갖습니다. 따라서, 바깥 클래스의 인스턴스 멤버에 접근할 수 있습니다.class Outer { public void process() { //지역 변수 int localVar = 0; //지역 클래스 class Local {...} Local local = new Local(); }}위 코드 처럼 바깥 클래스의 메서드 안에 정의한 클래스를 지역 클래스라 합니다.특징지역 변수처럼 코드 블럭 안에 클래스를 선언합니다.지역 클래스는 지역 변수에 접근할 수 있습니다.package chapter0..

Language/JAVA 2024.09.24

[JAVA]내부 클래스(Inner Class)

해당 게시글의 내용은 '김영한의 실전 자바 - 중급편'을 기반으로 작성되었으며, 제가 학습한 내용을 토대로 다시 작성하게 되었습니다.내부 클래스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); //바깥 클래스의 인스턴스 멤버에..

Language/JAVA 2024.09.23

[JAVA]중첩/내부 클래스

해당 게시글의 내용은 '김영한의 실전 자바 - 중급편' 을 기반으로 작성되었으며, 제가 학습한 내용을 토대로 다시 작성하게 되었습니다.중첩 클래스, 내부 클래스란?클래스 안에 클래스를 중첩해놓은 클래스를 중첩 클래스(Nested Class)라고 합니다.class(...){ class(...){ }}중첩 클래스의 분류중첩 클래스는 크게 1. 정적 중첩 클래스와 2. 내부 클래스들(내부 클래스, 지역 클래스, 익명 클래스)로 나뉘어 집니다. 또한, 중첩 클래스를 선언하는 위치는 변수를 선언할 때의 위치와 동일합니다.[중첩 클래스의 선언 위치]class Outer{ //정적 중첩 클래스 (static nested class) static class StaticNested { ... } //내부 클래..

Language/JAVA 2024.09.23

[JAVA]static 파헤치기

Static?자바에서 Static를 사용한다는 것은 메모리에 한 번만 할당되고 프로그램이 종료될 때 해제되는 것을 의미합니다.이를 정확히 이해하기 위해선 메모리 영역에 대한 이해가 필요합니다.Static의 메모리일반적으로 우리가 만든 Class는 Static 영역에 생성되고, new 키워드를 통해 생성된 객체는 Heap 영역에 생성됩니다. 객체 생성 시 할당된 Heap 영역의 메모리는 GC(Garbage Collector)에 의해 관리되어 집니다. 하지만 Static를 통해 Static 영역에 할당된 메모리는 모든 객체가 공유하는 메모리 라는 장점을 지니지만, Garbage Collector의 관리 영역 밖에 존재하기 때문에 Static을 자주 사용하면 프로그램의 종료 시까지 메모리가 할당된 채로 존재하..

Language/JAVA 2024.09.23

[JAVA]리플렉션(Reflection)

ReflectionReflection은 구체적인 클래스 정보를 알지 못하더라도, 그 클래스의 메서드, 타입, 변수들에 접근할 수 있도록 도와주는 자바 API입니다.컴파일 시간이 아닌 실행 시간에 동적으로 특정 클래스의 정보를 추출할 수 있는 프로그래밍 기법입니다. 이는 동적 바인딩과 관련이 있습니다. Reflection은 언제 사용하나요?1. 동적으로 클래스 로드 시코드 작성 시점에는 어떤 Class를 사용해야 할지 모르지만, Runtime에 Class를 가져와서 실행해야 하는 경우입니다.대표적으로 Spring의 Annotation 기능의 Reflection을 이용하여 프로그램 실행 도중 동적으로 클래스의 정보를 가져와 사용합니다.2. 테스트 코드 작성 시private 변수를 변경하고 싶거나 privat..

Language/JAVA 2024.09.13

[JAVA]프로세스(Process)와 쓰레드(Thread)의 차이

프로세스와 쓰레드프로세스시스템에서 실행 중인 프로그램을 이야기합니다. 자신만의 메모리 공간을 포함한 독립적인 실행 환경을 가지고 있습니다. 우리가 사용하는 프로그램들의 일부는 여러 프로세스 간 상호 작용하는 것일 수 있습니다.JVM은 하나의 프로세스로 실행되며, 동시에 여러 작업을 수행하기 위해 멀티 쓰레드를 지원하고 있습니다. 쓰레드프로세스 안에서 독립적으로 실행되는 작은 실행 단위를 의미합니다.쓰레드는 JVM에 의해 관리되며, 프로세스에는 적어도 한 개 이상의 쓰레드가 존재합니다. Main 쓰레드 하나로 시작하여 쓰레드를 추가 생성하게 되면 멀티 쓰레드 환경이 됩니다.이러한 쓰레드는 프로세스의 리소스를 공유하기 때문에 효율적이긴 하나, 리소스 동기화와 같은 문제점이 발생합니다.JAVA의 쓰레드Java..

Language/JAVA 2024.09.09