본문 바로가기
개발 도서

Five Lines of Code - 6장. 데이터 보호

by 성건희 2023. 10. 14.
반응형

getter 없이 캡슐화하기

규칙 ) getter / setter 를 사용하지 말 것

getter 를 사용하면 캡슐화를 해제하고 불변속성을 전역적으로 만들게 된다.
따라서 예상치 못한 방식으로 객체를 수정할 수 있다.
또한 디미터 법칙 (.을 2번이상 사용하지 말아야 하는 법칙) 을 위배할 수 있고
코드를 절차지향적으로 설계할 가능성이 높아지므로 getter, setter 는 가급적 사용하지 말아야 한다.

간단한 데이터 캡슐화하기

규칙 ) 공통 접사를 사용하지 말 것

예를들어 유저의 나이 증가, 유저의 나이 조회, 유저의 이름 조회 기능을 만들어야 할 때 다음과 같이 만들 수 있다.

class Main {
  public void increaseUserAge() {
  }

  public int getUserAge() {
  }

  public String getUserName() {
  }
}

User 라는 접사가 계속 반복된다.
따라서 다음과 같이 User 클래스로 그룹화 할 수 있다.

class User {
  public void increaseAge() {
  }

  public int getAge() {
  }

  public String getName() {
  }
}

이렇게 클래스로 캡슐화하면 외부로 노출되지 않아도 될 데이터를 숨기면서 불변속성이 클래스 내에서 관리되게 할 수 있다는 장점이 있다.
유지보수도 쉬워진다.

변수와 메서드를 클래스로 옮기는 과정을 데이터 캡슐화라고 한다.

순서에 존재하는 불변속성 제거

아래 순서도를 보자

1. 게임 세팅
2. 게임 실행

게임이 세팅이 된 뒤에 게임을 실행할 수 있다.
세팅이 되지 않은 상태에서 게임을 실행할 수 없다.
이처럼 무언가가 다른 것보다 먼저 호출되어야 할 때, 순서 불변속성 이라고 한다.
이런 순서 불변속성은 생성자에 코드를 옮겨넣어서 제거할 수 있다. (생성자는 객체가 생성될 때 맨 처음 실행되기 때문)
생성자를 통해 순서를 강제하는 이런 방법을 순서 강제화 라고 한다.
순서 강제화를 하면 개발자가 실수로 순서를 바꾸는 이슈를 방지할 수 있다.

정리

  • getter, setter 사용 금지
  • 공통 접사 사용 금지
  • 순서 불변속성이 있다면, 클래스를 이용해 순서 강제화 하기
반응형

댓글