J.Y.S
¿ whats my interest ?
J.Y.S
전체 방문자
오늘
어제
  • 분류 전체보기 (59)
    • 트러블슈팅 기록 (7)
    • Java&Kotlin (5)
    • Server (22)
    • 데이터 엔지니어링 (3)
    • Architecture& Design Patter.. (1)
    • Daily (11)
    • 알고리즘 공부 (9)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
J.Y.S

¿ whats my interest ?

Java&Kotlin

[Kotlin] 클래스와 인터페이스

2022. 4. 27. 01:21

인터페이스

자바에서의 인터페이스 사용방식과 유사하고, default method 또한 가능하다.

  • syntax
    • interface 로 선언
    • 구현 클래스 뒤에 :(인터페이스이름) 을 사용하여 구현(implement)
    • override fun (인터페이스에 구현되어 있지 않은 메서드) 로 메서드 오버라이드
    • default method의 경우 특별한 키워드 없음.
    • super<인터페이스>.메소드_이름 : 상위 인터페이스의 메서드를 호출
  • 여러 개의 상위 인터페이스를 구현할 때 같은 메서드가 존재하는 경우?
  • —> 자바와 마찬가지로 컴파일 에러가 나서 오버라이딩 메서드를 제공해야함.

open, final , abstract 변경자

final이 default로, 상속 및 오버라이딩이 금지되어있다. open 을 통해 상속이나 오버라이드를 허용할 수 있다.

💡 `final`과 스마트 캐스트는 type 검사 후 변경할 수 없는 변수에만 적용이 가능하다. val 변수이고, 커스텀 접근자가 없는 경우에 가능하다. 또한 다른 클래스가 상속받으면서 커스텀 접근자를 정의하면 스마트 캐스트가 깨지기 때문에 `final` 로 상속이 불가능해야한다.
  • abstract : 자바와 동일. 반드시 자식 클래스에서 오버라이딩 해야함.

가시성 변경자

public 이 default이고, 자바와 다르게 패키지 전용(default)가 없다.

  • internal : 모듈 내부에서만 볼 수 있는 제어자
    • 모듈의 단위란? 컴파일 되는 단위. ex. gradle이 실행되는 하나의 프로젝트
  • protected : 자바와 다르게 protected인 클래스와 상속한 자식 클래스에서만 보임.
    • 자바의 protected는 같은 패키지 내에서 접근할 수 있음.
  • private : 같은 클래스 안에서만 볼 수 있음.

중첩 클래스

Java와 다르게 중첩 클래스는 바깥쪽 클래스 인스턴스에 대한 접근 권한이 없다.

  • 중첩 클래스 : 바깥 클래스에 대한 참조를 저장하지 않음
  • 내부 클래스(inner class) : this@<바깥 클래스 명>
    • 외부 클래스의 속성을 사용
class Outer {
    var text = "Outer Class"

    class Nested {
        fun introduce() {
            println("Nested Class")
            // Outer 클래스에 대한 참조를 저장하지 않음.
//            println(this@Outer.text)
        }
    }
    inner class Inner {
        var text = "Innter Class"

        fun introduceInner() {
            println(text)
        }

        fun introduceOuter() {
            println(this@Outer.text)
        }
    }
}

fun main() {
    Outer.Nested().introduce()

    // Outer 객체가 없으면 inner 객체도 만들 수 없음.
    val outer = Outer()
    val inner = outer.Inner()
    inner.introduceInner()
    inner.introduceOuter()

    outer.text = "Changed Outer Class"
    inner.introduceOuter()
}

 

저작자표시

'Java&Kotlin' 카테고리의 다른 글

[Kotlin] Collection 의 크기가 작은 경우 Sequence 가 성능이 더 떨어질 수 있는 이유  (0) 2022.10.10
[Kotlin] 제네릭스  (0) 2022.05.21
[JAVA] HashMap,HashSet에서 Object를 key로 가지는 경우 get()  (0) 2022.03.11
[JAVA] 제너릭 타입으로 배열을 만들 수 없는 이유 (타입 추론)  (0) 2022.03.09
    'Java&Kotlin' 카테고리의 다른 글
    • [Kotlin] Collection 의 크기가 작은 경우 Sequence 가 성능이 더 떨어질 수 있는 이유
    • [Kotlin] 제네릭스
    • [JAVA] HashMap,HashSet에서 Object를 key로 가지는 경우 get()
    • [JAVA] 제너릭 타입으로 배열을 만들 수 없는 이유 (타입 추론)
    J.Y.S
    J.Y.S

    티스토리툴바