티스토리 뷰
TIL (Today I Learned) 날짜
2022.04.27 (수)
오늘 읽은 범위
3장 함수
책에서 기억하고 싶은 내용을 써보세요.
- 함수는 작을수록 더 좋다.
- 중첩 구조가 생길 만큼 함수가 커져서는 안 된다.
- 함수에서 들여 쓰기 수준을 1단이나 2단을 유지해야 함수 읽고 이해하기가 쉬어진다.
- 함수는 한 가지만 해야 한다.
- 추상화하는 이유
- 큰 개념(함수 이름)을 다음 추상화 수준에서 여러 단계로 나눠 수행하기 위한 목적
- 함수가 ‘한 가지’만 하는지 판단하는 방법
- 의미 있는 이름을 가진 다른 함수를 추출할 수 있는가? 그렇다면 함수가 여러 작업을 하고 있다는 뜻이다.
- 추상화하는 이유
- 함수 내 모든 문장의 추상화 수준이 동일해야 한다.
- 추상화 수준을 섞으면 코드를 읽는 사람은 이게 근본 개념인지 세부사항인지 구분하기 어려워진다. 이렇게 함수를 파악하기 어려워질수록 함수에 세부사항을 추가할 확률이 높아진다.
- 코드는 위 에서 아래로 이야기처럼 읽혀야 좋다.
- 내려가기 규칙 : 한 함수 다음에는 추상화 수준이 한 단계 낮은 함수가 와야 한다.
- Switch문은 본질적으로 N가지를 처리한다. (한 가지 일만 한다는 함수 규칙과 위배됨)
- 사용해야 한다면 아무에게도 보여주지 않도록 추상 팩토리에 꽁꽁 숨기기
- SRP (Single Responsibility Principle)
- 하나의 책임만 가지며, 그 책임을 완전히 캡슐화해야 한다는 프로그래밍 원칙
- 한 클래스에 하나의 책임을 부여해야(하나의 관심사에만 집중해야) 클래스가 더욱 튼튼해질 수 있다.
- OCP (Open Closed Principle) : 확장은 가능하지만 수정에 대해서는 닫혀 있어야 한다는 프로그래밍 원칙
- OCP가 잘 적용된 코드는 기능을 추가하거나 변경해야 할 때 그 코드와 연결된 다른 코드를 모두 고칠 필요 없이 기존 코드에 새로운 코드만 추가하면 된다.
- 코드를 읽으면서 짐작했던 기능을 각 루틴이 그대로 수행한다면 깨끗한 코드라 불러도 된다.
- 서술적인 이름을 사용하라.
- 이름을 정하느라 시간을 들여도 괜찮다. 이런저런 이름을 넣어 코드를 읽어보면 더 좋다.
- 모듈 내 함수 이름은 같은 문구, 명사, 동사를 사용한다.
- 가장 이상적인 함수 인수는 0개이다.
- 불가피한 경우를 제외하고는 되도록 단항 함수 쓰자.
- 최대 2개까지는 OK, 3개는 피하자
- 인수가 많아질수록 모든 조합을 구성해 테스트하기가 부담스러워진다.
- 플래그 인수는 추하다.
- boolean 값을 넘긴다는 건 함수가 한꺼번에 어려 가지를 처리한다고 대놓고 공표한다는 의미다.
- 함수와 인수는 동사와 명사 쌍으로 이루는 게 좋다.
- 동사/명사 쌍 예시
- write(name)
- 더 나은 이름 예시
- writeField(name)
- 동사/명사 쌍 예시
- 부수 효과를 일으키지 마라!
- 함수 이름에 담긴 동작만 해야 한다. 만약 함수 내부에 다른 동작을 담고 있다면 이름에 반드시 담겨 있어야 한다.
- 함수 선언부를 찾아보는 행위는 코드를 보다가 주춤하는 행위와 동급이다.
- 함수에서 상태를 변경해야 한다면 함수가 속한 객체 상태를 변경하는게 좋다.
- 함수는 뭔가를 수행하거나 뭔가에 답하거나 둘 중 하나만 해야 한다.
- 조회 아니면 명령, 하나만 하기
- 오류 코드보다 예외를 사용하라.
- 오류를 반환하면 오류 코드를 곧바로 처리해야 하는게 문제다.
- try/catch로 예외처리를 하면 코드가 훨씬 더 깔끔해진다.
- try/catch 블록도 별도 함수로 뽑아내면 가독성이 더 좋아진다.
- 함수처럼 오류 처리도 한 가지 작업만 해야 한다.
- 반복하지 마라! 중복을 없애라!
- 중복이 생길수록 오류 발생할 확률이 높아진다.
- 함수 잘 짜는 방법
- 글쓰기와 동일하다.
- 생각을 기록한 후 읽기 좋게 다듬는 글쓰기처럼 코드도 처음엔 길고 복잡하게 작성하고 다듬고, 중복을 제거하고, 메서를 줄이고, 순서를 바꾸다 보면 규칙을 따르는 함수를 얻을 수 있다. 처음부터 탁월하게 짜내지 않는다.
- 대가 프로그래머는 시스템을 (구현할) 프로그래밍이 아니라 (풀어갈) 이야기로 여긴다.
오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요
- 함수는 짧으면서도 한 가지만 해야한다. 함수에게 너무 많은 일을 시키지 말자.
- 회사 코드에 있는 플래그 인수를 가진 함수가 떠오른다. 배운 내용을 토대로 개선해봐야겠다.
더 알아보고 싶은 내용 적어보세요.
- 추상화 수준
- 다형성
참고