이 글은 Effective Java 를 완독하고, Kotlin 을 상용으로 사용하는 개발자 입장에서
Effective Kotlin 글 중 새로운 내용, remind 할 필요 있는 부분, 핵심 내용 등만 추려 정리한 내용입니다.
#
abstraction (추상화) 는 복잡성을 감추어 간단하게 만드는 것.
간단한 프로그래밍의 예는 interface. 이는 class 에 대한 추상화이며, 오직 일부만(일부 property 와 일부 method 만) 드러낸다.
#
abstraction 은 module 이나 library 로 분리하는 것만을 이야기하는 것이 아니다.
에를 들어 함수를 정의하면, 함수 시그니처 안에 그 구현을 감추는 abstraction 인 것이다!
#
프로그래밍에서 abstraction 은 주로 아래를 이야기한다.
- 복잡도 감추기
- 코드 구성하기
- 제작자에게 변화의 자유 주기
#
잘 구분된 layer 의 장점은 우리가 하위 layer 의 세부사항을 이해할 필요 없이 기능구현을 할 수 있다는 것이다.
예를 들어 우리는 JVM 이나 Assembly 에 대한 이해 없이 코딩을 할 수 있고, 하위의 변화에 영향을 거의 받지 않을 수 있다.
Level of abstraction
#
higher level 에 있을수록 세부사항을 알 필요가 없다는 장점이 생기지만, 제어권이 그만큼 줄어든다는 단점도 있다.
Single Level of Abstraction principle
#
이는 복잡한 것을 작고 한가지 기능을 하는 것으로 잘 분리해서 함수로 만들라는 이야기.
가독성이 좋아지고, 유지보수도 좋아지며, 재사용성도 좋아진다. 덤으로 unit test 하기에도 좋다.
Abstraction levels in program architecture
#
function 뿐만 아니라 problem-domain terms 로도 abstraction 을 적용할 수 있다.
이는 module 로 구분된 system 을 말한다.
Summary
#
function, class, module 등으로 abstraction 을 적용할 수 있다.
그 녀석들을 작게 만들수록 이해하기 쉬워진다.
끝
댓글