패턴 그리고 객체지향적 코딩의 법칙

깨끗한 코드의 선순환
깨끗한 코드는 가독성이 높고 구조적으로 이해하기 쉬운 코드를 의미한다.
깨끗한 소스는 요구사항이나 버그에 의한 소스 수정이 이루어질 때 수정할 부분을 빨리 찾을 수 있으므로 쉽게 수정할 수 있다.  또 소스가 지저분하지 않으므로 이 소스를 수정할 개발자들은 기존 원칙을 지키고 싶어한다.

만약 새로운 요구사항이 기존의 깨끗한 소스로도 수용이 안되는 경우는 리팩토링을 통해서 새로운 구조의 소스를 만들고 작업을 하면 된다. 깨끗한 소스는 리팩토링을 더욱 쉽게 가능케 하는 장점이 있다.

깨끗한 코드를 작성하기 위해서 아래의 원칙을 지키도록 한다.
 - 다른 개발자들에게 API를 제공한다는 마음으로 개발하라.
 - 남이 봐도 쉬운 코드를 만들어라.
 - '역사적'인 이유를 만들지 말아라.
 - 자신의 코드만 보지 말아라.
 - 기존의 코드와 통일성 있는 코드를 작성하라.
 - 커뮤니케이션 하라.
 - 항상 '1년 뒤에 이 소스를 본다면?'이라고 생각하라.
 - 리팩토링 하라.
 
항상 개발은 내가 아닌 팀이 같이 만들어 나가는 것이고 내가 만든 코드는 언제든지 다른 개발자들에 의해 사용될 수 있다는 점을 명심하자. 나의 '역사적'인 코드는 다른 개발자들에겐 그냥 추하게(Ugly) 작성된 코드로 밖에 보이지 않는다는 점을 알아야 한다. 이 모듈은 내꺼니까 나만 잘 볼 수 있으면 된다라는 마음가짐은 위험하다.  - p.68
 
정리할 시간이 없다.
기존의 구조를 바꾸어야만 새 요구사항을 적용할 수 잇는 상황을 가정해 보자. 당장 편하기 위해 지저분한 코드를 만들기보다는 기존 구조를 변경시키는 시간까지 합쳐진 개발 계획을 잡고 업무를 진행해야 한다. 지저분한 코드는 또 다른 지저분한 코드를 부르기 때문이다. - p.72
 
객체 지향의 원칙
 - 클래스가 꼭 필요한 변수와 함수만을 가지고 있는가?
 - 클래스 사이의 연관성이 너무 높지 않은가?
 - 중복된 코드가 너무 많지 않은가?
 - 클래스가 너무 크지 않은가?
 - 코드를 이해하기 쉬운가?
 - 변하는 부분과 변하지 않는 부분은 무엇인가?

코드의 쉬운 이해가 중요한 이유는 코드를 변경해야 할 시점에 기존의 구조를 빠르게 이해하고 변경 작업을 쉽게 하려는 의도가 가장 크다.
개발을 하다 보면 개발자의 편의 혹은 귀차니즘에 의해 '이건 그냥 대충 이렇게 하지'라며 눈감아 주는 코드들이 있다. 대체로 이런 코드는 쉽게 이해하기 힘들다. 왜냐하면 일반적인 경우에 해당하는 코드가 아니라 특정 상황을 전체에 적용시키기 어렵기 때문에 슬쩍 예외 처리하는 경우에 주로 이런 '눈감아 주기'코드가 나타나기 때문이다.
이런 코드는 어쩌면 그 순간에 굉장히 효과적일 수도 있다.
관련된 코드를 모두 수정하는 비용보다는 이런 식으로 눈감아 주는 방법이 더 경제적일 수 있기 때문이다. 이렇게 작성된 코드를 나중에 변경할 때 눈감아 주었던 부분들을 쉽게 기억할 수 있다면 모르겠지만 은근슬쩍 묻힐 가능성이 크다.  

순간 눈감고 작성한 코드는 영역 눈감고 있을 가능성이 높다는 점을 알아야 한다.
그래서 되도록 일반적인 룰로 코드를 작성해야 하고 다시 보는 것을 대비해 코드는 쉽게 작성해야 한다.  - p.90
 
 구현 퍼포먼스를 높이기 위한 방법
  - 코딩 중에는 마우스를 최대한 만지지 마라.
  - 자신이 사용하는 툴의 모든 단축키를 외워라.
  - 디버깅하기 쉽도록 코드를 작성하라.
  - 반복되는 작업을 편하게 해줄 도구를 찾아라.
  - 목적지로 가는 가장 빠른 길을 탐색하라.
  - 구현 중에는 흐름을 끊지 말아라.
 
상속을 이용해서 기능을 확장하는 방법은 기능 확장 방법 중에서도 가장 무거운 방법에 속한다.
보다 나은 구조를 찾기 위해 문제를 일반화 시킨다. 문제를 일반화하는 가장 좋은 방법은 공통점을 찾아내는 것이다. - p.340

'읽은거' 카테고리의 다른 글

모리차장의 비밀과외  (0) 2011.01.10
1만 시간 법칙  (0) 2009.12.24
왜 나는 너를 사랑하는가  (0) 2009.12.24
스크럼(Scrum)과 XP  (0) 2009.12.24
소프트웨어 산책 - 프로그래머의 문제 풀이  (0) 2009.12.24