[JAVA] Reflection 활용하여 객체 필드 복사하기 [원본 객체에서 필드 값을 읽어 대상 객체에 값 설정]

2025. 4. 12. 13:30·◎ Java/Java☕
728x90


- Reflection 활용하여 객체 필드 복사하기

public class ReflectionExample {
    public static void copyFields(Object source, Object target) throws Exception {
        Class<?> sourceClass = source.getClass();
        Class<?> targetClass = target.getClass();

        Field[] sourceFields = sourceClass.getDeclaredFields();

        for (Field sourceField : sourceFields) {
            try {
                Field targetField = targetClass.getDeclaredField(sourceField.getName());

                sourceField.setAccessible(true);
                targetField.setAccessible(true);

                Object value = sourceField.get(source); // 원본 객체의 값을 읽음
                targetField.set(target, value);         // 대상 객체에 값을 설정
            } catch (NoSuchFieldException e) {
                // target 클래스에 해당 필드가 없으면 무시
            }
        }
    }

    public static void main(String[] args) throws Exception {
        class Source {
            private String name = "John";
            private int age = 30;
        }

        class Target {
            private String name;
            private int age;
        }

        Source source = new Source();
        Target target = new Target();

        copyFields(source, target);

        System.out.println("Target name: " + target.name); // "John"
        System.out.println("Target age: " + target.age);   // 30
    }
}

1. 원본 객체(source)에서 필드 값을 읽음

sourceField에서 값을 가져오며, 필드 타입과 관계없이 Object 타입으로 반환한다.

 

2. 대상 객체(target)에 값을 설정

필드의 타입에 맞게 값을 설정한다. 내부적으로는 타입 검사와 변환이 이루어져야 하므로, 필드의 타입과 value가 일치하지 않으면 예외가 발생한다.

728x90
'◎ Java/Java☕' 카테고리의 다른 글
  • [JAVA] 서블릿 필터 코드로 보안 헤더 설정하기 [HttpOnly, Content-Security-Policy, X-Content-Type-Options, X-Frame-Options, X-XSS-Protection]
  • [JAVA] 서블릿 필터를 사용한 기존 세션 무효화 [여러 pc에서 중복 로그인 막는 방법]
  • [JAVA] Random 클래스란? [무작위 숫자(난수)를 생성하는 클래스]
  • [JAVA] 자바에서 Map을 반복시키는 방법 [Java Map 반복문, 순회하는 방법]
예르미(yermi)
예르미(yermi)
끊임없이 제 자신을 계발하는 개발자입니다👨🏻‍💻
  • 예르미(yermi)
    예르미의 코딩노트
    예르미(yermi)
  • 전체
    오늘
    어제
    • 분류 전체보기 (937)
      • ◎ Java (133)
        • Java☕ (93)
        • JSP📋 (26)
        • Applet🧳 (6)
        • Interview👨🏻‍🏫 (8)
      • ◎ JavaScript (48)
        • JavaScript🦎 (25)
        • jQuery🌊 (8)
        • React🌐 (2)
        • Vue.js🔰 (6)
        • Node.js🫒 (3)
        • Google App Script🐑 (4)
      • ◎ HTML5+CSS3 (17)
        • HTML5📝 (8)
        • CSS3🎨 (9)
      • ──────────── (0)
      • ▣ Framework (67)
        • Spring🍃 (36)
        • Spring Boot🍀 (12)
        • Bootstrap💜 (3)
        • Selenium🌕 (6)
        • MyBatis🐣 (10)
      • ▣ Tools (47)
        • API🎯 (18)
        • Library🎲 (15)
        • JitPack🚀 (3)
        • Jenkins👨🏻 (7)
        • Thymeleaf🌿 (4)
      • ▣ Server (32)
        • Apache Tomcat🐱 (14)
        • Apache HTTP Server🛡️ (1)
        • Nginx🧶 (7)
        • OracleXE💿 (4)
        • VisualSVN📡 (4)
      • ▣ OS : 운영체제 (18)
        • cmd : 명령프롬프트💻 (10)
        • Linux🐧 (8)
      • ▣ SQL : Database (56)
        • Oracle SQL🏮 (26)
        • PL SQL💾 (9)
        • MySQL🐬 (6)
        • MariaDB🦦 (6)
        • H2 Database🔠 (3)
        • SQL 실전문제🐌 (6)
      • ────────── (0)
      • ◈ Human Project (86)
        • Mini : Library Service📚 (15)
        • 화면 설계 [HTML]🐯 (10)
        • 서버 프로그램 구현🦁 (15)
        • Team : 여수어때🛫 (19)
        • Custom : Student🏫 (9)
        • Custom : Board📖 (18)
      • ◈ Yermi Project (40)
        • 조사모아(Josa-moa)📬 (5)
        • Riddle-Game🧩 (6)
        • 맛있을 지도🍚 (2)
        • 어디 가! 박대리!🙋🏻‍♂️ (5)
        • 조크베어🐻‍❄️ (4)
        • Looks Like Thirty🦉 (2)
        • Toy Project💎 (12)
        • 오픈소스 파헤치기🪐 (4)
      • ◈ Refactoring (15)
        • Mini : Library Service📚 (8)
        • 서버 프로그램 구현🦁 (1)
        • Team : 여수어때🛫 (0)
        • 쿼리 튜닝일지🔧 (6)
      • ◈ Coding Test (89)
        • 백준(BOJ)👨🏻‍💻 (70)
        • 프로그래머스😎 (2)
        • 코드트리🌳 (7)
        • 알고리즘(Algorithm)🎡 (10)
      • ◈ Study (102)
        • 기초튼튼 개발지식🥔 (25)
        • HTTP 웹 지식💡 (4)
        • 클린코드(Clean Code)🩺 (1)
        • 디자인패턴(GoF)🥞 (12)
        • 다이어그램(Diagram)📈 (4)
        • 파이썬(Python)🐍 (16)
        • 에러노트(Error Note)🧱 (34)
        • 웹 보안(Web Security)🔐 (6)
      • ◈ 공부모임 (39)
        • 혼공학습단⏰ (18)
        • 코드트리 챌린지👊🏻 (2)
        • 개발도서 100독👟 (8)
        • 나는 리뷰어다🌾 (11)
      • ◈ 자격증 공부 (37)
        • 정보처리기사🔱 (16)
        • 정보처리산업기사🔅 (9)
        • 컴퓨터활용능력 1급📼 (12)
      • ─────────── (0)
      • ◐ 기타 (113)
        • 알아두면 좋은 팁(tip)✨ (46)
        • 개발자의 일상🎈 (44)
        • 개발도서 서평🔍 (10)
        • 개발관련 세미나🎤 (2)
        • 블로그 꾸미기🎀 (9)
        • 사도신경 프로젝트🎚️ (2)
  • 인기 글

  • 최근 댓글

  • 태그

    html
    Java
    BOJ
    Project
    jsp
    코딩
    백준 티어
    코딩 테스트
    spring
    javascript
    백준
    Oracle
    프로그래밍
    SQL
    일상
    CSS
    Database
    Error Note
    자바스크립트
    꿀팁
  • 250x250
  • hELLO· Designed By정상우.v4.10.3
예르미(yermi)
[JAVA] Reflection 활용하여 객체 필드 복사하기 [원본 객체에서 필드 값을 읽어 대상 객체에 값 설정]
상단으로

티스토리툴바