▶Data Class
data class는 다음과 같이 쓸 수 있다.
다만, 기본 생성자에는 최소 하나의 파라미터가 있어야 한다. 즉, Class User()과 같이 쓸 수가 없다.
또한, open, abstract, sealed, inner 와 함께 쓸 수 없다. 예를 들면, open data class User(~~) 과 같이 쓸 수 없다.
위와 같은 클래스에서 다음과 같이 name값을 임의로 수정할 수 있다.
또한, data class에서는 equals로 객체간 비교가 가능하다.
또한, Data Class에는 toString method가 깔려있다. int값도 그냥 String 변환없이 그대로 출력가능하다.
또한, copy 메서드를 가지고 있어서, 값을 복사할 수 있는데, 다음과 같이 옵션을 줘서 수정하면서 복사할 수도 있다.
또한, componentN 메서드도 가지고 있는데, 이는 N의 값의 순서에 따른 component를 출력하게끔 만들 수 있다. 다음과 같이 말이다.
위의 componentN 을 활용해서 이미 선언한 것을 분해할 수도 있는데(destructuring declarations), 다음과 같이 각 프로퍼티를 분해해서 출력하는 것도 가능하다.
항상 오버헤드되고, 복잡하게 추가된 코드를 쓸 필요없이 Data Class를 쓰면 간단하게 활용할 수 있다는 이점을 가지고 있다.
▶ Class 예제
MobilePhone 클래스를 확장 :
- 요구사항
배터리 잔량을 나타내는 멤버를 추가("battery"라고 지정, 0과 50사이의 숫자로 초기화)
"chargeBattery" 함수를 추가, 얼마가 충전되었는지에 대한 세부사항 필요
휴대폰 배터리가 얼마였는지, 얼마나 충전되었는지, 이제 배터리가 얼마인지 값을 출력할 것
클래스의 개체를 만들고 이 함수를 호출할 것
배터리를 30만큼 충전해보자
- 답안
[1] 내가 만든 예제 :
[2] 모범 답안 :
▶ 상속(Inheritance)
상속하는 Class를 Super class, Parent Class, Base Class라고 칭하고, 상속받는 Class를 Sub class, Child class, Derived class라고 칭한다. 단, 상속이 되려면 Parent Class가 Open class여야 한다. 다음과 같이 상속받는 class를 정의할 수 있다.(Child class인 ElectricCar에는 batteryLife를 추가한 모습)
다음과 같이 extendRange와 drive 함수를 정의한다. 단, drive함수는 추후에 override 할 예정이라 open 으로 설정했다.
다음과 같은 코드를 설정하고 실행해도 drive method가 ElectricCar Class에는 존재하지도 않는데 오류가 나지 않는다. Car class에서 상속받으므로 부모의 특징을 모두 갖기에(=extend) 그렇다.
반대로 Super Class에 있는 range 값과 drive method를 override 하고자 하면 다음과 같이 할 수 있다.
drive method가 두개가 명시가 되어 있는데, 이렇게 표현하는 것은 좋은 방법은 아니다. 하지만, drive()와 drive(~~)는 별개의 method로 인식되어 두개의 method가 서로 다른값을 출력하는 것을 알 수가 있다.
audiA3.drive(200.0)과 teslaS.drive(200.0)는 Polymorphism으로 설명할 수 있다. Polymorphism은 비슷한 특성을 가진 객체들이 공통된 방법으로 여겨지는 것을 뜻한다. ElectricCar class가 Car class의 sub class이기 때문에 공통 속성을 가지고 있다. 서브 클래스가 인터페이스가 되어 가능한 것이다.
'모바일 App 프로그래밍 > Kotlin' 카테고리의 다른 글
[Kotlin] OOP - 4 (0) | 2023.03.28 |
---|---|
[Kotlin] OOP - 2 (0) | 2023.03.27 |
[Kotlin] OOP - 1 (0) | 2023.03.24 |
[Kotlin] Nullable (0) | 2023.03.24 |
[Kotlin] 흐름 제어문 (if, when, while, for) (0) | 2023.03.24 |
댓글