[Java] MyBatis에서 중첩 클래스(Nested Class)를 활용한 복합 데이터 매핑하기

해니·2025년 9월 2일
0

Java

목록 보기
34/34
post-thumbnail

중첩 클래스란?

  • 클래스 안에 클래스를 중첩해서 정의된 클래스

  • MyBatis에서는 주로 복합 객체의 구조를 표현할 때 사용하며, 관련성이 높은 데이터를 논리적으로 그룹화 할 수 있다.

  • 선언한 방법에 따라 static으로 선언된 중첩 클래스인 정적 클래스(static class), non-static ( static으로 선언되지 않은) 내부 클래스 (Inner Class)로 구분된다.



/* 출처 : https://nyyang.tistory.com/211 */ 

class Outer {
	...
	// 정적 중첩 클래스 : 정적 변수와 같이 앞에 static이 붙어 있다.
	static class StaticNested {
		...
	}
	
	// 내부 클래스 : 인스턴스 변수와 같이 앞에 static이 붙어있지 않다.
	class Inner {
		...
	}
}




중첩 클래스 사용 이유

  • 논리적 구조화
    : 관련된 데이터를 하나의 클래스 안에서 관리할 수 있다.
  • 캡슐화
    : 외부 클래스와 밀접한 관계의 데이터 구조 표현 할 수 있다.



💊캡슐화 💊

  • 변수나 메소드들을 캡슐로 감싸서 안보이게 하는 정보 은닉 개념중 하나
  • 외부의 잘못된 접근으로 값이 변하는 의도치 않는 동작을 방지하는 보호 효과를 볼 수 있다.
  • Java에서는 대표적으로 protected , default , private의 접근제어자를 통해 구현이 가능하다.




🧩예시 코드 🧩


Java 모델 클래스 설계

@Data
public class GetLoansLimitAmtByMallResult {

    /* 기본 필드들 생략 */
    
    private List<Mall> mallList; // 중첩 클래스 리스트
    
    // 중첩 클래스 정의
    @Data
    public static class Mall {
		
        /* 중첩 클래스 필드들 생략 */

    }
    

}



MyBatis ResultMap 설정

<resultMap id="GetLoansLimitAmtByMallResultMap" 
           type="com.devlab.www.common.dao.dataSourceDefault.model.result.GetLoansLimitAmtByMallResult">
    
    <!-- 기본 필드 매핑 생략 .. -->
    
    <!-- 중첩 클래스 컬렉션 매핑 -->
    <collection property="mallList" 
                javaType="java.util.List" 
                ofType="com.devlab.www.common.dao.dataSourceDefault.model.result.GetLoansLimitAmtByMallResult$Mall">
        
        <!-- 중첩 클래스 필드 매핑 생략 .. -->
        
    </collection>
</resultMap>

  1. 중첩 클래스 참조 방식
  • $ 기호를 사용하여 중첩 클래스를 참조한다.
  • 외부클래스명$내부클래스명 형태로 작성한다.

  1. Collection 태그의 주요 속성
  • property: Java 객체의 프로퍼티명
  • javaType: 컬렉션의 Java 타입 (보통 java.util.List)
  • ofType: 컬렉션 요소의 타입 (중첩 클래스 경로)





출처

[Java] 중첩 클래스
중첩클래스를 알아보자 (내부클래스, 정적 중첩클래스, 지역클래스, 익명클래스)
[Java] 김영한의 자바 중급 1편 #7 - 중첩 클래스, 내부 클래스 - 1
💠 OOP 캡슐화 & 정보 은닉 개념 완벽 이해하기

profile
💻 ⚾️ 🐻

0개의 댓글