본문 바로가기

Java5

자바 클래스 초기화 탐구 궁금했던 내용 @Slf4j public class ClassLoaderTest { @Test void classInitTest() throws Exception { Class classDriverA = Class.forName("com.study.java_practice.ClassLoaderTest$DriverA"); ClassLoader classLoader = classDriverA.getClassLoader(); Class classDriverB = classLoader.loadClass("com.study.java_practice.ClassLoaderTest$DriverB"); } static class DriverA { static { log.info("DriverA : 초기화 되었습니다.");.. 2023. 1. 13.
Java의 상속과 생성자 최근에 면접을 보면서 내 공부 상태(?)에 충격을 먹고 자바 공부를 좀 더 깊게 해보기로 결심했습니다. 최근 백기선 선생님의 자바 강의를 듣고있는데, "이거 모르시면 자바 공부 제대로 안하신거에요"라는 말에 뼈를 많이 맞아서, 뼈가 거의 으스러져서 사라지고 있습니다. (ㅠㅠ) 오늘도 강의를 듣다가, 상속에 대해 제대로 알고있지 않은 부분이 있어 이에 대해 정리 해보고자 합니다. 상속이란? 개념만 간단히 짚고 넘어가겠습니다. 상속이란, 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것입니다. 구현은 아주 간단한데, 새로 작성할 클래스 이름 뒤에, 상속 받고자 하는 클래스를 extends라는 키워드와 함께 작성해주기만 하면 됩니다. /** * Child : 자식 클래스, 하위(sub) 클래스 * Par.. 2022. 10. 21.
Class Loader의 역할과 동작 방식 이 글에서는 클래스로더의 역할과 동작 방식을 알아보고자 합니다. 클래스로더는 .class 파일을 JVM으로 로딩시켜주는 역할 이외에도, 여러 역할을 수행합니다. 클래스로더의 동작 방식은 로딩 -> 링크 -> 초기화 순서로 동작합니다. 로딩 클래스 로더가 .class 파일을 읽고 적절한 바이너리 데이터를 만듭니다. 만든 바이너리 데이터를 "메소드" 영역에 저장합니다. 메소드 영역에는 아래와 같은 데이터를 저장합니다. FQCN (Fully Qualified Class Name) : 패키지명까지 포함된 클래스명이라고 합니다. 클래스, 인터페이스, 이넘(enum) 메소드, 변수 로딩이 끝나게 되면, 해당 클래스 타입의 Class 객체를 생성하고 "힙 영역"에 저장합니다. 링크 링크는 아래 세 단계로 나눠져 있습.. 2022. 10. 20.
JVM(Java Virtual Machine)의 구조 이번 글에서는 JVM의 구조에 대해 다뤄보도록 하겠습니다. JVM은 Java가 Write Once, Run Anywhere를 지킬 수 있도록 도와주는 가상 머신이며, OS에 대해 독립적으로 Java 애플리케이션을 실행할 수 있도록 도와주는 중요한 역할을 합니다. 클래스 로더 .class 파일을 JVM에 로딩 (바이트 코드를 읽어 메모리에 저장) 크게 다섯 가지 과정을 거칩니다. 로딩 : .class 파일을 JVM 메모리에 로드 검증 : 자바 언어 명세 or JVM 명세에 명시된 대로 구성되었는지를 검증 준비 : 클래스가 필요로 하는 메모리를 준비하여 할당(필드, 메서드, 인터페이스...) 링크 : 클래스의 상수 pool 안의 모든 Symbolic reference를 분석하여 direct reference.. 2022. 10. 20.
JVM, JDK, JRE의 차이점 저는 Java를 주 언어로 사용하고 있음에도 불구하고, JVM, JDK, JRE가 뭔지, 뭐가 다른지를 제대로 이해하고 있지 못했습니다. 공부가 필요하다고 판단하여, 해당 내용을 학습하였고 이를 정리 해보았습니다. 해당 글에서는 차이점에 집중하여 정리하고, 자세한 내용은 추 후 다른 글에 정리하려고 합니다. JVM (Java Virtual Machine) 자바 바이트 코드(.class 파일)를 OS에 특화된 코드로 변환하는 역할을 합니다. JVM 자체는 바이트 코드를 실행하는 표준 입니다. JVM 구현체가 있는데, 이는 특정 밴더가 구현한 JVM을 의미합니다. (밴더 > 오라클, 아마존, ...) 특정 플랫폼에 종속적입니다. (네이티브 코드가 OS에 맞춰서 실행되어야 하기 때문!) JRE (Java Ru.. 2022. 10. 20.