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는 독립적으로 변경할 가능성이 많음
정리
- 모든 것은 변화함
- 공통 knowledge가 있다면 이를 추출해서 이러한 변화에 대비해야 함
- 여러 요소에 비슷한 부분이 있는 경우, 변경이 필요할 때 실수가 발생할 수 있음
- 의도하지 않은 수정을 피하려면 또는 다른 곳에서 조작하는 부분이 있다면 분리해서 사용하는 것이 좋음
728x90
'코틀린 스터디 > 이펙티브 코틀린' 카테고리의 다른 글
아이템21) 일반적인 프로퍼티 패턴은 프로퍼티 위임으로 만들어라 (0) | 2024.08.08 |
---|---|
아이템20) 일반적인 알고리즘을 반복해서 구현하지 말라 (0) | 2024.04.17 |
아이템18) 코딩 컨벤션을 지켜라 (0) | 2024.04.17 |
아이템17) 이름 있는 아규먼트를 사용하라 (0) | 2024.04.17 |
아이템16) 프로퍼티는 동작이 아니라 상태를 나타내야 한다 (0) | 2024.04.17 |