일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 정렬
- 제네릭 타입
- System.out
- github api
- 바운디드 타입
- throwable
- 함수형 인터페이스
- auto.create.topics.enable
- docker
- Switch Expressions
- 접근지시자
- Study Halle
- 람다식
- System.in
- 브릿지 메소드
- yield
- 자바스터디
- 익명 클래스
- 자바할래
- 항해99
- raw 타입
- annotation processor
- 프리미티브 타입
- 상속
- 스파르타코딩클럽
- 제네릭 와일드 카드
- 합병 정렬
- System.err
- 로컬 클래스
- junit 5
Archives
- Today
- Total
코딩하는 털보
클린 코드, 3. 함수 본문
클린 코드, 3. 함수
함수를 잘 만드는 법!
- 작게 만들어라.
조건문/반복문에 들어가는 블록을 한줄로 줄인다. 보통 다른 함수를 호출한다. - 한 가지만 해라.
함수는 한 가지를 해야 한다. 그 한 가지를 잘 해야 한다. 그 한 가지만을 해야 한다.
여기에서 한 가지 작업이란 지정된 함수 이름 아래에서 추상화 수준이 하나인 단계만 수행하는 것이다.
만약 의미 있는 이름으로 다른 함수로 추출할 수 있다면 그 함수는 여러 작업을 하고 있는 것이다. - 함수 당 추상화 수준은 하나로.
TO 문단을 읽어내려 가듯이 코드를 구현하여 각 함수가 일정한 추상화 수준을 유지하면서 다음 함수를 참고하고 소개하도록 한다. - Switch 문
switch 문은 작게 만들거나 한 가지 작업만 하게 만들기 어렵다. 그러므로 switch 문을 추상 팩토리에 담아서 다형성을 통해 다른 코드에서 같은 switch 문이 발생하지 않고 switch 문을 숨길 수 있도록 할 수 있다. - 서술적인 이름을 사용하라.
길고 서술적인 이름이 짧고 어려운 이름보다 좋으니 여러 단어를 사용하여 함수의 기능을 잘 표현하는 이름을 선택하자.
서술적인 이름을 사용하면 설계가 뚜렷해지므로 코드를 개선하기 쉬워진다. - 함수 인수
최선은 함수 인수가 없는 경우이며, 차선은 1개, 늘어날 수록 좋지 않다. 함수 인수로 사용하는 것 대신 클래스의 인스턴스 변수로 선언하여 사용하자.- 많이 쓰는 단항 형식
인수에 질문을 던지는 함수, 인수를 변환하여 결과를 반환하는 함수, 입력 인수로 시스템 상태를 바꾸는 이벤트 함수 세가지 경우가 아닌 함수는 단항 함수를 피한다. - 플래그 인수는 피한다. ex)
render(true)
- 이항 함수
이항 함수는 단항 함수보다 이해하기 어렵다. 가능하면 단항 함수로 바꾸도록 애써야한다. - 인수 객체
인수가 2-3개 필요하다면 일부를 독자적인 클래스 변수로 선언해보는 것을 고려한다.Circle makeCircle(double x, double y, double radius);
====>Circle makeCircle(Point center, double radius);
- 동사와 키워드
단항 함수는 함수와 인수가 동사/명사 쌍을 이뤄야 한다. ex)writeField(name)
함수 이름에 키워드를 추가할 수도 있다. ex)assertExpectedEqualsActual(expected, actual)
- 출력 인수
출력 인수 쓰지말고 클래스 변수를 this로 변경하는 방식을 사용하자.
- 많이 쓰는 단항 형식
- 부수 효과를 일으키지 마라.
메서드의 이름으로는 확인되지 않는 부수 효과를 숨기고 있으면 안된다. - 명령과 조회를 분리하라.
객체 상태를 변경하거나 객체 정보를 반환하거나 둘 중 하나만 해야 한다. 둘다 하면 혼란스럽다. - 오류 코드보다 예외를 사용하라.
오류 코드를 사용하면 조건문이 여러 단계로 중첩될 수 있고 오류 처리 코드까지 같이 작성해야 한다.
오류 코드 대신 예외를 사용하면 오류 처리 코드를 원래 코드에서 분리할 수 있다.
try/catch 블록은 코드 구조를 혼란스럽게 하므로 별도의 함수로 뽑아내는 편이 좋다. - 반복하지 마라.
- 구조적 프로그래밍
함수가 아주 크다면 되도록 단일 입/출구 규칙을 지킨다. (break, continue, goto를 사용하지 않고 return 문은 한번만 있어야 한다.) - 함수 짜기
처음부터 위의 규칙에 맞춰 짜는 것은 쉽지 않다. 리펙터링이 중요하다.
Comments