본문 바로가기

도서/Clean Code

(10)
[Clean Code/클린 코드] 9장 단위 테스트 9장 단위 테스트 📖 깨끗한 테스트 코드를 만들려면? 세 가지가 필요하다. 가독성, 가독성, 가독성. 목차 🗒️ 책에서 기억하고 싶은 내용 TDD 법칙 세 가지 1. 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다. 2. 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다. 3. 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다. 테스트 당 assert 하나 public void testGetPageHierarchyAsXml() throws Exception { givenPages("PageOne", "PageOne.ChildOne", "PageTwo"); whenRequestIsIssued("root", "type:pages"); thenRespons..
[Clean Code/클린 코드] 8장 경계 8장 경계 📖 통제가 불가능한 외부 패키지에 의존하는 대신 통제가 가능한 우리 코드에 의존하는 편이 훨씬 좋다. 목차 🗒️ 책에서 기억하고 싶은 내용 외부 코드 사용하기 Map sensors = new HashMap(); 프로그램에서 Map 인스턴스를 여기저기로 넘긴다면, Map 인터페이스가 변할 경우, 수정할 코드가 상당히 많아진다. public class Sensors { private Map sensors = new HashMap(); public Sensor getById(String id) { return (Sensor) sensors.get(id); } //이하 생략 } Map을 좀 더 깔끔하게 사용한 코드다. ● Sensors 사용자는 제네릭스가 사용되었는지 여부에 신경 쓸 필요가 없다. ○..
[Clean Code/클린 코드] 7장 오류 처리 7장 오류 처리 📖 null을 전달하지 마라 목차 🗒️ 책에서 기억하고 싶은 내용 Try-Catch-Finally문부터 작성하라 먼저 강제로 예외를 일으키는 테스트 케이스를 작성한 후 테스트를 통과하게 코드를 작성하는 방법을 권장한다. 그러면 자연스럽게 try 블록의 트랜잭션 범위부터 구현하게 되므로 범위 내에서 트랜잭션 본질을 유지하기 쉬워진다. 미확인(unchecked) 예외를 사용하라 대규모 시스템에서 호출이 일어나는 방식을 상상해보라. 최상위 함수가 아래 함수를 호출한다. 아래 함수는 그 아래 함수를 호출한다. 단계를 내려갈수록 호출하는 함수 수는 늘어난다. 이제 최하위 함수를 변경해 새로운 오류를 던진다고 가정하자. 확인된 오류를 던진다면 함수는 선언부에 throws절을 추가해야 한다. 그러면 ..
[Clean Code/클린 코드] 6장 객체와 자료 구조 6장 객체와 자료 구조 📖 개발자는 객체가 포함하는 자료를 표현할 가장 좋은 방법을 심각하게 고민해야 한다. 아무 생각 없이 조회/설정 함수를 추가하는 방법이 가장 나쁘다. 목차 🗒️ 책에서 기억하고 싶은 내용 자료/객체 비대칭 ● 절차적인 도형 class Square { public Point topLeft; public double side; } public class Rectangle { public Point topLeft; public double height; public double width; } public class Circle { public Point center; public double radius; } public class Geometry { public final doubl..
[Clean Code/클린 코드] 5장 형식 맞추기 5장 형식 맞추기 📖 좋은 소프트웨어 시스템은 읽기 쉬운 문서로 이뤄진다는 사실을 기억하기 바란다. 목차 🗒️ 책에서 기억하고 싶은 내용 신문 기사처럼 작성하라 최상단에 기사를 몇 마디로 요약하는 표제가 나온다. 독자는 표제를 보고서 기사를 읽을지 말지 결정한다. 첫 문단은 전체 기사 내용을 요약한다. 세세한 사실은 숨기고 커다란 그림을 보여준다. 쭉 읽으며 내려가며 세세한 사실이 조금씩 드러난다. 날짜, 이름, 발언, 주장, 기타 세부사항이 나온다. 수직거리 서로 밀접한 개념은 세로로 가까이 둬야 한다. ● 변수 선언 ● 인스턴스 변수 ○ C++ : 클래스 마지막에 인스턴스 변수 선언 ○ Java : 클래스 맨 처음에 인스턴스 변수 선언 가로 공백과 밀집도 public class Quadratic { ..
[Clean Code/클린 코드] 4장 주석 4장 주석 📖 나쁜 코드에 주석을 달지 마라. 새로 짜라. 목차 🗒️ 책에서 기억하고 싶은 내용 주석은 나쁜 코드를 보완하지 못한다 코드에 주석을 추가하는 일반적인 이유는 코드 품질이 나쁘기 때문이다. 코드로 의도를 표현하라! // 직원에게 복지 혜택을 받을 자격이 있는지 검사한다. if ((employee.flags & HOURLY_FLAG) && (employee.age > 65)) if (employee.isEligibleForFulBenefits()) 몇 초만 더 생각하면 코드로 대다수 의도를 표현할 수 있다. 예제 p.90~94 목록 4-7을 리팩터링한 결과인 4-8을 비교해서 볼 것 🗒️ 소감 챕터 1~3을 읽으며 코드를 작성하는 습관을 고치려고 노력했다. 한눈에 알아볼 수 있도록 변수와 함수..
[Clean Code/클린 코드] 3장 함수 3장 함수 📖 함수는 한 가지를 해야 한다. 그 한 가지를 잘 해야 한다. 그 한 가지만을 해야 한다. 목차 🗒️ 책에서 기억하고 싶은 내용 Switch문 public Money calculatePay(Employee e) throws InvalidEmployeeType { switch (e.type) { case COMMISSIONED: return calculateCommissionedPay(e); case HOURLY: reutrn calculateHourlyPay(e); case SALARIED: return calculateSalariedPay(e); default: throw new InvalidEmployeeType(e.type); } } 위 함수에는 몇 가지 문제가 있다. • 함수가 길다...
[Clean Code/클린 코드] 2장 의미있는 이름 2장 의미있는 이름 📖 좋은 이름을 지으려면 시간이 걸리지만 좋은 이름으로 절약하는 시간이 훨씬 더 많다. 목차 🗒️ 책에서 기억하고 싶은 내용 의도를 분명히 밝혀라 // before public List getThem() { List list1 = new ArrayList(); for (int[] x : theList) if (x[0] == 4) list1.add(x); return list1; } // after public List getFlaggedCells() { List flaggedCells = new ArrayList(); for (Cell cell : gameBoard) if (cell.isFlagged()) flaggedCells.add(cell); return flaggedCells;..