냄새22. 데이터 클래스(Data Class)
- 데이터 클래스 : public 필드 또는 필드에 대한 게터와 세터만 있는 클래스
- 클래스 안에 적절한 메소드 없이 필드만 모여있는 클래스의 냄새 : 코드가 적절한 위치에 있지 않다는 뜻 내포. 클래스 내부에 선언된 필드가 어딘가에서 사용이 될텐데 필드만 있는거라면, 사용되는 부분이 적절한 위치가 아니라는 뜻
- 코드가 적절한 위치에 있지 않기 때문에 이러한 냄새가 생길 수 있다.
- 예외적으로 "단계 쪼개기"에서 중간 데이터를 표현하는데 사용할 레코드는 불변 객체로 데이터를 전달하는 용도로 사용할 수 있다.
- public 필드를 가지고 있다면 "레코드 캡슐화하기 (Encapsulate Record)"를 사용해 게터나 세터를 통해서 접근하도록 고칠 수 있다.
- 변경되지 않아야 할 필드에는 "세터 제거하기(Remove Setting Method)"를 적용할 수 있다.
- 게터와 세터가 사용되는 메소드를 찾아보고 "함수 옮기기(Move Function)"을 사용해서 데이터 클래스로 옮길 수 있다.
- 메소드 전체가 아니라 일부 코드만 옮겨야 한다면 "함수 추출하기(Extract Function)"을 선행 옮길 수 있다.
리팩토링42. 레코드 캡슐화하기 (Encapsulate Record)
- 변수 캡슐화하기와 비슷한 리팩토링
- 변하는 데이터를 다룰 때는 레코드 보다는 객체를 선호한다.
- 여기서 "레코드"란, public 필드로 구성된 데이터 클래스를 말함 (자바 레코드 자료구조와 전혀 다름)
- 데이터를 메소드 뒤로 감추면 객체의 클라이언트는 어떤 데이터가 저장되어 있는지 신경 쓸 필요가 없다.
- 필드 이름을 변경할 때 점진적으로 변경할 수 있다.
- 하지만 자바의 Record는 불편 객체(캡슐화도 되어있음)라서 이런 리팩토링이 필요 없다.
- public 필드를 사용하는 코드를 private 필드와 게터, 세터를 사용하도록 강제한다.
- 데이터를 단순히 넘겨줄 용도의 인스턴스를 생성해서 사용하기도 함. 이러한 상충하는 리팩토링들은 서로 정도의 문제이기 때문에 적절하게 사용하면 됨
'Programming > Java' 카테고리의 다른 글
[Optimizing Java] 2. JVM 이야기 (0) | 2023.06.11 |
---|---|
[Optimizing Java] 1. 성능과 최적화 (0) | 2023.06.04 |
[리팩토링] 냄새17,리팩토링37 (0) | 2023.05.21 |
[리팩토링] 냄새16,리팩토링36 (1) | 2023.05.21 |
[리팩토링] 리팩토링21~23 (0) | 2023.05.07 |