코틀린학습 - #3 클래스

2020. 11. 11. 00:11개발&TIL/kotlin

클래스 계층 정의

인터페이스에 프로퍼티 선언이 들어갈 수 있다.

번잡스러움을 피하기 위해 일부 표준 메소드를 생성해준다.

sealed 는 클래스 상속을 제한한다.

클래스 이름 뒤에 콜론을 붙이고 인터페이스와 클래스 이름을 적는 것으로 클래스 확장과 인터페이스를
모두 처리한다.

override 변경자는 상위 클래스나 상위 인터페이스에 있는 프로퍼티나 메소드를 오버라이드한다는 표시이다.

상위 타입의 이름을 꺽쇠 괄호 사이에 넣어서 "super"를 지정하면
어떤 상위 타입의 맴버 메소드를 호출할지 지정할 수 있다.

게터와 세터에서 뒷받침하는 필드에 접근

field 라는 특별한 식별자를 통해 뒷받침하는 필드에 접근할 수 있다.

open, final, abstract 변경자: 기본적으로 final

코틀린의 클래스와 메소드는 기본적으로 final public 이다.

상속을 허용하려면 캘스 앞에 open 변경자를 붙여야 한다는.

open class RichButton : Clickable {
    fun disable() {}
    open fun animate() {}
    override fun click() {} //오버라이드한 메소드는 기본적으로 열려있다.

    final override fun click2() {} //오버라이드 메소드 구현을 하위에서 오버라이드 하지 못하게 한다.

}

추상 메소드는 항상 열려있다.

인터페이스 맴버는 항상 열려 있으며 final로 변경할 수 잆다.

가시성 변경자

자바의 기본 가시성인 package-private은 코틀린에 없다.
코틀린은 패키지를 네임스페이스를 관리하기 위한 용도로만 사용한다.

internal 가시성 변경자를 도입하여 모듈 내부에서만 볼 수 있음을 의미

protected 멤버는 오직 어떤 클래스나 그 클래스를 상속한 클래스 안에서만 보인다.
(java에서는 같은 패키지안에서 접근 가능)

중첩 클래스

코틀린의 중첩 클래스는 명시적으로 요청하지 않는 한 바깥쪽 클래스 인스턴스에 대한 접근 권한이
없는점이 자바와 다르다.

자바에서 중첩 클래스를 static으로 선언하면 그 클래스를 둘러싼 바깥쪽 클래스에 대한 묵시적인 참조가
사라진다.

아무런 변경자가 붙지 않으면 자바 static 중첩 클래스와 같다.
inner 변경자를 붙여야 바깥쪽 클래스에 대한 참조를 포함하게 만든다.

  • 내부 클래스 Inner 안에서 바깥쪽 클래스 Outer의 참조에 접근하려면 'thiis@Outer'
class Outer {
    inner class Inner {
        fun getOuterReference() : Outer = this@Outer
    }
}

sealed 인터페이스를 정의할 수는 없다.

클래스 초기화

주 생성자 - 클래스 이름 뒤에 오는 괄호로 둘러싸인 코드

constructor - 주 생성자나 부 생성자 정의를 시작할 때 사용

init - 초기화 블록을 시작

인자에 대한 디폴트 값을 제공하기 위해 부 생성자를 여럿만들지 말고 대신 파라미터의 디폴트 값을 생성자 스그니처에
직접 명시하라

super() 를 통해 클래스 자신의 대응하는 상위 클래스 생성자를 호출할 수 있다.
this() 를 통해 클래스 자신의 다른 생성자를 호출할 수 있다.

lateinit 변경자를 널이 될 수 없는 프로퍼티에 지정하면 프로퍼티를 생성자가 호출된 다음에 초기화한다.

컴파일러가 생성한 메소드: 데이터 클래스와 클래스 위임

java에서는 equals, hashCode, toString 메소드를 구현해야 한다. 코틀린 컴파일러는 이런 메소드를 생성하는 작업을
보이지 않는 곳에서 해준다.

  • toString() : 클래스의 인스턴스의 문자열 표현을 얻는 방법

  • equals() : 객체의 동등성을 비교

  • hashCode() : 해시 기반 컨테이너에서 키로 사용되는 메서드

  • == : java의 '=='과 다르게 객체의 동등성을 검사한다. (= equals)

Any 는 java.lang.Object에 대응하는 클래스로, 코틀린의 모든 클래스의 최상위 클래스

is 검사는 자바의 instanceof와 같다.

data 변경자가 붙은 클래스를 데이터 클래스라 부른다. 데이터클래스로 선언하면 toString(), equals(), hashCode() 포함됨.

불변 객체를 주로 사용하면 다른 스레드가 변경할 수 없으므로 스레드를 동기화해야 할 필요가 줄어든다.

클래스 위임 by 키워드를 사용하면 데코레이터 패턴을 활용할때 필요한 메소드를 자동생성한다.

Object 키워드를 사용하면 객체 선언을 사용하여 싱글턴을 쉽게 만들수 있다.

코틀린에서는 정적인 멤버가 없다. static 키워드를 지원하지 않고 대신 패키지 수준의 최상위 함수와 객체 선언을 활용

companion 이라는 특별한 표식을 붙이면 그 클래스의 동반 객체로 만들 수 있다.

728x90

'개발&TIL > kotlin' 카테고리의 다른 글

코틀린학습 - #6 오버로딩  (0) 2020.11.17
코틀린학습 - #5 타입 시스템  (0) 2020.11.17
코틀린학습 - #4 람다  (0) 2020.11.16
코틀린학습 - #2 함수  (0) 2020.11.09
코틀린학습 - #1 기초  (0) 2020.11.09