단일 책임 원칙(Single Responsibility Principle)


특정 데이터를 분석하고 서버에 전송하는 모듈을 예시로 들어보자.

이는 위 두가지 이유로 변경될 수 있음.

단일 책임 원칙에 의하면 두 책임을 분리된 클래스나 모듈로 나눠야함.
다른 시기에 다른 이유로 변경되어야 하는 두 가지를 묶는 것은 나쁜 설계일 수 있음.

한 클래스를 한 관심사에 집중하도록 유지하는 것은 중요함.

→ 클래스를 더욱더 튼튼하게 해줌.

개방-폐쇄 원칙(Open Closed Principle)


기존의 코드를 변경하지 않으면서, 기능을 추가할 수 있도록 설계가 되어야함. 다음 예시를 보자.

fun main(args: Array<String>) {
    val hello = HelloAnimal()

    val cat = Animal("Cat")
    val dog = Animal("Dog")

    hello.hello(cat)
    hello.hello(dog)
}

class Animal(val type: String)
class HelloAnimal {
    fun hello(animal: Animal) {
        when(animal.type) {
            "Cat" -> println("냐옹")
            "Dog" -> println("멍멍")
        }
    }
}