Reflection

2025. 4. 28. 01:01·Programming
목차
  1. 리플렉션이란
  2. 리플렉션이 필요한 이유
  3. 어디서 Class 객체를 얻을까
  4. 클래스 로딩 시점은 언제
  5. 요약

리플렉션이란

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

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

리플렉션이 필요한 이유

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

  • 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
  1. 리플렉션이란
  2. 리플렉션이 필요한 이유
  3. 어디서 Class 객체를 얻을까
  4. 클래스 로딩 시점은 언제
  5. 요약
'Programming' 카테고리의 다른 글
  • macOS에서 Harbor 레지스트리 인증서 설정하기
  • 우분투 Harbor HTTPS 설정을 위한 인증서 생성
  • Layered Architecture
사랑우주인
사랑우주인
  • 사랑우주인
    lovelyAlien
    사랑우주인
  • 전체
    오늘
    어제
  • 글쓰기
    관리
    • 분류 전체보기 (207)
      • Programming (4)
        • Spring (28)
        • Java (46)
        • JPA (2)
        • 디자인 패턴 (5)
        • 개발&아키텍처 (0)
      • Network (12)
      • 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
  • 링크

  • 공지사항

  • 인기 글

  • 태그

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

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

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.