일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- SBT
- DDD
- Domain Driven Design
- hibernate
- docker
- Spring Batch
- Gradle
- elastic search
- 스프링 배치
- 도메인주도설계
- elasticsearch
- Clean Code
- hadoop
- Angular2
- scala
- design pattern
- hdfs
- Linux
- Java
- Spring XD
- Spring
- Storm
- nginx
- 엘라스틱서치
- Spring Boot
- apache storm
- Hbase
- intellij
- 제주
- spark
- Today
- Total
목록Clean Code (7)
욱'S 노트
외부 코드 살펴보기 인터페이스 제공자와 인터페이스 사용자 사이에는 특유의 긴장이 존재한다. 패키지 제공자나 프레임워크 제공자는 적용성을 최대한 넓히려 애쓴다. 반면 사용자는 자신의 요구에 집중하는 인터페이스를 바란다. Map과 같은 예를 볼 때 Map은 매우 다양한 기능을 제공하고 이로 인해 시스템에 다양한 영향을 끼칠 수 있다. 경계 인터페이스를 사용할 떄는 이를 이용하는 클래스나 클래스 계열 밖으로 노출되지 않도록 주의한다. Map 인스턴스를 인자로 사용하거나 반환값으로 이용하지 말아야 한다. 학습 테스트 외부 코드를 익히기는 어렵다. 외부 코드를 통합하기도 어렵다. 곧바로 우리쪽 코드를 작성해 외부 코드를 호출하는 대신 간단한 테스트 코드를 작성하여 외부 코드를 익히자. 학습테스테에 드는 비용은 없..
오류 코드보다 예외를 사용하라 얼마 전까지만 해도 예외를 지원하지 않는 프로그래밍 언어가 많았다. 예외를 지원하지 않는 언어는 오류를 처리하고 보고하는 방법이 제한적이었다. 당시의 방법에서는 호출자의 코드가 복잡해진다. 함수를 호출한 즉시 오류를 확인해야 하기 때문이다. 불행히도 이 단계는 잊어버리기 쉽다. Try-Catch-Finally 문부터 작성하라 try 블록에서 무슨일이 생기든지 catch 블록은 프로그램 상태를 일관성 있게 유지해야 한다. 그러므로 예외가 발생할 코드를 짤때는 try-catch-finally 문부터 시작하는 편이 낫다 Unchecked 예외를 사용하라 확인된 예외가 반드시 필요하지 않다는 사실이 분명해졌다. 다양한 언어(C#, C++, 파이썬, 루비)에서 checked exce..
변수를 비공개로 정의하는 이유가 있다. 남들이 변수에 의존하지 않게 만들고 싶어서다. 자료 추상화 변수 사이에 setter, getter를 넣는다고 구현이 저절로 감춰지지는 않는다. 구현을 감추려면 추상화가 필요하다. 추상 인터페이스를 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 진정한 의미의 클래스이다. 아무 생각 없이 setter, getter를 추가하는 방법이 가장 나쁘다. 자료/객체 비대칭 절차적인 코드는 기존 자료 구조를 변경하지 않으면서 새 기능을 추가하기 쉽다. 반면 객체 지향 코드는 기존 함수를 변경하지 않으면서 새 클래스를 추가하기 쉽다. 절차적인 코드는 새로운 자료 구조를 추가하기 어렵다. 그러려면 모든 함수를 고쳐야 한다. 객체 지향 코드는 새로운 함수를 추가하기 ..
적절한 행 길이를 유지하라. Fitness의 경우 5000줄이 넘는 거대한 시스템이지만 각각의 클래스를 200줄 안팎으로 유지할 수 있었다. 시스템이 크다고 개별의 클래스의 코드가 길어질 이유는 없다. 신문 기사처럼 작성하라. 소스 파일도 신문 기사와 비슷하게 작서한다. 이름은 간단하면서도 설명이 가능하게 짓는다. 소스 파일 첫 부분은 고차원의 개념과 알고리즘을 그리고 아래로 내려갈수록 의도를 세세하게 묘사한다. 개념을 빈 행으로 분리하라. 패키지 선언부, import문, 각 함수 사이에 빈행이 들어간다. 간단한 규칙이지만 심오한 영향을 미친다. 세로밀집도 줄바꿈이 개념을 분리한다면 세로 밀집도는 연관성을 의미한다. 즉 서로 밀집한 코드의 행은 세로 가까이 있어야 한다. 변수는 사용하는 위치에 최대한 가..
코드는 항상 변화하고 진화한다. 불행하게도 주석은 언제나 따라 가지는 않는다. 주석은 필요악이다. 주석은 나쁜 코드를 보완하지 못한다. 자신이 저지른 난장판을 주석으로 설명하려 하는 대신에 그 난장판을 깨끗이 치워라. 코드로 의도를 표현하라. 코드를 주석으로 설명하지 말고, 더 명확하게 클래스나 함수로 표현해라. 좋은 주석 라이선스에 관한 주석을 붙이는 것은 타당하다. 의도를 설명하는 주석은 옳을 수 있다. 앞으로 할 일을 TODO 주석으로 남겨두면 편하다. 공개 API를 구현했다면 Javadocs를 남겨야 한다. 나쁜 주석 주절거리는 주석.코드의 내용을 그대로 설명하는 주석은 필요가 없다.자바docs를 만들기 위한 의무적인 주석도 좋지 않다. /**** @param title CD 제목*/ 이력을 기록..
작게 만들어라 함수의 첫번째 규칙은 작게, 두번째 규칙도 작게이다. public static String renderPageWithSetupsAndTearDowns (PageData pageData, boolean isSuite) throws Exception {if (isTestPage(pageData))includeSetupAndTearDownPages(pageData, isSuite);return pageData.getHtml();} 블록과 들여쓰기는 최대한 작아야 한다. if/else/while 이 들어가는 블록은 한 줄이어야 한다. 함수의 들여쓰기 수준은 1단이나 2단을 넘어서면 안된다. 한가지만 해라. 버퍼를 생성하고 상속된 페이지를 검색하고, 경로를 랜더링한다면 각각을 함수의 쪼개라. 함수를..
우리 모두는 자신이 짠 쓰레기 코드를 쳐다보며 나중에 손보겠다는 생각을 한 경험이 있다. 그러나 르블랑의 법칙은 나중은 결코 오지 않는다는 것이다. 태도 좋은 코드를 사수하는 일은 바로 우리 프로그래머들의 책임이다. 나쁜 코드의 위험을 이해하지 못하는 관리자의 말을 그대로 따르는 행동은 전문가답지 못하다. 깨끗한 코드란? 비야네 스트롭스트룹(C++ 창시자) - 나는 우아하고 효율적인 코드를 좋아한다. 논리가 간단해야 버그가 숨어들지 못한다. 의존성을 최대한 줄여야 유지보수가 쉬워진다. 오류는 명백한 전략에 의해 철저히 처리한다. 성능을 최적으로 유지해야 원칙 없는 최적화로 코드를 망치려는 유혹에 빠지지 않는다. 깨끗한 코드는 한 가지를 제대로 한다. 그래디 부치(Object oriented analysi..