코틀린 스터디/이펙티브 코틀린

아이템19) knowledge를 반복하여 사용하지 말라

막이86 2024. 4. 17. 10:43
728x90
  • 프로그래밍의 가장 큰 규칙</aside>
  • <aside> 👉 프로젝트에서 이미 있던 코드를 복사해서 붙여넣고 있다면, 무언가가 잘못된 것이다
  • knowledge를 반복하여 사용하지 말라는 규칙으로 표현

knowledge

  • knowledge는 넓은 의미로 ‘의도적인 정보’를 뜻함
    • knowledge는 코드 또는 데이터로 표현할 수 있음
    • 기본 동작을 하게 아예 코드와 데잍를 부족하게 만들어서도 표현할 수 있음
  • 상속을 하는데도 불구하고 특정 메서드를 오버라이드하지 않게 강제하는 것은 ‘해당 메서드가 슈퍼클래스와 동일하게 동작하기 원한다’는 의미
  • knowledge 종류는 다양함
    • 알고리즘의 작동 방식
    • UI의 형태
    • 우리가 우너하는 결과
  • knowledge는 어떤 도구, 가상머신, 다른 프로그램들에서 직접 또는 간접적으로 이해할 수 있는 정보
  • 프로그래밍에서 중요한 knowledge를 크게 두가지를 뽑는 다면
    • 로직(logic): 프로그램이 어떠한 식으로 동작하는지와 프로그램이 어떻게 보이는지
    • 공통 알고리즘(common algorithm): 원하는 동작을 하기 위한 알고리즘
  • 비즈니스 로직은 시간이 지나면서 계속해서 변하지만, 공통 알고리즘은 한 번 정의된 이후에는 크게 변하지 않음

모든 것은 변화한다

  • 프로래밍에서 유일하게 유지되는 것은 ‘변화한다는 속성’이라는 말이 있음
  • 프로젝트의 knowledge도 계속해서 변화함
  • 변화하는 이유 몇가지
    • 회사가 사용자의 요구 또는 습관을 더 많이 알게 되었다
    • 디자인 표준이 변화했다
    • 플랫폼, 라이브러리, 도구 등이 변화해서 이에 대응
  • 변화할 때 가장 큰 적은 knowledge가 반복되어 있는 부분
    • 실수로 변경을 하지 못한 부분
    • 일부가 과거에 약간 다른 방식으로 이미 변경 된 경우
  • knowledge 반복은 프로젝트의 확장성을 막고, 쉽게 깨지게 만듬
  • 여러 종류의 추상화를 표현할 수 있는 많은 솔루션들이 있음
    • 활용하여 반복을 줄일 수 있음

언제 코드를 반복해도 될까?

  • knowledge 반복처럼 보이지만 실질적으로는 다른 knowledge를 나타내므로 추출하면 안되는 부분
  • 두 코드가 같은 knowledge를 나타내는지, 다른 knowledge를 나타내는지는 “함께 변경될 가능성이 높은가? 따로 변경될 가능성이 높은가?”라는 질문으로 어느 정도 결정 가능
    • 코드를 추출하는 이유는 변경을 쉽게게 만들기 위함이므로, 이 질문은 가장 근본적인 질문
  • 잘못된 코드 추출로부터 우리를 보호할 수 있는 규칙도 있음
    • 단일 책임 원칙

단일 책임 원칙

  • 단일 책임 원칙이란?
    • “클래스를 변경하는 이유는 단 한가지여야 한다” 라는 의미
  • 클린아키텍처 책에서 “두 액터(actor)가 같은 클래스르 ㄹ변경하는 일은 없어야 한다”라고 표현
    • 액터는 변화를 만들어내는 존재를 의미
    • 액터는 서로의 업무와 분야에 대해서 잘 모르는 개발자들로 비유 됨
  • 단일 책임 원칙은 우리에게 두 가지 사실을 알려줌
    • 서로 다른곳에서 사용하는 knowledge는 독립적으로 변경할 가능성이 많음
      • 비슷한 처리를 하더라도 완전히 다른 knowledge로 취급하는 것이 좋음
    • 다른 knowledge는 분리해 두는 것이 좋음
      • 재사용해서는 안되는 부분을 재사용하려는 유혹이 발생할 수 있음

정리

  • 모든 것은 변화함
  • 공통 knowledge가 있다면 이를 추출해서 이러한 변화에 대비해야 함
  • 여러 요소에 비슷한 부분이 있는 경우, 변경이 필요할 때 실수가 발생할 수 있음
  • 의도하지 않은 수정을 피하려면 또는 다른 곳에서 조작하는 부분이 있다면 분리해서 사용하는 것이 좋음
728x90