본문 바로가기

클린코드

[Refactoring] 정리 (2)

 

코딩으로 학습하는 리팩토링 - 인프런 | 강의

리팩토링은 소프트웨어 엔지니어가 갖춰야 할 기본적인 소양 중 하나입니다. 이 강의는 인텔리J와 자바를 사용하여 보다 실용적인 방법으로 다양한 코드의 냄새와 리팩토링 기술을 설명하고 직

www.inflearn.com

| 인프런 - 백기선님의 코딩으로 학습하는 리팩토링 강의를 수강하며 정리한 글입니다.


조건부 로직 간소화

** 복잡한 조건문을 다루는 기술

  • 조건문 분해하기 -> if 문 안의 복잡한 로직은 메서드 추출하기 적용
  • 조건식 통합하기
  • 중첩 조건문을 보호 구문으로 바꾸기 -> return으로 아래 로직이 실행되지 않게 만들기
Before
int result;

if (isVip()) {
	result = vipPoint();
} else if (isPlat()) {
	result = platPoint();
} else {
	result = normalPoint();
}

return result;

=> vip와 plat은 특수 케이스이다.

After
if (isVip()) return vipPoint();
if (isPlat()) return platPoint();

return normalPoint();

=> 보호 구문을 사용하여 Vip일 경우 아래 로직이 실행되지 않도록 한다.

  • 조건부 로직을 다형성으로 바꾸기
  • 특이 케이스 추가하기
  • Assertion 추가하기

API 리팩토링

** 쉽게 이해하고 사용할 수 있는 API를 만드는 기술

  • 질의 함수와 변경 함수 분리하기
  • 함수 매개변수화하기
  • 플래그 인수 제거하기
  • 객체 통째로 넘기기
  • 매개변수를 질의 함수로 바꾸기
  • 질의 함수를 매개변수로 바꾸기
  • 세터 제거하기
  • 생성자를 팩토리 함수로 바꾸기
  • 함수를 명령으로 바꾸기
  • 명령을 함수로 바꾸기

상속 다루기

** 상속을 제대로 사용하는 기술

  • 메서드 올리기
  • 필드 올리기
  • 생성자 본문 올리기
  • 메서드 내리기
  • 핋드 내리기
  • 타입 코드를 서브 클래스로 바꾸기
  • 서브 클래스 제거하기
  • 슈퍼 클래스 추출하기
  • 계층 합치기
  • 서브 클래스를 위임으로 바꾸기
  • 슈퍼 클래스를 위임으로 바꾸기