Effective Kotlin2 [Effective Kotlin] 아이템 36. 상속보다는 컴포지션을 사용하라 [이펙티브 자바] 를 읽었던 기억을 떠올렸을 때 '상속보다는 컴포지션을 사용하라' 라는 아이템이 상당히 인상 깊었다. 하지만 컴포지션 적용시키면서 다형성을 만족시키려면 인터페이스를 상속 받아야 하는데, 모두 구현해야 하므로 코드가 참 더러워지는 것을 확인할 수 있었다. 코틀린을 이를 기가 막히게 해결했다. 다시 상속과 컴포지션의 예를 살펴보고 이를 코틀린이 어떻게 간단히 해결할 수 있는지 살펴 보자. 상속의 문제점 모든 것을 가져올 수밖에 없음 슈퍼클래스의 상태, 메서드, 행위 등 모든 것을 가져온다. 계층 구조를 나타낼 때 굉장히 좋은 도구 그렇기에 일부분만을 사용하기에 부적합한 방법 이를 위해서 컴포지션을 사용한다. 캡슐화를 깨는 상속 내부적인 구현 방법의 변경으로 캡슐화가 깨진다. 컴포지션 슈퍼클래.. 2023. 1. 30. [Effective kotlin] 아이템 27. 변화로부터 코드를 보호하려면 추상화를 사용하라 자바를 공부하며 객체지향을 제대로 공부하기 시작했고, 객체지향의 4대 특성 중 '추상화'의 참된 의미를 알기까지 시간이 걸렸다. 결론은 많이 공부하고 생각하며 확장하고 적용해 봐야 그 의미를 비로소 이해하리라 생각한다. 상수 const val NAME_PREFIX = "prefix" fun getName() : String = NAME_PREFIX + this.name 가장 간단한 추상화 방법이다. 본 코드에서 String 리터럴 값을 따로 빼서 상수화를 시키면 이해도 쉬울 뿐 아니라. 변경하기도 훨씬 수월하다. 리터럴 값에 의미 있는 이름을 붙일 수 있고, 변경이 쉽다. 함수 특정 행위를 함수로 선언하면, 재사용이 가능하다. 코틀린에서는 간단히 확장 함수를 만들어서 여러 곳에서 재사용할 수 있어, 추상.. 2023. 1. 29. 이전 1 다음 반응형