TIL 양식
Facts (사실, 객관)
- 기계인간님의 DRY 원칙에 대해서 쓴 글을 읽었다. 1
- 기계인간님의 디미터 법칙에 관한 글을 읽었다. 2
Feelings (느낌, 주관)
-
DRY 원칙은 모든 곳에 적용할 수 있을 것이다. (코드, 테스트, 문서화) 그리고 내가 DRY 원칙을 잘 지키고 있는지 생각하면 그렇지 못한 것 같다.
Findings (배운 점)
-
실용주의 프로그래머에서는 중복을 4가지로 분리한다.
- 강요된 중복 : 개발자들은 다른 선택이 없어 보인다. 환경이 중복을 요구하는 것 처럼 보인다.
- 부주의한 중복 : 개발자들은 자신들이 정보를 중복하고 있다는 것을 깨닫지 못한다.
- 참을성 없는 중복 : 중복이 쉬워보이기 때문에, 개발자들이 게을러져서 중복을 하게 된다.
- 개발자간의 중복 : 한 팀에 있는 (혹은 다른 팀에 있는) 여러 사람들이 동일한 정보를 중복한다.
-
또한 코드내의 주석이 너무 많거나 상세하더라도 DRY 원칙을 위반할 수 있다.
코드에는 주석이 있어야하지만, 너무 많은 것은 너무 적은 것만큼이나 좋지 않다. 일반적으로 주석은 왜 이렇게 되어 있는지 목적을 논해야한다. 코드가 이미 어떻게 되어 있는지 보여주기 때문에 이에 대해 주석을 다는 것은 사족이다.
코드에서 중복을 발견할 때마다 추상화할 기회로 간주하라. 중복된 코드를 하위 루틴이나 다른 클래스로 분리하라. 이렇듯 추상화로 중복을 정리하면 설계 언어의 어휘가 늘어난다. 다른 프로그래머들이 그만큼 어휘를 사용하기 쉬워진다. 추상화 수준을 높였으므로, 구현이 빨라지고 오류가 적어진다.
-
디미터 법칙이란 긴 객체 구조의 경로를 따라서 멀리 떨어져 있는 간접적인 (낯선) 객체에 메세지를 보내는 (또는 이야기하는) 설계는 피하라는 것이다.
-
Don't talk to Strangers
패턴은 메서드 내에서 어떤 객체에 메시지를 보내야 하는가에 대한 제약을 가한다. 메서드 안에서는 다음의 객체들에게만 메시지를 보내야한다.
- this(또는 self) 객체
- 메서드의 매개변수
- this의 속성
- this 속성인 컬렉션의 요소
- 메서드 내에서 생성된 객체
중복의 유형과 제거 방법
-
가장 뻔한 유형은 똑같은 코드가 여러 차례 나오는 중복이다. 프로그래머가 미친듯이 마우스로 긁어다 여기저기로 복사한 듯이 보이는 코드이다. 이러한 중복은 간단한 함수로 교체한다.
-
좀 더 미묘한 유형은 여러 모듈에서 일련의
switch
/case
,if
/else
문으로 똑같은 조건을 거듭 확인하는 중복이다. 이러한 중복은 다형성으로 대체해야 한다. -
더더욱 미묘한 유형은 알고리즘이 유사하나 코드가 서로 다른 중복이다. 중복은 중복이므로,
TEMPLATE METHOD
패턴이나,STRATEGY
패턴으로 중복을 제거한다. -
디자인 패턴은 대다수가 중복을 제거하는 잘 알려진 방법에 불과하다.
OOP
,BDNF
역시 마찬가지이고, 또한 구조적 프로그래밍도 마찬가지이다.
Good (잘한점)
Bad (개선할 점)
- 여태까지 주석을 코드의 목적을 위해서 적기 보다는 과정을 설명하기 위해서 적었던 것 같다.
- 코드에서 중복된 부분이 많음에도 불구하고, 그냥 무심코 지나간 적이 많았던 것 같다.
Affimation (자기 선언)
- 중복을 최대한 줄이도록 노력을 해야겠다.
- 회사에서 일을 하면서 중복된 코드가 보인다면 제거하려고 시도하겠다.
-
이는 중복을 줄이면 저절로 소프트웨어가 좋은 설계대로 구현이 될 것 같다. 나는 처음에는 좋은 설계로 소프트웨어를 작성해야지라고 생각을 했지만 사실, 좋은 설계를 한다는 것 자체가 추상적이다. 구체적인 방법은 코드에 중복을 줄여야지, 테스트 코드를 작성해야지 같은 구체적인 행동을 통해서 좋은 설계가 나온다는 생각을 했다.
회고 작성법
- Facts(사실, 객관) 회사에서 실제로 내가 했던 일이나 겪었던 일의 사실을 적는다.
- Feelings(느낌, 주관) 내가 했던 일을 하면서 느꼈던 감정이나 느낌을 적는다.
- Findings(배운 점) 내가 했던 일을 통해서 새롭게 배운 점이나 알게 된 점을 적는다.
- Affirmation (자기 선언) 내가 했던 일을 통해 배운 점과 아쉬운 점을 어떻게 유지 하고 개선할지를 적는다.