| 9. 단위 테스트 || TDD 법칙TDD(Test Driven Development )는 실제 코드를 짜기 전에 단위 테스트부터 짜라고 요구한다. 1. 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다.2. 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다.3. 현재 실패하는 테스트를 통화할 정도로만 실제 코드를 작성한다. - 하지만, 실제 코드와 맞먹을 정도의 방대한 테스트 코드는 심각한 관리 문제를 유발하기도 한다.. || 깨끗한 테스트 코드 유지하기- 테스트 코드는 실제 코드 못지 않게 중요하다. * 테스트는 유연성, 유지보수성, 재사용성을 재공한다.- 테스트 케이스가 있으면 변경이 쉬워진다! || 깨끗한 테스트 코드* 깨끗한 테스트 코드를 만들려면 "가..
| 8. 경계 - 소프트웨어 경계를 깔끔하게 처리하는 기법과 기교 || 외부 코드 사용하기- 외부 코드(인터페이스)가 변할 가능성이 거의 없다고 여길 수 없다. 외부 코드가 변하게 되면 수정할 코드가 상당히 많아진다. (자바 5가 제네릭스를 지원하면서 Map 인터페이스가 변했다고 한다..)- java.util.Map 을 예로 보자. 경계 인터페이스인 Map을 class 안으로 숨기면, Map 인터페이스가 변하더라도 나머지 프로그램에는 영향을 미치지 않는다. Class 안에서 객체 유형을 관리하고 변환해주자. 123456789public class Sensors { private Map sensors = new HashMap(); public Sensor getById(String id) { return ..
| 7. 오류 처리 오류 처리는 중요하다.하지만, 오류 처리 코드로 인해 프로그램 논리를 이해하기 어려워진다면 깨끗한 코드라 부르기 어렵다. || 오류 코드보다 예외를 사용하라-- 오류 코드를 사용하게 되면 논리가 오류 처리 코드와 뒤섞여버린다. > 예외를 사용한 코드 12345678910111213141516171819202122232425262728public class DeviceController { // ... public void sendShutDown() { try { tryToShutDown(); } catch (DeviceShutDownError e) { logger.log(e); } } private void tryToShutDown() throws DeviceShutDownError ..
| 6. 객체와 자료 구조-- || 자료 추상화-- 자료를 세세하게 공개하기 보다는 추상적인 개념으로 표현하는 편이 좋다.- 객체가 포함하는 자료를 표현할 가장 좋은 방법을 심각하게 고민해야 한다.> Ex 1.123456789101112131415// 구체적인 Point Classpublic class Point { public double x; public double y;} // 추상적인 Point Classpublic interface Point { double getX(); double getY(); void setCartesian(double x, double y); double getR(); double getTheta(); void setPolar(double r, double theta);..
| 5. 형식 맞추기-- || 형식을 맞추는 목적-- 코드 형식은 중요하다. 코드 형식은 의사소통의 일환이다.- 오늘 구현한 코드의 가독성은 앞으로 바뀔 코드의 품질에 지대한 영향을 미친다.. || 적절한 행 길이를 유지하라.-- 적은 행 길이로도 커다란 시스템을 구축할 수 있다.- 일반적으로 큰 파일보다 작은 파일이 이해하기 쉽다. ||| 신문 기사처럼 작성하라.- 소스 파일도 신문 기사와 비슷하게 작성하자. 이름은 간단하면서도 설명이 가능하게 짓는다.- 소스 파일 첫 부분은 고차원 개념과 알고리즘을 설명한다. 아래로 내려갈수록 의도를 세세하게 묘사. 마지막에는 가장 저차원 함수와 세부 내역- 가장 중요한 개념을 가장 먼저 표현 ||| 개념은 빈 행으로 분리하라.- 빈 행은 새로운 개념을 시작한다는 시..
| 4. 주석--"나쁜 코드에 주석을 달지 마라. 새로 짜라." - Brian Wilson Kernighan, Phillip James Plauger * 주석이 코드에서 분리어 점점 더 부정확한 고아로 변하는 사례가 너무도 흔하다.* 코드를 깔끔하게 정리하고 표현력을 강화하는 방향으로, 애초에 주석이 필요 없는 방향으로 에너지를 쏟는 편이 좋다.* 부정확한 주석은 아예 없는 주석보다 훨씬 더 나쁘다. || 코드로 의도를 표현하라!- > 주석으로 의도를 표현123// 직원에게 복지 혜택을 받을 자격기 있는지 검사if ((employee.flags & HOURLY_FLAG) && (Employee.age > 65))cs > 코드로 의도를 표현1if (employee.isEligibleForFullBenefi..
| 3. 함수 Summary.아무래도 가장 중요한 포인트는함수는 "짧게", "한 가지 작업만", "서술적 이름으로"조거문에 들어가는 블록은 한줄로... || 작게 만들어라! 123456public static String renderPageWithSetupAndTeardowns ( PageData pageData, boolean isSuite) throws Exception { if (isTestPage(pageData)) includeSetupAndTeardownPages (pageData, isSuite); return pageData.getHtml();}Colored by Color Scriptercs - if문/else문/while문 등에 들어가는 블록은 한 줄이어야 한다는 의미. (대개 이곳에서..
| 2. 의미 있는 이름 Summary.의미 있고 발음하기 쉽고 검색하기 쉽게 이름을 지어주자.(존재 이유, 수행 기능, 사용 방법이 드러나도록)... || 의도를 분명히--변수나 함수 그리고 클래스 이름은 아래 질문에 모두 답해야 한다1. 변수(함수 or 클래스)의 존재 이유는?2. 수행 기능은?3. 사용 방법은?* 따로 주석이 필요하다면 의도를 분명히 드러내지 못했다는 말.1234int elapsedTimeInDays;int daySinceCreation;int daySinceModification;int fileAgeInDays;cs 1234567891011121314151617// 의도가 분명하지 않은 코드public List getThem() { List list1 = new ArrayList ..