티스토리 뷰

사전에 읽을만한 글

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와 마찬가지로 Kotlininterface 내에 공통 메써드를 구현할 수 있다.

DellComputer 구현체

data class DellComputer (

    override var cpu: IntelCPU = IntelCPU(),
    override var ramList : List<SamsungRam()> = mutableListOf(),
    override var mainboard : GigabyteMainboard = GigabyteMainboard()

) : IComputer<IntelCPU, SamsungRAM, GigabyteMainboard>
  • DellComputerIComputer의 최종 구현체이다.
  • Kotlin에서 data 클래스는 JavaLombok@Data와 유사한 역할을 한다. 클래스명 바로 뒤의 헤더 부분(Primary Constructor라고 부른다.)에 모든 필드를 작성하면 컴파일 단계에서 자동으로 toString(), hashCode(), equals() 메써드를 구현해준다. [관련 링크]
  • 추가적으로 data 클래스의 Primay Constructor 선언시 모든 필드를 초기화해주면 컴파일 단계에서 자동으로 파라메터가 없는 빈 생성자를 구현해준다. [관련 링크]
  • data 클래스에서 유의할 점은 data 클래스는 data 클래스를 확장할 수 없다. 오직 abstract class 또는 interface만 확장할 수 있음에 유의한다. [관련 링크]
댓글
댓글쓰기 폼