Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

05 #26

Open
youngvly opened this issue Dec 3, 2021 · 0 comments
Open

05 #26

youngvly opened this issue Dec 3, 2021 · 0 comments

Comments

@youngvly
Copy link
Owner

youngvly commented Dec 3, 2021

클래스와 인터페이스

계층정의

  • 상위 클래스에 있는 메소드와 시그니처가 같은 메소드를 우연히 하위 클래스에서 선언하는 경우, 컴파일이 되지않기때문에 override 변경자를 붙이거나, 이름을 변경해야한다.
  • 두 인터페이스 구현시 default가 있는 동일한 메서드가있다면, 하위클래스에서 명시적으로 새로운 구현을 제공해야한다.
class Button : Clickable, Focusable {
   override fun showOff() {
      super<Clickable>.showOff()
      super<Focuable>.showOff()
   }
}
  • Java에서 Kotlin interface default method 에 의존할 수 없다.
  • 상속금지 : 상속을 위한 설계와 문서를 갖추거나, 그럴 수 없다면 금지하라.
    • java에서는 메서드, 클래스 모두 final로 만들라.
    • kotlin에서는 기본적으로 final이므로, 상속을 허용해주려면 클래스,메서드에 open 변경자를 붙여야한다.
      • 이미 override한 메서드는 기본적으로 열려있다.

가시성 변경자

  • public : 기본
  • internal : 같은 모듈안에서만 볼 수 있다.
  • package-private : 코틀린에선 없음.
  • protected: 하위 클래스에서만. 확장함수는 볼 수 없음.
  • private

중첩클래스

* java kotlin
중첩 클래스 static class A class A
내부 클래스 class A inner class A
  • 내부에서 외부참조
  class Outer {
     inner class Inner{
        fun refOuter() : Outer = this@Outer
     }
}

봉인된 클래스 sealed

  • 기반클래스가 sealed 이면, 클래스 외부에 자신을 상속한 클래스를 둘 수 없다.
  • sealed를 사용하면 when(e) is Aclass -> , Bclass ->클래스기반 분기에서 else문이 필요없다.

주생성자와 부생성자

class User constructor(_name : String) {
  val name : String
  init {
    name = _name
  }
}
  • constructor 가 생성자 정의시작,
  • class옆 () 괄호가 주생성자
    • (val name : String) val은 파라미터에 상응하는 프로퍼티가 생성된다는 뜻.
    • 주생성자 앞에 private 붙이면, 주 생성자는 비공개이다.
  • init이 주생성자 이후 초기화 블럭
class MyButton : View {
   constructor(ctx : Context) : super(ctx) { ...}
   constructor(ctx:Context, attr:Attr) : this(ctx,attr,something)  // 다른 생성자에게 위임.
  • 인자에 대한 디폴트 값을 제공하기 위해 부생성자를 여럿 만들지 말라. 대신 디폴트 파라미터를 생성자 시그니처에 명시하라.

인터페이스 프로퍼티

  • 코틀린에서는 인터페이스에 추상 프로퍼티 선언을 할 수 있다.
  • 구현 클래스의 프로퍼티앞에 override가 붙어야한다.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant