Kotlin_05

김재현·2023년 3월 27일
0

이너 클래스의 바깥 클래스의 멤버 접근
cpu는 private 멤버이지만 접근이 가능한 것을 알 수 있다.

지역 클래스

  • 특정 메서드의 블록이나 init블록과 같이 블록 범위에서만 유효한 클래스.

익명 객체

  • object키워드를 사용하는 익명 객체
  • 다중의 인터페이스를 구현할 수 있다.

익명 객체를 위한 인터페이스 추가하기

실드(Sealed) 클래스와 열거형 클래스

실드 클래스

  • 무언가 안전하게 보관하기 위해 묶어 두는 것.(미리 만들어 놓은 자료형들을 묶어서 제공)
  • 실드 클래스 그 자체는 추상 클래스와 같기 때문에 객체를 만들 수 없다.
  • 생성자도 기본적으로는 private이며 private이 아닌 생성자는 허용하지 않는다.
  • 같인 파일 안에서는 상속이 가능하지만, 다른 파일에서는 상속이 불가능하게 제한됨.
  • 블록 안에 선언되는 클래스는 상속이 필요한 경우 open 키워드로 선언될 수 있다.

실드 클래스 작성하기특정 객체 자료형에 따라 when문과 is에 의해 선택적으로 실행될 수 있다.

열거형 클래스

  • 여러개의 상수를 선언하고 열거된 값을 조건에 따라 선택할 수 있는 특수한 클래스
  • 열거형과 실드 는 거의 비슷하지만 열거형 클래스는 실드 클래스처럼 다양한 자료형을 다루지 못한다.
  • enum 키워드와 함께 선언할 수 있다.
enum class 클래스 이름 [(생성자)] {
	상수1[(값)], 상수2[(값)], 상수3[(값)], ...
    [; 프로퍼티 혹은 메서드]
}

인터페이스를 통한 열거형 클래스 구현하기

애노테이션 클래스

코드에 부가 정보를 추가
주로 컴파일러나 프로그램 실행 시간에서 사전 처리를 위해 사용

애노테이션 선언하기

annotation class 애노테이션 이름

7-3 연산자 오버로딩

+ 연산자 오버로딩

산술연산자, 호출연산자, 인덱스 접근 연산자, 단일 연산자, 범위 연산자, 대입 연산자, 동등성 연산자, 비교 연산자를 오버로딩을 통해 필요하다면 추가할 수 있다.


8. 제네릭과 배열

8-1. 제네릭 다루기

제네릭은 클래스 내부에서 사용할 자료형을 나중에 인스턴스를 생성할 때 확정한다.
제네릭을 사용하면 객체의 자료형을 컴파일할 때 체크하기 때문에 객체 자료형의 안정성을 높이고 형 변환의 번거로움이 줄어든다.

간단한 제네릭의 예

제네릭에서 사용하는 형식 매개변수 이름
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으로 추론

제네릭 클래스

  • 형식 매개변수를 1개 이상 받는 클래스.
  • 만일 형식 매개변수를 클래스의 프로퍼티에 사용하는 경우 클래스 내부에서는 사용할 수 없다. 자료형이 특정되지 못하므로 인스턴스를 생성할 수 없기 때문이다.(초기화되거나 abstract로 선언되어야 함)
  • 대신 주 생성자나 부 생성자에 형식 매개변수를 지정해 사용할 수 있다.

자료형 변환
일반적으로 상위 클래스와 하위 클래스의 선언 형태에 따라 클래스의 자료형을 변환할 수 있지만 제네릭 클래스는 가변성을 지정하지 않으면 형식 매개변수에 상,하위 클래스가 지정되어도 서로 자료형이 변환되지 않는다.

제네릭 클래스의 자료형 변환하기

형식 매개변수의 null제어

  • 제네릭의 형식 매개변수는 기본적으로 null가능한 형태로 선언된다.

형식 매개변수에 null이 가능한 제네릭 클래스null을 지정하지 않으려면 자료형으로 Any를 지정한다.

profile
배운거 정리하기

0개의 댓글