본문 바로가기

Reading Record/이펙티브 코틀린

[이펙티브 코틀린] Item19. knowledge를 반복하여 사용하지 말라

프로그래밍에서의 knowledge란?

  • 의도적인 정보
  • 프로젝트를 진행할 때 정의한 모든 것
  • ex. 상속을 하는데도 특정 메소드를 오버라이드하지 않게 강제 -> '해당 메소드가 슈퍼클래스와 동일하게 동작하길 원한다' 라는 의미

프로그램에서 중요한 2개의 knowledge 

  • 로직(logic) : 프로그램이 어떤 식으로 동작하는지, 어떻게 보이는지
  • 공통 알고리즘(common algorithm) : 원하는 동작을 하기 위한 알고리즘
  • 두가지의 차이는 시간에 따른 변화
    • 비즈니스 로직은 시간이 지나면서 계속 변화
    • 공통 알고리즘은 한 번 정의된 이후에 크게 변하지 않음

많은 것이 변화하는 상황에서 가장 위험한 것은 knowledge가 반복되어 있는 부분

knowledge의 반복은 프로젝트의 확장성(scalable)을 막고 쉽게 깨지게(fragile) 만든다.

하지만 추출을 통해 knowledge 반복을 줄이면 안 되는 상황도 존재

얼핏보면 knowledge의 반복처럼 보이나, 실은 다른 Knowledge를 나타내는 경우

중요한 것은 단일 책임 원칙

단일 책임 원칙이란?

  • `클래스를 변경하는 이유는 단 한 가지여야 한다`라는 의미

단일 책임 원칙과 knowledge의 두 가지 사실

  • 서로 다른 곳에서 사용하는 knowledge는 독립적으로 변경할 가능성이 많다. 따라서 비슷한 처리를 하더라도 완전히 다른 knowledge로 취급
  • 다른 knowledge는 분리해 두는 것이 좋다 그렇지 않으면 재사용해서는 안 되는 부분을 재사용하려는 유혹이 발생할 수 있다.