Reflection

2025. 4. 28. 01:01·Programming

리플렉션이란

  • 구체적인 클래스 몰라도, 런타임에 클래스의 정보(메서드, 필드, 생성자)를 읽고 조작할 수 있게 해주는 기능
  • 즉, 런타임에 타입을 동적으로 결정하고 사용할 수 있다.

비유하자면, 리플렉션은 문을 모르고 열쇠도 없이 방 안을 들여다보고, 안에 있는 물건도 만질 수 있는 기술이다
(보통 코드는 미리 문과 열쇠를 알아야 하지만, 리플렉션은 모른 채로 작동 가능)

리플렉션이 필요한 이유

프로그램 실행 중 어떤 클래스를 사용할지 모르는 경우

  • Spring DI 컨테이너, ORM 매핑(JPA) 같은 시스템이 필요
  • 유연하고 확장 가능한 구조를 만들기 위해

어디서 Class 객체를 얻을까

  • Class.forName("클래스명") 호출 시 ClassLoader가 해당 클래스를 JVM 메모리 안에서 찾는다.
  • 메모리에 없다면. class 파일을 찾아 로드한다.
  • 이미 메모리에 있으면 재로딩하지 않고 바로 Class 객체를 반환한다.

클래스 로딩 시점은 언제

단계 설명 클래스 로딩 여부
컴파일 .java → .class 파일 변환 ❌ (메모리 안 올림)
빌드 여러 class 파일을 묶어서 jar, war 파일 생성 ❌
실행(런타임) JVM이 프로그램을 실행하며 클래스 로드 ✅ (필요할 때 메모리에 로드)
  • 컴파일/빌드: 디스크에 파일만 만든다.
  • 런타임(실행 시점): JVM이 필요할 때마다 ClassLoader가 클래스를 메모리에 올린다.
  • 사용하지 않는 클래스는 끝까지 로딩되지 않을 수도 있다.

요약

리플렉션은 런타임에 ClassLoader로 로드된 Class 객체를 통해, 코드에 명시하지 않은 타입도 동적으로 조작할 수 있게 해주는 기술이다.

'Programming' 카테고리의 다른 글

macOS에서 Harbor 레지스트리 인증서 설정하기  (0) 2025.04.10
우분투 Harbor HTTPS 설정을 위한 인증서 생성  (0) 2025.04.10
Layered Architecture  (0) 2025.01.07
'Programming' 카테고리의 다른 글
  • macOS에서 Harbor 레지스트리 인증서 설정하기
  • 우분투 Harbor HTTPS 설정을 위한 인증서 생성
  • Layered Architecture
사랑우주인
사랑우주인
  • 사랑우주인
    lovelyAlien
    사랑우주인
  • 전체
    오늘
    어제
  • 글쓰기
    관리
    • 분류 전체보기 (209)
      • Programming (4)
        • Spring (28)
        • Java (46)
        • JPA (2)
        • 디자인 패턴 (5)
        • 개발&아키텍처 (0)
      • Network (14)
      • OS (19)
      • Database (1)
      • Kubernetes (0)
      • Kafka (2)
      • Algorithm (49)
        • BaekJoon (1)
        • Programmers (19)
        • Algorithm (5)
        • Socar (2)
        • LeetCode (19)
      • Interview (2)
      • Issues (2)
      • DotJoin (1)
      • Git (4)
      • 독서 (3)
      • 끄적끄적 (1)
      • 외부활동 (26)
        • 항해플러스 (2)
        • JSCODE 네트워크 (19)
        • JSCODE 자바 (5)
      • SQL (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • GitHub
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    @JsonNaming
    minimum number of arrows to burst balloons
    준영속 엔티티
    트랜잭션
    Generic
    운영체제
    Oauth2
    Thread
    lower bounded wildcards
    rotting oranges
    디자인 패턴
    Climbing Stairs
    제네릭
    JSCode
    BFS
    Process
    RR
    AuthenticationSuccessHandler
    OS
    fcfs
    Reorder List
    pacific atlantic water flow
    LinkedList
    @JsonProperty
    wildcards
    추상화 클래스
    socar
    algorithm
    clone graph
    runner 기법
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.1
사랑우주인
Reflection
상단으로

티스토리툴바