[오브젝트] 10일차

da__ell·2023년 8월 15일
0

독서 - 오브젝트

목록 보기
10/25
post-thumbnail

p. 117 ~ p.130

자율적 객체를 생성하자

캡슐화를 지켜라

객체는 자신이 어떤 데이터를 가지고 있는지 내부에 캡슐화하고 외부에 공개해서는 안된다.
외부에서는 인터페이스에 정의된 메서드를 통해서만 상태에 접근할 수 있어야 한다.

상태에 접근하는 메서드란 단순히 속성 하나의 값을 반환하거나 변경하는 접근자나 수정자를 의미하는 것이 아니다. 접근자와 수정자를 통해 속성을 외부로 제공하는 것은 캡슐화 위반.

접근자와 수정자를 활용하는 코드는 다음과 같은 문제를 가진다.

  1. 코드중복이 발생할 확률이 높다.
    특정 속성을 접근자와 수정자를 통해 변경한다면 접근자를 통해 속성을 가져오고 수정자 메서드를 이용해 값을 설정하는 코드 중복이 발생한다.
  2. 변경에 취약하다.
    내부 구현을 인터페이스의 일부로 만들기 때문에, 새로운 구현의 추가나 변경은 기존에 접근자 메서드를 사용하던 모든 코드에 영향을 미친다.

이를 위해 캡슐화를 강화시키는 코드를 작성해야 한다. 접근자와 수정자가 아닌 내부의 객체에서 스스로 책임을 수행하도록 코드를 작성해야 한다.

스스로 자신의 데이터를 책임지는 객체

객체는 단순한 데이터 제공자가 아니다. 객체 내부에 저장되는 데이터보다 객체가 협력에 참여하면서 수행할 책임을 정의하는 오퍼레이션이 더 중요하다.

따라서 객체를 설계할 때 다음과 같은 고민이 필요하다.

  1. 이 객체가 어떤 데이터를 포함해야 하는가?
  2. 이 객체가 데이터에 대해 수행해야 하는 오퍼레이션은 무엇인가?

이를 통해 내부 구현을 보다 면밀하게 캡슐화하고 데이터를 처리하는데 필요한 메서드를 데이터를 갖고 있는 객체가 스스로 구현하고 있도록 구현할 수 있다. → 스스로 책임지는 객체

하지만 여전히 부족하다.

캡슐화의 진정한 의미

캡슐화는 단순히 객체 내부의 데이터를 외부로부터 감추는 것 이상의 의미를 가진다. 캡슐화는 변경될 수 있는 어떤 것이라도 감추는 것을 의미한다. 내부 속성을 외부로부터 감추는 것은 ‘데이터 캡슐화’라는 캡슐화의 일종에 불과하다.

낮은 응집도

하나의 변경을 수용하기 위해 코드의 여러 곳을 동시에 변경해야 한다는 것은 설계의 응집도가 낮다는 의미이다. 내부 구현이 인터페이스에 노출되고 노출된 구현에 직접적으로 의존하는 것은 변경에 취약한 문제점을 야기한다.

profile
daelkdev@gmail.com

0개의 댓글