일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 자바
- 김영한
- 이차전지관련주
- Spring
- 자바스크립트
- 스프링 핵심원리
- effectivejava
- 알고리즘
- 스프링
- Effective Java 3
- 스프링핵심원리
- 엘라스틱서치
- JavaScript
- 클린아키텍처
- Effective Java
- 오블완
- 예제로 배우는 스프링 입문
- Sort
- 코딩테스트
- 스프링부트
- 알고리즘정렬
- java
- kubernetes
- 카카오
- 이펙티브 자바
- 카카오 면접
- 티스토리챌린지
- ElasticSearch
- k8s
- 이펙티브자바
- Today
- Total
Kim-Baek 개발자 이야기
클린코드를 위한 정량적인 방법! ( 객체지향 생활 체조 원칙 ) 본문
NextStep 이라는 교육 플랫폼에서 TDD, Clean Code With Java 라는 수업을 들으면서 정말로 많은 것들을 배우고 있다.
내가 자바를 제대로 쓰고 있었던게 맞나...? 라는 의문이 들정도로 내가 고쳐야될 것이 정말 많다는 것을 느끼는 중이다.
이 과정을 통해서 배우는 것들을 정리하고, 계속 봐야겠다는 생각을 하며 포스팅을 해보고자 한다 :)
객체지향 생활 체조 원칙?
소트웍스 앤솔러지라는 책에서 나오는 9가지 원칙이라고 한다. 클린코드를 위한 원칙이라고 생각하면 되는데, 상당히 구체적인 내용이라서 이해하기가 쉽다.
- 규칙 1: 한 메서드에 오직 한 단계의 들여쓰기(indent)만 한다.
- 규칙 2: else 예약어를 쓰지 않는다.
- 규칙 3: 모든 원시값과 문자열을 포장한다.
- 규칙 4: 한 줄에 점을 하나만 찍는다.
- 규칙 5: 줄여쓰지 않는다(축약 금지).
- 규칙 6: 모든 엔티티를 작게 유지한다.
- 규칙 7: 3개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다.
- 규칙 8: 일급 콜렉션을 쓴다.
- 규칙 9: 게터/세터/프로퍼티를 쓰지 않는다.
위의 9가지 내용인데, 클린코드를 이야기 할 때, "클래스를 권한에 맞게 분리"와 같은 추상적인 내용이 아니라, "한 단계의 들여쓰기", "3개 이상의 인스턴수 변수 금지"와 같이 숫자로 정량적으로 측정이 가능한 원칙이다.
이게 좋은게 뭐냐면 누구나 이해할 수 있다는 것이다. 추상적인 원칙은 이게 맞나? 라는 의문이 드는데, 이건 그냥 시키는 대로 하면된다. 그렇지만 이 내용을 지키면서 코딩을 하면 쉽지만은 않다는 것을 금방 느낄 수 있을 것이다.
대표적인 예로 규칙 1번을 한번 살펴보겠다.
for ( int i = 0; i < size; i++ ) {
if ( i == 10 ) {
return i;
}
}
for 문이 존재하고, 안에 if 문이 존재하면 이 코드의 indent는 두 단계인 것이다. 여기서 if 문이 없어야지 indent가 한 단계가 되는데, 어떻게 해야 한 단계로 변경할 수 있을까?
정답은 if 문을 메소드로 분리하는 것이다.
for ( int i = 0; i < size; i++ ) {
findNubmer(i);
}
이렇게 객체지향 생활 체조 원칙은 간단하지만 지키려면 코드가 깔끔해지는 경험을 할 수 있다. TDD, Clean Code With Java 과정은 이 규칙들을 지키면서 과제를 해나가는 과정이라고 보면 되는데, 과제를 하면서 해당 원칙들이 어떤 식으로 적용되었는지는 앞으로 계속 작성해보록 하겠다 :)
'개발 > TIL' 카테고리의 다른 글
Git Conflict 가 났을 때 해결 방법 (0) | 2021.07.08 |
---|---|
[TIL] 20.09.16 - @Autowired, @Resource (0) | 2020.09.16 |
[TIL] 20.09.15 - @SerializedName, optional (0) | 2020.09.15 |
[TIL] 20.09.10 - k8s initContainer (0) | 2020.09.10 |
[TIL] 20.09.08 - Openstack tenant, @ignore (0) | 2020.09.08 |