이너 클래스의 바깥 클래스의 멤버 접근
cpu는 private 멤버이지만 접근이 가능한 것을 알 수 있다.
지역 클래스
익명 객체
익명 객체를 위한 인터페이스 추가하기
실드 클래스
실드 클래스 작성하기
특정 객체 자료형에 따라 when문과 is에 의해 선택적으로 실행될 수 있다.
열거형 클래스
enum class 클래스 이름 [(생성자)] {
상수1[(값)], 상수2[(값)], 상수3[(값)], ...
[; 프로퍼티 혹은 메서드]
}
인터페이스를 통한 열거형 클래스 구현하기
코드에 부가 정보를 추가
주로 컴파일러나 프로그램 실행 시간에서 사전 처리를 위해 사용
애노테이션 선언하기
annotation class 애노테이션 이름
+ 연산자 오버로딩
산술연산자, 호출연산자, 인덱스 접근 연산자, 단일 연산자, 범위 연산자, 대입 연산자, 동등성 연산자, 비교 연산자를 오버로딩을 통해 필요하다면 추가할 수 있다.
제네릭은 클래스 내부에서 사용할 자료형을 나중에 인스턴스를 생성할 때 확정한다.
제네릭을 사용하면 객체의 자료형을 컴파일할 때 체크하기 때문에 객체 자료형의 안정성을 높이고 형 변환의 번거로움이 줄어든다.
간단한 제네릭의 예
제네릭에서 사용하는 형식 매개변수 이름
E : 요소(Element)
K : 키(Key)
N : 숫자(Number)
T : 형식(Type)
V : 값(Value)
S, U, V etc : 두 번째, 세번째, 네번째 형식
만일 객체 생성시 생성자에서 유추될 수 있는 자료형이 있다면 선언된 자료형인 <String>
이나 <Int>
는 생략 가능하다
val box3 = Box(1) // 1은 int형이므로 Box<Int>로 추론
val box4 = Box("Hello") // Hello는 String으로 추론
제네릭 클래스
자료형 변환
일반적으로 상위 클래스와 하위 클래스의 선언 형태에 따라 클래스의 자료형을 변환할 수 있지만 제네릭 클래스는 가변성을 지정하지 않으면 형식 매개변수에 상,하위 클래스가 지정되어도 서로 자료형이 변환되지 않는다.
제네릭 클래스의 자료형 변환하기
형식 매개변수의 null제어
형식 매개변수에 null이 가능한 제네릭 클래스
null을 지정하지 않으려면 자료형으로 Any를 지정한다.