Android Kotlin Class relationship and visibility modifiers

사용 버전: Kotlin 1.9.10

안드로이드 Kotlin Class relationship and visibility modifiers를 알아보겠습니다.

이번 시간에는 class(클래스) 간의 관계와 접근 허용을 알아봅니다.

출처:
https://developer.android.com/codelabs/basic-android-kotlin-compose-classes-and-objects#0


class에는 inheritance(상속)라는 것이 존재합니다.

Superclass(슈퍼클래스) 또는 parent(부모)의 기능을 Subclass(서브 클래스) 또는 child(자식)이 가져와서 사용할 수 있게 해줍니다.


그림은 아래와 같습니다.




Superclass를 만들기 위해서는 open이라는 키워드가 필요합니다. 나머지는 일반 class 생성하는 방법과 동일합니다.







상속받을 subclass는 아래와 같이 사용합니다.





SmartPhone에 있는 parameter에는 val이나 var 따위를 붙이지 않았습니다. 그 의미는 class 내부에 property로 사용하지 않겠다는 뜻입니다. 그렇지만, 단순히 superclass에 property로 넘겨줄 수 있습니다.


superclass를 다음과 같이 변경했습니다.





main에서 smartPhone.turnOn()을 실행하면 SmartPhone class에 따로 turnOn() method(메서드)를 정의하지 않았지만 실행되는 것을 볼 수 있습니다. 그리고 그 결과는 superclass에 있는 turnOn method 값입니다.







Override(오버라이드)를 알아보겠습니다.

Override는 상속받은 것을 subclass에서 다시 정의하는 것을 말합니다.

하지만 이렇게 override 하기 위해서는 open이라는 키워드가 필요합니다.


property(속성)나 method에 open을 적어주면 override 할 수 있습니다.





Superclass에서 override할 것들을 subclass에 적어줍니다. property 명, method 명을 동일하게 적어줘야 합니다.

superclass의 method 실행 값도 필요하다면 super.[method 이름]을 씁니다. turnOff() 메서드를 보시면 예시가 있습니다.






실행해 봅시다.






다음으로는 class 관계를 조금 더 자세히 알아봅시다.

위처럼 Inheritance 관계를 IS-A(이즈-어), 포함하거나 사용하는 관계를 HAS-A(헤즈-어)라고 합니다.

IS-A는 뒤집는 게 가능합니다. SmartPhone은 SmartDevice가 맞습니다. SmartPhone이 SmartDevice를 가진다고 표현하지 않으므로 HAS-A 관계는 아닙니다.







Human(사람)이라는 class는 smartPhone을 가지고 있습니다. smartPhone은 사람이 아니기 때문에 IS-A는 성립하지 않고, human이 smartPhone을 가지기 때문에 HAS-A 관계입니다.









마지막으로 Visibility modifiers를 알아봅시다.


modifier(모디파이어)는 캡슐화에 중요한 역할을 합니다.

• property와 method를 허가되지 않은 class에서 접근하지 못하도록 숨겨줍니다.

• class와 interface를 허가되지 않은 package(패키지)에서 접근하지 못하도록 숨겨줍니다.






Kotlin에서는 4가지를 제공해 줍니다.

• public(퍼블릭)

• internal(인터널)

• protected(프로텍티드)

• private(프라이버트)






public은 기본적으로 설정되고, property와 method를 어느 곳에서나 접근 가능합니다.

internal은 property와 method를 같은 module(모듈) 안에서만 접근 가능합니다.

protected는 property와 method를 subclass에서만 접근이 가능합니다.

private는 property와 method를 같은 class나 source file에서만 접근 가능합니다.


최대한 private로 보호를 하고, internal, protected, public 등을 적절히 사용합니다.







modifier는 method나 property 앞에 사용합니다.







끝.


카테고리: Android


댓글

이 블로그의 인기 게시물

Python urllib.parse.quote()

Python OpenCV 빈 화면 만들기

tensorflow tf.random.uniform()

Android Notification with Full Screen

KiCad 시작하기 2 (PCB 만들기)

Android Minimum touch target size

Python bs4.SoupStrainer()

KiCad 시작하기 4 (기존 회로도 수정 및 추가)

음악 총보(Score), 파트보(Part)

tensorflow tf.expand_dims()