페이스북에 공개 글로 올리셨으니 여기다 올려도 되겠지?


4. 클래스 하나는 한 가지 역할만 하도록 한다. 클래스 구현 전에 인터페이스만 만들어서 서로 엮어보는 것이 조금은 도움 됨.
5. 클래스 하나 하나가 역할이 확실해서 서로 모르는 것을 method 호출로 물어보거나, 상대방이 전문 분야인 것을 method 호출로 위임한다.
6. 하나의 클래스가 다른 클래스에 의존 하는 경우, 이 의존관계가 다시 돌아오지 않도록 한다. A-> B 의존, B->C 의존인데, C->A의존이면 뭔가 꼬인 것임. 
7. 함수 하나는 한 가지 역할만 하도록 한다. 
8. 함수 하나가 20줄 이상 넘어가면 두 개의 이상의 함수로 분리할 방안을 모색한다.
9. 단 한 줄의 중복 코드도 허용하지 않는다. 중복코드를 method호출로 빼내면 코드가 예뻐짐.
10. 변하는 것과 변하지 않는 것을 구분한다. Mutable객체와 Immutable객체를 구분한다. 
11. 예외처리 방식은 개발 초기에 확정한다. 개발 중간에 바로 잡으려면 기존에 짠 코드 많이 건드리면서 품질 저하됨.
12. 코드 구현한 것을 그대로 읽으면 영어로 말이 되도록 클래스 이름, method이름을 정한다. (처음엔 쉽지 않음)
13. 글로벌 변수(Java의 static 필드도 포함)을 쓰는 경우, 쓰지 않고 개발할 방법은 없는지 심각히 고민해본다.
14. 특정 클래스가 특정 타입인지 런타임에 체크하는 코드가 있다면 폴리모피즘을 활용하여 해결방안을 모색한다. 특정 클래스를 특정 타입으로 캐스팅 하는 경우 포함.
15. 전통적인 쓰레드 기반 개발보다는 Actor 를 활용한다.
16. 데이터 드리븐 방식으로 구현한다. 데이터에 따라 어떤 코드가 실행될지 결정되도록 처리.
17. 본인이 관심있는 분야의 잘 짜여진 코드를 꾸준히 분석한다. 참고 : 오픈소스라고 해도 소스코드는 엉망인 경우가 허다하므로 많은 사람들이 인정하는 코드를 분석한다.
18. switch를 쓰고 있다면 OO의 폴리모피즘으로 대체 가능할지 생각해본다. switch안의 case떡칠 코드는 대표적인 dirty code임.
19. 컴파일 전에 본인 코드 리뷰하고 머리로 실행해본다. 가능한 많은 버그를 눈과 뇌로만 잡아본다. 이걸 많이 하다보면 눈으로 보기 편하고 이해하기 쉬운 코드를 짜게 됨.

Posted by 타다키치
,