프로그래밍에서의 knowledge란?
- 의도적인 정보
- 프로젝트를 진행할 때 정의한 모든 것
- ex. 상속을 하는데도 특정 메소드를 오버라이드하지 않게 강제 -> '해당 메소드가 슈퍼클래스와 동일하게 동작하길 원한다' 라는 의미
프로그램에서 중요한 2개의 knowledge
- 로직(logic) : 프로그램이 어떤 식으로 동작하는지, 어떻게 보이는지
- 공통 알고리즘(common algorithm) : 원하는 동작을 하기 위한 알고리즘
- 두가지의 차이는 시간에 따른 변화
- 비즈니스 로직은 시간이 지나면서 계속 변화
- 공통 알고리즘은 한 번 정의된 이후에 크게 변하지 않음
많은 것이 변화하는 상황에서 가장 위험한 것은 knowledge가 반복되어 있는 부분
knowledge의 반복은 프로젝트의 확장성(scalable)을 막고 쉽게 깨지게(fragile) 만든다.
하지만 추출을 통해 knowledge 반복을 줄이면 안 되는 상황도 존재
얼핏보면 knowledge의 반복처럼 보이나, 실은 다른 Knowledge를 나타내는 경우
중요한 것은 단일 책임 원칙
단일 책임 원칙이란?
- `클래스를 변경하는 이유는 단 한 가지여야 한다`라는 의미
단일 책임 원칙과 knowledge의 두 가지 사실
- 서로 다른 곳에서 사용하는 knowledge는 독립적으로 변경할 가능성이 많다. 따라서 비슷한 처리를 하더라도 완전히 다른 knowledge로 취급
- 다른 knowledge는 분리해 두는 것이 좋다 그렇지 않으면 재사용해서는 안 되는 부분을 재사용하려는 유혹이 발생할 수 있다.
'Reading Record > 이펙티브 코틀린' 카테고리의 다른 글
[이펙티브 코틀린] Item21. 일반적인 프로퍼티 패턴은 프로퍼티 위임으로 만들어라 (0) | 2022.05.01 |
---|---|
[이펙티브 코틀린] Item20. 일반적인 알고리즘을 반복해서 구현하지 말라 (0) | 2022.05.01 |
[이펙티브 코틀린] Item18. 코딩 컨벤션을 지켜라 (0) | 2022.04.26 |
[이펙티브 코틀린] Item17. 이름 있는 아규먼트를 사용하라 (0) | 2022.04.26 |
[이펙티브 코틀린] Item16. 프로퍼티는 동작이 아니라 상태를 나타내야 한다. (0) | 2022.04.26 |