본문 바로가기

Clean Code

(11)
Clean Code 챌린지 완주 드디어 클린 코드를 완주했다! 마지막에는 졸업 프로젝트와 시간이 겹치면서 뒷부분은 자세히 읽지 못했지만... 졸업 프로젝트를 끝난 이 시점부터 차분하게 다시 읽어보려 한다. 처음 클린 코드를 읽기 전에는 "클린코드"가 되기 위해서는 굉장히 복잡하고 이해하기 어려운 것을 공부해야한다고 생각했다. 하지만 책을 읽으면서 클린 코드가 되기 위해서는 아주 사소한 것부터 고쳐나가면 된다라는 것을 느끼게 되었다. 코드를 쓰고 있는 시점보다는 미래에 이 코드를 읽고 있을 사람을 위해서 조금이라도 더 생각해보고, 시간 쓰기가 가장 중요하다는 것을 느꼈다. 코드를 짜면서 "나중에 해야지"라는 생각이 더러운 코드를 짜는 지름길이라는 것을 다시금 느꼈다. 졸업 프로젝트를 마감 기한에 맞추느라 급하게 마무리해서 클린코드라고 보..
13, 14일차 TIL 클래스 DAY 13, 14 오늘의 책 읽기: 10장. 클래스 까지 🤓 책에서 기억하고 싶은 내용 정적 공개 상수가 맨 처음에 나온다. 다음으로 정적 비공개 변수가 나오며, 이어서 비공개 인스턴스가 나온다. 공개 변수가 필요한 경우는 거의 없다. 변수 목록 다음에 공개 함수가 나온다. 비공개 함수는 자신을 호출하는 공개 함수 직후에 넣는다. 클래스를 설계할 때도 함수와 마찬가지로, '작게'가 기본 규칙이라는 의미다. 얼마나 작아야 하는가? ... 클래스가 맡은 책임을 센다. 클래스 이름은 해당 클래스 책임을 기술해야 한다. 간결한 이름이 떠오르지 않는다면 필경 클래스 크기가 커서 그렇다. 클래스 설명은 만일(if), 그리고(and), -하며(or), 하지만(but)을 사용하지 않고서 25 단어 내외로 가능해야 한..
11, 12일차 TIL 단위 테스트 DAY 11, 12 오늘의 책 읽기: 9장. 단위 테스트 까지 🤓 책에서 기억하고 싶은 내용 TDD 법칙 3가지 1. 실패하는 단위 테스트를 작성할때까지 실제 코드를 작성하지 않는다. 2. 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다. 3. 현재 실패하는 테스트를 통과할 정도로만 실제 테스트를 작성한다. 자동화된 단위 테스트 슈트는 설계와 아키텍처를 최대한 깨끗하게 보존하는 열쇠다. 테스트는 유연성, 유지보수성, 재사용성을 제공하는 버팀목이다. 테스트 코드가 지저분하면 코드를 변경하는 능력이 떨어지며 코드 구조를 개선하는 능력도 떨어진다. 테스트 코드가 지저분할수록 실제 코드도 지저분해진다. BUILD-OPERATE-CHECK패천이 위와 같은 테스트 구조에 적합하다. 각 테..
9, 10일차 TIL 오류처리 DAY 9, 10 오늘의 책 읽기: 7장. 오류처리 까지 🤓 책에서 기억하고 싶은 내용 오류 처리 코드로 인해 프로그램 논리를 이해하기 어려워진다면 깨끗한 코드라 부르기 어렵다. 오류 플래그를 설정하거나 호출자에게 오류 코드를 반환하는 방법은 호출자 코드가 복잡해진다. 함 수를 호출하는 즉시 오류를 확인해야 하기 때문이다. ... 그래서 오류가 발생하면 예외를 던지는 편이 낫다. 그러면 호출자 코드가 더 깔끔해진다. 논리가 오류 처리 코드와 뒤섞이지 않으니까. try 블록 안에서 무슨 일이 생기든지 catch 블록은 프로그램 상태를 일관성 있게 유지해야한다. 그러므로 예외가 발생할 코드를 짤 때는 try-catch-finally문으로 시작하는 편이 낫다. 그러면 try 블록에서 무슨 일이 생기든지 호출자..
8일차 TIL 객체와 자료 구조 DAY 8 오늘의 책 읽기: 6장. 객체와 자료구조 까지 🤓 책에서 기억하고 싶은 내용 형식 논리에 치우쳐 조회 함수와 설정 함수로 변수를 다룬다고 클래스가 되지는 않는다. 그보다는 추상 인터페이스를 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 진정한 의미의 클래스다. ... 자료를 세세하게 공개하기보다는 추상적인 개념으로 표현하는 편이 좋다. 119p 객체는 추상화 뒤로 자료를 숨긴 채 자료를 다루는 함수만 공개한다. 자료 구조는 자료를 그대로 공개하며 별다른 함수는 제공하지 않는다. ... 두 정의는 본질적으로 상반된다. 절차적인 코드는 기존 자료 구조를 변경하지 않으면서 새 함수를 추가하기 쉽다. 반면, 객체 지향 코드는 기존 함수를 변경하지 않으면서 새 클래스를 추가하기 쉽다...
7일차 TIL 형식 맞추기 DAY 7 오늘의 책 읽기: 5장. 형식 맞추기 까지 🤓 책에서 기억하고 싶은 내용 오늘 구현한 기능이 다음 버전에서 바뀔 확률은 높다. 그런데 오늘 구현한 코드의 가독성은 앞으로 바뀔 코드의 품질에 지대한 영향을 미친다. 오랜 시간이 지나 원래 코드의 흔적을 더 이상 찾아보기 어려울 정도로 코드가 바뀌어도 맨 처음 잡아놓은 구현 스타일과 가독성 수준은 유지보수 용이성과 확장성에 계속 영향을 끼친다. 96p 이름은 간단하면서도 설명이 가능하게 짓는다. 이름만 보고도 올바른 모듈을 살펴보고 있는지 아닌지를 판단할 정도로 신경써서 짓는다. 소스 파일 첫 부분은 고차원 개념과 알고리즘을 설명한다. 아래로 내려갈수록 의도를 세세하게 묘사한다. 마지막에는 가장 저차원 함수와 세부 내역이 나온다. 98p 일련의 행..
5, 6일차 TIL 주석 DAY 5, 6 오늘의 책 읽기: 4장. 주석 까지 🤓 책에서 기억하고 싶은 내용 코드만이 자기가 하는 일을 진실되게 말한다. 코드만이 정확한 정보를 제공하는 유일한 출처다. 그러므로 우리는 주석을 가능한 줄이도록 꾸준히 노력해야한다. 69p 이해가 안되어 다른 모듈까지 뒤져야 하는 주석은 독자와 제대로 소통하지 못하는 주석이다. 76p 모든 함수에 Javadocs를 달거나 모든 변수에 주석을 달아야 한다는 규칙은 어리석기 그지 없다. 이런 주석은 코드를 복잡하게 만들며, 거짓말을 퍼트리고, 혼동과 무질서를 초래한다. 80p 🥰 오늘의 소감 평소 코드를 짜면서 주석을 자주 사용하는 편이라 생각되어 좋은 주석을 어떻게 짜야하는 것일까 궁금했는데, 좋은 주석은 '없는 주석'이라는 것을 보고 과거를 돌아보게 ..
3, 4일차 TIL 함수 DAY 3, 4 오늘의 책 읽기: 3장. 함수 까지 🤓 책에서 기억하고 싶은 내용 작게 만들어라 함수를 만드는 첫째 규칙은 '작게'다. 함수를 만드는 둘째 규칙은 '더 작게'다. (2, 3, 4줄 정도의 함수) 블록과 들여쓰기 중첩 구조가 생길만큼 함수가 커져서는 안된다. 그러므로 함수에서 들여쓰기 수준은 1단이나 2단을 넘어서면 안된다. 함수가 확실히 '한 가지' 작업만 하려면 함수 내 모든 문장의 추상화 수준이 동일해야 한다. ...getHtml()은 추상화 수준이 아주 높다. 반면 string pagePathName=PathParser.render(pagepath)는 추상화 주순이 중간이다. 그리고 .append("\n")와 같은 코드는 추상화 수준이 아주 낮다. 46p 내려가기 규칙 코드는 위에서..