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 제거하기