클린코드8 [클린 코드] 8장 경계 외부 코드(오픈 소스 등)를 사용하지 않을 수 없음, 있지만 매우 비효율적 => 외부 코드와 우리의 코드를 깔끔하게 통합하기 위한 이야기 외부 코드 사용하기 인터페이스 제공자는 많은 고객을 유치하기 위해 범용성을 추구 인터페이스 사용자는 자신의 서비스에 특화되길 원함 예시로 java.util.Map을 들면 // Sensor 라는 객체를 담는 Map을 만든다면 Map sensors = new HashMap(); 위와 같이 Map 인스턴스를 이곳 저곳에 넘긴다면 Map 인터페이스에 변경이 생길 시 수정할 코드가 많아진다. (현재로선 java.util.Map이 더 이상의 수정이 가해질 것 같지 않은 상태이지만, 이러한 상태에 도달하기 전까지 수정이 있었다는 것을 생각해야할 것) public class Sens.. 독서 기록/클린 코드 2023. 4. 24. [클린 코드] 7장 오류처리 오류코드 보다 예외를 사용해라 오류 플래그를 설정하거나 호출자에게 오류 코드를 반환하는 경우 논리와 오류 처리 코드가 섞이기에 호출자 코드가 복잡해짐 + 호출 즉시 오류 확인해야 함 Try-Catch-Finally 문부터 작성하라 try 블록의 트랜잭션 범위부터 구현하게 되어 범위 내에서의 트랜잭션 본질을 유지하기 쉬워짐 미확인(unchecked) 예외를 사용하라 확인된 예외는 OCP(Open Closed Principle)를 위반 => 하위의 메서드에서 확인된 예외를 던지면 상위의 선언부에 해당 예외를 정의해야 함 즉, 캡슐화가 깨진다. 이로 인해 발생하는 의존성이라는 비용은 이익보다 큰 경우가 대다수이다. 예외에 의미를 제공해라 예외를 던질 때는 전후 상황을 충분히 덧붙여 오류가 발생한 원인과 위치를.. 독서 기록/클린 코드 2023. 4. 23. [클린 코드] 6장 객체와 자료 구조 자료 추상화 // 구체적인 Point 클래스 public class Point{ public double x; public double y; } // 추상적인 Point 클래스 public interface Point{ double getX(); double getY(); double setCartesian(double x, double y); double getR(); } 구체적인 Point 클래스는 구현을 노출한다. 변수를 private으로 하여도 각 값마다 get/set 함수를 제공한다면 구현이 외부로 노출된다. 즉 변수 사이에 함수라는 계층을 넣는다고 구현이 감춰지는 것이 아니다! 구현을 감추기 위해서는 추상화가 필요하고, 그 역할을 해주는 것이 추상 인터페이스이다. 사용자는 추상 인터페이스를 통.. 독서 기록/클린 코드 2023. 1. 25. [클린 코드] 5장 형식 맞추기 코드가 깔끔하고, 일관적이며, 질서정연하려면 글과 동일하다 한 사람이 쓴 것 같이 형식은 통일되고 흐름은 비슷해야한다. 즉 코드 형식을 맞추기 위한 규칙을 정하고 팀원들이 이를 충실히 따라야 한다는 것이다. 형식을 맞추는 목적 유지보수 용이성과 확장성을 가지는 것이다. 세로 형식 적절한 행길이를 유지할 것 일반적으로 너무 큰 파일보다 작은 파일이 이해하기 쉽다. 신문 기사처럼 작성할 것 신문은 위에서 아래로 읽기에, 첫 문단에 전체 기사 내요을 요약하고 내려오면서 세세한 사실을 설명. 이와 비슷하게 첫 부분은 고차원 개념과 알고리즘을 설명, 아래로 내려올수록 의도를 세세하게 묘사한다. 마지막에는 가장 저차원 함수와 세부 내역을 설명 개념은 빈행으로 분리 빈 행은 새로운 개념을 시작한다는 시각적 단서 pu.. 독서 기록/클린 코드 2023. 1. 24. [클린 코드] 4장 주석 주석은 필요악 프로그래밍 언어로만 모든 의도를 표현하고 서로 이해할 수 있다면 주석은 필요하지 않음 우리는 프로그래밍 언어로만 의도를 전달하는 것을 실패하고 이를 만회하기 위해 주석을 사용한다. 즉 주석은 존재 자체가 표현을 제대로 하지 못한 실패의 산물이라는 것 주석이 악한 이유 주석은 거짓말을 한다. 오래될수록 코드와 멀어지고 그릇될 가능성이 커진다. 왜냐하면 코드를 유지보수하는 것도 어려운데 주석까지 유지 보수를 하는 것은 현실적으로 불가능하기 때문이다. 부정확한 주석은 아예 없는 주석보다 훨씬 더 나쁘다. 주석은 나쁜 코드를 보완하지 못한다 보통 주석을 추가하는 경우 코드 품질이 나쁘기 때문에 이를 보완하기에 작성한다. 하지만 주석을 다는 것보다 코드 품질을 올리는 것이 더 중요하다 // 직원이 .. 독서 기록/클린 코드 2023. 1. 23. [클린 코드] 3장 함수 함수는 프로그램의 가장 기본적인 단위 최대한 작게 만들자! 블록과 들여쓰기 if/else 문이나 while문 등에 들어가는 블록은 1줄이어야 한다. 즉 중첩 구조가 생길만큼 함수가 커지면 안된다. 그러므로 들여쓰기 수준도 1단이나 2단을 넘으면 안된다. 그래야 가독성이 좋기 때문이다 하나의 목표에 집중해라 함수는 한가지를 해야 한다. 그 한가지를 잘해야 한다. 그리고 그 한가지만 해야한다. 한 함수내에 추상화 수준이 동일해야 한다 ex) getHtml() 는 추상화 수준이 높다 String pagePathName = PathParser.render(pagepath) 는 추상화 수준이 중간이다. .append("₩n") 같은 코드는 수준이 낮다. 한 함수 안에서 추상화 수준을 섞으면 코드를 읽는 사람이 헷.. 독서 기록/클린 코드 2023. 1. 21. [클린 코드] 2장 의미 있는 이름 의도가 분명하게 이름을 지어라 좋은 이름을 짓는데는 시간이 걸리지만 좋은 이름으로 시간을 절약하는 시간이 더 많다. 만약 따로 주석이 필요하다면 의도를 충분히 드러내지 못한 것이다. 그릇된 정보를 피해라 Ex) 빗변(hypotenuse) 을 hp로 줄인다면 훌륭한 약어처럼 보이겠지만 hp로 빗변을 직관적으로 떠올리거나 다른 의미로 인식할 수 있음 서로 비슷한 이름을 사용하지 않는 것도 중요 유사한 개념은 유사한 표기법을 사용해야한다 일관성이 떨어지는 표기법은 그릇된 정보다 불용어는 중복이다 ex) 변수에 variable은 중복, 표에 table 도 중복 ex2) getActiveAccount(), getActiveAccounts(),getActiveAccountInfo() 중 어떤 메소드가 원하는 메소드.. 독서 기록/클린 코드 2023. 1. 21. [클린 코드] 1장 깨끗한 코드 코드는 요구사항을 표현하는 수단 언어의 추상화 수준은 높아지고, 특정 응용 분야에 특화된 언어가 많아지는 등의 변화 있을 수 있음 But, 요구 사항을 모호하게 줘도 우리의 의도를 정확하게 파악하고 프로그램을 만들 수 있는 기계가 나올 수 없음 그렇기에 코드는 항상 존재할 것 나쁜 코드가 나오는 이유 시간상의 이유 등으로 나쁜 코드를 생산 아예 안돌아가는 프로그램보다 돌아가는 쓰레기가 좋다고 스스로 위로하는 일 흔함 그리고 나중에 다시 리팩토링하겠다는 다짐을 하지만 나중은 오지 않는다 (= 르블랑의 법칙) 나쁜 코드는 쌓일수록 생산성이 떨어짐 쌓일수록 수정과 개선의 난이도를 기하급수적으로 늘림 결국 생산성이 0에 수렴하고 재설계를 시도함 ( aka. 차세대, 빅뱅 등...) 재설계를 시도하는 팀은 기존 .. 독서 기록/클린 코드 2023. 1. 16. 이전 1 다음 반응형