TIL (2022.01.27)
DAY 6
🔖 오늘 읽은 범위 : 3장, 함수 (p.55 ~ p.65)
😀 책에서 기억하고 싶은 내용
사이드 이펙트를 일으키지는 않는지 확인해라
많은 경우 시간적인 결합(예를 들면, 특정 상황에서만 호출이 가능한 경우가 생긴다든지)이나 순서 종속성을 초래한다.
시간적인 결합이 필요하다면 함수 이름에 분명히 명시한다.
출력 인수는 피해야 한다.
- 함수에서 상태를 변경해야 한다면 함수가 속한 객체 상태를 변경하는 방식을 택한다.
명령과 조회를 분리하라
- 함수는 뭔가를 수행하거나 뭔가에 답하거나 둘 중 하나만 해야 한다. 둘 다 하면 안 된다. 객체 상태를 변경하거나 아니면 객체 정보를 반환하거나 둘 중 하나다.
명령 함수에서 오류 코드를 반환하는 방식은 명령/조회 분리 규칙을 위반한다. 그러니 오류 코드 대신 예외를 사용하면 오류 처리 코드가 원래 코드에서 분리되므로 코드가 깔끔해진다.
try/catch 블록을 별도 함수로 뽑아내라.
- 정상 동작과 오류 처리 동작을 분리하면 코드를 이해하고 수정하기 쉬워진다.
오류를 처리하는 함수는 오류만 처리해야 마땅하다.
오류 코드 대신 예외를 사용하면 새 예외는 Exception 클래스에서 파생된다. 따라서 재컴파일/재배치 없이도 새 예외 클래스를 추가할 수 있다.
많은 원칙과 기법이 중복을 없애거나 제어할 목적으로 나왔다.
객체 지향 프로그래밍은 코드를 부모 클래스로 몰아 중복을 없앤다.
소프트웨어를 짜는 행위는 여느 글짓기와 비슷하다.
- 프로그래밍의 기술은 언제나 언어 설계의 기술이다.
먼저 길고 복잡한 함수를 짠다. 그리고 나서 코드를 다듬고, 함수를 만들고, 이름을 바꾸고, 중복을 제거한다. 메서드를 줄이고 순서를 바꾼다. 전체 클래스를 쪼개기도 한다. 이 와중에도 코드는 항상 단위 테스트를 통과한다.
모든 시스템은 특정 응용 분야 시스템을 기술할 목적으로 프로그래머가 설계한 도메인 특화 언어로 만들어진다. 함수는 그 언어에서 동사며, 클래스는 명사다.
대가 프로그래머는 시스템을 (구현할) 프로그램이 아니라 (풀어갈) 이야기로 여긴다.
🤔 오늘 읽은 소감은?
- 프로그래밍의 기술은 언제나 언어 설계의 기술이고, 시스템을 풀어갈 이야기로 여기라는 말이 인상 깊다.
- 퇴고를 하는 마음으로 코드를 다듬고, 함수를 만들고, 이름을 바꾸고, 중복을 제거하고, 메서드를 줄이고, 순서를 바꿔야겠다.
- 글을 쓸 때도 처음부터 논리적으로 완벽한 글을 쓸 수는 없다. 글 모이를 모으고 얼기설기 엮은 다음에 여러 번 읽어서 최선의 문장을 만들어낸다. 글을 쓰는 것처럼, 처음부터 깔끔한 코드를 짜는 건 어려운 일이고, 언제든 고쳐나가야 한다는 마음으로 코드 작성을 시작해야겠다.
🧐 궁금한 내용이 있거나, 잘 이해되지 않는 내용
- 오류 코드 대신 예외를 사용하면 새 예외는 Exception 클래스에서 파생된다는 이야기가 잘 이해가 안됐는데, 자바 언어의 특징과 관련이 있는 내용인 것 같다.
'클린코드' 카테고리의 다른 글
[DAY 8] 클린 코드 TIL - 4장. 주석 (0) | 2022.01.29 |
---|---|
[DAY 7] 클린 코드 TIL - 4장. 주석 (0) | 2022.01.28 |
[DAY 5] 클린 코드 TIL - 3장. 함수 (0) | 2022.01.26 |
[DAY 4] 클린 코드 TIL - 2장. 의미 있는 이름 (0) | 2022.01.25 |
[DAY 3] 클린 코드 TIL - 2장. 의미 있는 이름 (4) | 2022.01.24 |