[Refactoring] 데이터 구성 (1)

말하는 감자·2022년 4월 20일
0

Refactoring

목록 보기
5/9
post-thumbnail

📌 데이터 구성 (Organizing Data)

클래스 연관을 풀어서 클래스를 더 이식성 있고 재사용할 수 있게 만드는 방법


✏️ 값을 참조로 변경 (Change Value to Reference)

같은 인스턴스를 하나의 객체로 대체하고 싶을 때 해당 객체를 참조 객체로 변경

✔️ 장점

  • 특정 엔티티에 대한 정보를 한 객체가 관리하므로 한번의 수정으로 모든 관련 정보 업데이트 가능

❌ 단점

  • 참조가 구현하기 더 어려움

✏️ 참조를 값으로 변경 (Change Reference to Value)

규모가 작고 관리하기 불편한 참조객체를 값 객체로 변경

✔️ 장점

  • 값을 구현하는 게 더 쉬움

  • 객체의 중요한 속성이 바뀌지 않는다면 쿼리를 반복할 때마다 객체 값은 동일한 결과를 반환될 것이다. 그렇다면 많은 객체가 같은 것을 나타내도 문제가 없다.

    🥔💬
    감자의 부족한 영어실력으로 번역하다보니 말이 좀 이상한데...
    크롬 자동 번역은 여엉...😞
    대충 갱신을 하지 않는 것을 참조하는 거였다면 중복될지언정 구현하기 더 쉽게 값으로 넣어라 인 것 같다!

❌ 단점

  • 값을 변경해야하는 경우엔 객체가 변경되면 동일한 엔터티를 나타내는 다른 모든 객체의 값이 업데이트되어야 함

✏️ 관측 데이터 복제 (Duplicate Observed Data)

GUI 컨트롤에서만 사용가능한 도메인 데이터가 있고 도메인 메소드를 이용해야 한다면 데이터를 도메인 객체로 복사하고 두개의 데이터를 동기화하기 위해 관찰자(observer)를 설정

✔️ 장점

  • 비즈니스 로직 클래스와 프리젠테이션 클래스 간에 책임을 나누어서 프로그램을 더 읽고 이해하기 편하게 만듬 (참고. 단일 책임 원칙)

  • 개방 폐쇄 원칙(Open/Closed Principle)을 지키므로 새로운 프레젠테이션 클래스를 추가할 때 비즈니스 로직을 건드릴 필요가 없음


✏️ 자체 캡슐화 필드 (Self Encapsulate Field)

필드에 직접 접근하지만 필드 처리가 불편하다면 해당 필드에 대한 get, set 메소드를 생성하여 접근

✔️ 장점

  • getter 및 setter를 통해 작동되는 필드에 대한 간접 접근은 필드에 직접 접근하는 것보다 훨씬 유연함
    • 필드의 데이터를 설정하거나 수신할 때 복잡한 작업 수행 가능
      필드 값의 지연 초기화 및 유효성 검사를 필드 getter 및 setter 내에서 구현
    • 하위 클래스에서 getter와 setter 재정의 가능
  • 필드에 대한 setter를 구현하지 않는 방법도 존재
    필드 값은 생성자에서만 지정되므로 필드를 변경할 수 없음

❌ 단점

  • 필드에 대한 직접 접근보다 코드가 더 복잡하고 표시하기 어려워 보임

✏️ 데이터 값을 객체로 변경 (Replace Data Value with Object)

추가 데이터나 동작이 필요한 데이터 항목을 객체 안으로 이동

✔️ 장점

  • 클래스 내 관련성 향상
    데이터 및 관련 동작이 단일 클래스 내에 존재

✏️ 배열을 객체로 변경 (Replace Array with Object)

일부 요소가 다른 것을 의미하는 배열이 있다면 각 요소에 대한 필드를 가지는 객체로 변경

✔️ 장점

  • 클래스의 필드는 배열의 요소보다 문서화하기가 쉬움

  • 배열에서 변경된 객체는 메인 클래스나 다른 클래스에 저장된 모든 관련 동작을 배치할 수 있음 ...?

✏️ 단방향 연결을 양방향으로 변경 (Change Unidirectional Association to Bidirectional)

서로의 기능을 사용하는 두개의 클래스를 가지고 있지만 연관은 단방향일 때 백 포인터를 추가하고 수정했을 때 양쪽을 모두 업데이트하도록 변경

✔️ 장점

  • 클래스에 역 연관이 필요한 경우 간단하게 계산 가능

❌ 단점

  • 양반향 연결은 단반향 연결보다 구현 및 유지 관리가 어려움

  • 양반향 연결은 클래스를 상호 의존적으로 만듬

✏️ 양방향 연결을 단방향으로 변경 (Change Bidirectional Association to Unidirectional)

클래스들이 양방향으로 참조하고 있지만 하나의 클래스가 더이상 다른 클래스를 필요로 하지 않는다면 결합 제거

✔️ 장점

  • 관계가 필요하지 않은 클래스를 단순화
    더 적은 코드는 더 적은 유지 관리와 같음

  • 클래스 간의 종속성 축소
    클래스에 대한 변경 사항은 해당 클래스에만 영향을 미치므로 독립 클래스를 유지 관리하기 쉬움


📑 참고 자료


🥔💬
데이터 구성은 너무 많아서 힘들다
나눠서 해야지... 😂

profile
나는 말하는 감자다

0개의 댓글