본문 바로가기

클린코드

[Refactoring] 10. 데이터 뭉치

 

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

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

www.inflearn.com

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


데이터 뭉치
  • 항상 뭉쳐 다니는 데이터는 한 곳으로 모아두는 것이 좋다.
    • 여러 클래스에 존재하는 비슷한 필드 목록
    • 여러 함수에 전달하는 매개변수 목록

  • 관련 리팩토링 기술
    • 클래스 추출하기 -> 여러 필드를 하나의 객체나 클래스로 모을 수 있다.
    • 매개변수 객체 만들기, 객체 통째로 넘기기 -> 메서드 매개변수를 개선할 수 있다.

Before
public class Employee {

    private String name;

    private String personalAreaCode;

    private String personalNumber;

    public Employee(String name, String personalAreaCode, String personalNumber) {
        this.name = name;
        this.personalAreaCode = personalAreaCode;
        this.personalNumber = personalNumber;
    }

}

public class Office {

    private String location;

    private String officeAreaCode;

    private String officeNumber;

    public Office(String location, String officeAreaCode, String officeNumber) {
        this.location = location;
        this.officeAreaCode = officeAreaCode;
        this.officeNumber = officeNumber;
    }
    
}

=> AreaCode, Number 필드가 겹친다.

After
public class Employee {

    private String name;

    private TelephoneNumber personalPhoneNumber;

    public Employee(String name, TelephoneNumber personalPhoneNumber) {
        this.name = name;
        this.personalPhoneNumber = personalPhoneNumber;
    }

}

public class Office {

    private String location;

    private TelephoneNumber officePhoneNumber;

    public Office(String location, TelephoneNumber officePhoneNumber) {
        this.location = location;
        this.officePhoneNumber = officePhoneNumber;
    }

}

public class TelephoneNumber {

    private String areaCode;
    
    private String number;

    public TelephoneNumber(String areaCode, String number) {
        this.areaCode = areaCode;
        this.number = number;
    }
    
}

'클린코드' 카테고리의 다른 글

[Refactoring] 12. 반복되는 switch 문  (0) 2022.09.15
[Refactoring] 11. 기본형 집착  (0) 2022.09.14
[Refactoring] 9. 기능 편애  (0) 2022.09.12
[Refactoring] 8. 산탄총 수술  (0) 2022.09.11
[Refactoring] 7. 뒤엉킨 변경  (0) 2022.09.10