본문 바로가기

Clean Code

3, 4일차 TIL 함수

DAY 3, 4
오늘의 책 읽기: 3장. 함수 까지

🤓 책에서 기억하고 싶은 내용

작게 만들어라
함수를 만드는 첫째 규칙은 '작게'다. 함수를 만드는 둘째 규칙은 '더 작게'다.
(2, 3, 4줄 정도의 함수)

 

블록과 들여쓰기
중첩 구조가 생길만큼 함수가 커져서는 안된다.
그러므로 함수에서 들여쓰기 수준은 1단이나 2단을 넘어서면 안된다.

 

함수가 확실히 '한 가지' 작업만 하려면 함수 내 모든 문장의 추상화 수준이 동일해야 한다.
...getHtml()은 추상화 수준이 아주 높다. 반면 string pagePathName=PathParser.render(pagepath)는 추상화 주순이 중간이다. 그리고 .append("\n")와 같은 코드는 추상화 수준이 아주 낮다. 46p

 

내려가기 규칙
코드는 위에서 아래로 이야기처럼 읽혀야 좋다. 한 함수 다음에는 추상화 수준이 한 단계 낮은 함수가 온다. 즉, 위에서 아래로 프로그램을 읽으면 함수 추상화 수준이 한 번에 한 단계씩 낮아진다. 46p

 

함수에서 이상적인 인수 개수는 0개다. 
...함수의 의도나 인수의 순서와 의도를 제대로 표현하려면 좋은 함수 이름이 필수다. 단항 함수는 함수와 인수가 동사/명사 쌍을 이뤄야 한다. ... 마지막 예제는 함수 이름에 키워드를 추가하는 방식이다.

 

객체 지향 언어에서는 출력 인수를 사용할 필요가 거의 없다. 출력 인수로 사용하라고 설계한 변수가 바로 this이기 때문이다. .. 일반적으로출력 인수는 피해야 한다. 함수에서 상태를 변경해야 한다면 함수가 속한 객체 상태를 변경하는 방식을 택한다. 56p

함수는 뭔가를 수행하거나 뭔가에 답하거나 둘 중 하나만 해야한다. 둘 다 하면 안된다.

try/catch문은 원래 추하다. 코드 구조에 혼란을 일으키며, 정상 동작과 오류 처리 동작을 뒤섞는다. 그러므로 try/catch 블록은 별도 함수로 뽑아내는 편이 좋다.  58p

 

오류 코드를 반환한다는 이야기는 클래스든 열거형 변수든, 어디선가 오류 코드를 정의한다는 뜻이다.
... 오류코드 대신 예외를 사용하면 새 예외는 Exceeption 클래스에서 파생된다.
따라서 재컴파일/재배치 없이도 새 예외 클래스를 추가할 수 있다. 

 

🥰 오늘의 소감

함수를 작성하는데 가장 중요하게 기억해야할 키워드는 '작게'라는 생각이 들었다.

함수의 내용도, 함수의 기능도, 함수의 인수도 전부 최대한 작게.

 

추상화 수준을 구분하는 것이 아직까지 어렵다... 

 

switch문은 본질적으로 여러 기능을 처리하는 문법이라 이 부분을 어떻게 작게 만들 수 있는지 고민이 많았다. 추상팩토리를 통해 적절한 파생 클래스의 인스턴스를 생성하고 유사한 기능을 실행하는 함수들은 인터페이스를 거쳐서 호출하는 방법을 보면서 합리적이라는 생각이 들었다. 

 

우테코 프리코스를 진행하면서 Enum의 활용이 중요하다고 생각했고 이후에 자바로 코드를 짤 때면 Enum을 최대한 활용해야겠다는 생각을 많이 했었다. 오류 코드의 경우에는 Error enum 이 변경된다면 Error enum을 사용하는 클래스 전부를 다시 컴파일하고 다시 배치해야 한다는 단점이 있어 예외를 활용하는 것이 좋다는 것도 흥미로웠다. 

 

🤔 궁금한 내용

SRP: 단일 책임 원칙(single responsibility principle)이란 모든 클래스는 하나의 책임만 가지며, 클래스는 그 책임을 완전히 캡슐화해야 함을 일컫는다. 

OCP: 개방-폐쇄 원칙(OCP, Open-Closed Principle)은 '소프트웨어 개체(클래스, 모듈, 함수 등등)는 확장에 대해 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다'는 프로그래밍 원칙이다.

 

추상 팩토리 패턴:  추상 팩토리 패턴 은 다양한 구성 요소 별로 '객체의 집합'을 생성해야 할 때 유용하다. 이 패턴을 사용하여 상황에 알맞은 객체를 생성할 수 있다.

 

슬랙 글 인증!

'Clean Code' 카테고리의 다른 글

7일차 TIL 형식 맞추기  (0) 2024.03.10
5, 6일차 TIL 주석  (0) 2024.03.07
2일차 TIL 의미 있는 이름  (1) 2024.03.04
1일차 TIL 깨끗한 코드란?  (0) 2024.03.02
Clean Code 책 구매 인증  (0) 2024.03.02