클래스 관계

결합(Aggregation)관계

fun main() {
    val collegeAddress: Address = Address(country = "대한민국", "관악구")
    val college: College = College("서울대", collegeAddress)
    println(college)
}

data class Address(
    val country: String,
    val city: String

data class College(
    val collegeName: String,
    val collegeAddress: Address
)

실행결과
College(collegeName=서울대, collegeAddress=Address(country=대한민국, city=관악구))

조합(Composition)관계

fun main() {
    val myCar = Car(
        color = "Red",
        maxSpeed = 3000,
        name = "Ray"
    )
    myCar.carEngine = CarEngine()
    
    myCar.run {
        carEngine.startEngine()
        carInfo()
        carEngine.stopEngine()
    }
}

class CarEngine {
    fun startEngine() { println("엔진 가동") }
    fun stopEngine() { println("엔진 중단") }
}

class Car(val color: String, val maxSpeed: Int, val name: String) {
    lateinit var carEngine: CarEngine // 필드 주입

    fun carInfo() { println("$color $maxSpeed $name") }
}

실행결과
엔진 가동
Red 3000 Ray
엔진 중단

의존(Dependency)관계

class CPUx86() {
    fun process() { ... }
}

class Computer() {
    val cpu = CPUx86()

    fun start() {
        cpu.process() { ... }
    }
}