클래스 안에 클래스를 중첩해서 정의된 클래스
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의 접근제어자를 통해 구현이 가능하다.
@Data
public class GetLoansLimitAmtByMallResult {
/* 기본 필드들 생략 */
private List<Mall> mallList; // 중첩 클래스 리스트
// 중첩 클래스 정의
@Data
public static class Mall {
/* 중첩 클래스 필드들 생략 */
}
}
<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>
$ 기호를 사용하여 중첩 클래스를 참조한다.외부클래스명$내부클래스명 형태로 작성한다.property: Java 객체의 프로퍼티명javaType: 컬렉션의 Java 타입 (보통 java.util.List)ofType: 컬렉션 요소의 타입 (중첩 클래스 경로)[Java] 중첩 클래스
중첩클래스를 알아보자 (내부클래스, 정적 중첩클래스, 지역클래스, 익명클래스)
[Java] 김영한의 자바 중급 1편 #7 - 중첩 클래스, 내부 클래스 - 1
💠 OOP 캡슐화 & 정보 은닉 개념 완벽 이해하기