[Java 캡슐화] 클래스로더와 리플렉션 API의 완벽한 이해

JVM의 클래스 로딩 메커니즘과 리플렉션 API의 특징, 활용 사례를 설명하는 기술 문서입니다.



클래스 로더와 Class 객체

Class 객체의 생성 원리

클래스 로더는 defineClass 메소드 중 하나를 통해 바이트코드를 JVM에 전달하며, 이 과정에서 Class 객체가 자동 생성 된다.


JVM 클래스 로딩 프로세스

💡 3단계 프로세스

  1. Loading: JVM 메모리로 클래스 파일 로드

  2. Linking: 클래스 파일 검증 및 준비

  3. Initialization: 클래스 변수 초기화


동적 로딩의 특징
메모리 효율을 위해 필요한 시점에 클래스를 동적으로 로드



Reflection API

리플렉션이란 힙 영역에 자동으로 로드된 class 타입의 객체를 통해(앞에서 설명한 자동 Class 객체 생성 효과),
원하는 클래스의 인스턴스를 생성할 수 있도록 지원하고,
인스턴스의 필드와 메소드를 접근 제어자(ex:private)와 상관 없이 사용할 수 있도록 지원하는 API


일반적인 리플렉션 사용?

// 리플렉션 사용 예시
Class<?> clazz = Class.forName("com.example.MyClass");
Constructor<?> constructor = clazz.getDeclaredConstructor();
Object instance = constructor.newInstance();


장단점 분석 🔍

구분 내용
장점 런타임 동적 조작, 높은 유연성
단점 캡슐화 위반(접근 제어자 무시), 성능 저하


실무 활용 사례

@Service
public class UserService {
    // 스프링이 리플렉션으로 자동 주입
    @Autowired
    private UserRepository repository;
}

리플렉션은 프레임워크 개발에서 필수적인 도구이지만, 일반 애플리케이션 개발에서는 인캡슐 방해하는 단점을 고려하여 신중하게 사용해야 합니다.

댓글남기기