SW 개발/Kotlin
Kotlin, Interface, Data Class, Generics 사용하기
지단로보트
2018. 12. 5. 04:38
사전에 읽을만한 글
- Kotlin - Interfaces
- Kotlin - Data Classes
- Kotlin - Generics
- Guide to Kotlin Interfaces
- Data Classes in Kotlin
- Kotlin data classes - enough boilerplate
- Kotlin for Android Developers: Data Class
IComputer 인터페이스
interface IComputer<CPU, RAM, Mainboard> {
var cpu: CPU,
var ramList : List<RAM>,
var mainboard : Mainboard
fun printInfo(): String {
this.javaClass.declaredFields.forEach {
it.trySetAccessible()
println(it.get(this).toString())
}
}
}
IComputer
인터페이스의 역할은 구현할 클래스들에게 컴퓨터의 스펙을 강제하여 프로젝트 내에서 소스 코드의 일관성을 확보하는데 있다.- 인터페이스명 바로 뒤에
<CPU, RAM, Mainboard>
로 타입 파라메터를 명시하여 구현체에서 다양한 클래스를 사용할 수 있도록 구현했다. - Java와 마찬가지로 Kotlin의
interface
내에 공통 메써드를 구현할 수 있다.
DellComputer 구현체
data class DellComputer (
override var cpu: IntelCPU = IntelCPU(),
override var ramList : List<SamsungRam()> = mutableListOf(),
override var mainboard : GigabyteMainboard = GigabyteMainboard()
) : IComputer<IntelCPU, SamsungRAM, GigabyteMainboard>
DellComputer
는 IComputer의 최종 구현체이다.- Kotlin에서
data
클래스는 Java과 Lombok의 @Data와 유사한 역할을 한다. 클래스명 바로 뒤의 헤더 부분(Primary Constructor
라고 부른다.)에 모든 필드를 작성하면 컴파일 단계에서 자동으로 toString(), hashCode(), equals() 메써드를 구현해준다. [관련 링크] - 추가적으로 data 클래스의 Primay Constructor 선언시 모든 필드를 초기화해주면 컴파일 단계에서 자동으로 파라메터가 없는 빈 생성자를 구현해준다. [관련 링크]
- data 클래스에서 유의할 점은 data 클래스는 data 클래스를 확장할 수 없다. 오직
abstract class
또는 interface만 확장할 수 있음에 유의한다. [관련 링크]