Categories

  • shinequasar

6장 데이터보호

6-1 getter 없이 캡슐화하기

  • 다른 java, c++, c# 같은 객체지향 언어를 배웠을 때는 캡슐화와 getter,setter 등에 대해 이러한 주제들로 중요하게 다뤘던 기억이 있다.
  • 하지만 웹 프론트엔드 프레임워크(React)에서는 state 및 props를 주로 사용하기 때문에 이런 값들에 대한 직접적인 getter와 setter를 정의할 필요가 거의 없다.
  • 대신, state를 변경할 때 useState 훅을 사용하거나, 부모 컴포넌트로부터 props를 전달받아 사용하는 것이 일반적이기 때문이다
  • 이번 장에서는 이런 식으로 리팩토링을 할 수 있구나 위주로 살펴본 것 같다.

만약 TypeScript로 getter, setter를 구현하면 이런 식으로 사용할 수 있다고 한다.

class MyClass {
  private _myProperty: string;

  constructor(initialValue: string) {
    this._myProperty = initialValue;
  }

  // Getter
  get myProperty(): string {
    return this._myProperty;
  }

  // Setter
  set myProperty(value: string) {
    this._myProperty = value;
  }
}

const instance = new MyClass('initial value');

// Getter 사용
console.log(instance.myProperty); // 출력: initial value

// Setter 사용
instance.myProperty = 'new value';
console.log(instance.myProperty); // 출력: new value

6-2 간단한 데이터 캡슐화하기

6-2-1 규칙: 공통접사를 사용하지 말 것

  • 변수에 공통 접사를 이용해 긴밀함을 표현하는 것보다 class를 이용하자!
  • 매서드에서 도우미 메서드(특정 결과를 도출하는 과정 중 필요한 메서드)는 숨겨두어 전역속성을 오염시키지 말지
  • 이런 규칙이 파생된 스멜 : 단일 책임 원칙

6-2-2 규칙 적용하기

  • 예제

6-2-3 리팩터링 패턴: 데이터 캡슐화

  • 전역으로 사용되던 변수들을 클래스로 이관.
  • 변수와 메서드를 클래스로 옮기고 필요한 부분은 은닉화.
  • 위와 같이 공통 접미사를 가진 친구들을 한데 모으기.

6-3 복잡한 데이터 캡슐화

  • (예제)
  • 데이터 캡슐화 적용
  • 변수, 메서드 이관
  • 메서드의 인라인화
  • getter, setter 제거하기

6-4 순서에 존재하는 불변속성 제거하기