Search

리팩터링 2판 스터디 - 12 (1)

리팩터링 2판을 회사 팀 내 스터디로써 진행한다. 스터디에선 따로 책 내용을 정리를 하지 않고 주마다 정해진 분량까지 읽고 감상을 나눈다. 여기선 개인적으로 매 분량에 대한 정리와 짧은 감상을 올린다.
6장 이후로 각 기법의 절차, 예시보단 배경 위주로 정리한다.
리팩터링 기법 명칭은 빨간색으로 표시한다.

10 조건부 로직 간소화

10.1 조건문 분해하기

복잡한 조건식을 함수로 추출하자

10.2 중복 조건식 통합하기

여러 조건식, 특히 판별 후 결과가 같은 것들은 하나로 묶자
and, or를 사용하자

10.3 중첩 조건문을 보호 구문으로 바꾸기

중첩 조건문은 바깥부터 함수를 일찍 처리(반환, throw) 해줄 수 있다.
(무언가를 하지 않는 조건으로써는) 조건을 반대로 만들어 하는 것도 가능하다.

10.4 조건부 로직을 다형성으로 바꾸기

다형적 동작(switch case처럼 여러 조건 분기의 경우)을 클래스로 만들어 준다.
로직의 동작은 객체를 만드는 팩토리 메소드로 전환한다.
슈퍼클래스를 메소드로 로직을 옮긴다.
서브클래스마다 다른 동작을 구현한다.

느낀점

이건 그냥 함수 추출 아닌가? 조건 표현식이라는게 (만들다보면 심취해서) 장황하게 동작만 설명할 수 있으므로 왜하는지 이름을 붙여주자.
guard clause는 early return과 다른가?
gpt는 굳이 다른것처럼 답해줬지만 그렇게 구분해서 쓰는거 같진 않다
답변 요약
반환 vs. 에러, abort
요즘은 switch case가 패턴 매칭을 지원하는 경우가 많다.
10.4가 switch case 를 저격?하는건 아니지만 중첩과 대구를 이루어 같은 수준에서 여러 조건문에 대한 다양한처리를 이야기하는거 같다.
deconstruction + 선언적 조건문
루비(gpt가 준 예제)
엘릭서
러스트
js는 proposal이 있긴하다; proposal-pattern-matching
라이브러리 ts-pattern
go는 안 만들거 같다.