카테고리 없음

38, 39일차 - 일관성 있는 설계와 캡슐화

밍 끄적 2023. 9. 21. 01:14
728x90

2023.09.20 WED

483p ~ 504p

 

37일차 내용 ⬇️

2023.09.18 - [개발 서적 기록/오브젝트_조영호] - 36, 37일차 - 계약에 의한 설계

 

36, 37일차 - 계약에 의한 설계

2023.09.18 MON 460p ~ 482p 35일차 내용 ⬇️ 2023.09.15 - [개발 서적 기록/오브젝트_조영호] - 35일차 - 상속의 목적 : 서브클래싱 & 서브타이핑 그리고 ISP & LSP 35일차 - 상속의 목적 : 서브클래싱 & 서브타이

magenta-ming.tistory.com


비일관성의 문제점

1. 새로운 구현을 추가할때, 추가하면 할수록 코드 사이의 일관성이 더 어긋난다.

2. 구현 방식이 서로 달라 코드를 이해하는데 방해가 된다.

 

따라서 유사한 기능을 서로 다른 방식으로 구현해서는 안된다.

유사한 기능은 유사한 방식으로 구현해야하고, 그 방법은 객체 사이의 협력을 만드는 것이다.

 

일관성 있는 설계

단일 책임 원칙을 실천해서 일관성 만들기

유사한 기능을 묶고 캡슐화하기 위해서는 단일 책임 원칙을 따르도록 클래스를 분리할 수 있다.

조건 로직을 객체 사이의 이동을 대체하기 위해서, 더 작은 클래스로 분리하게 되고, 분리하는 기준은 단일의 책임에 따른다.

큰 메서드 안에 뭉쳐있던 조건 로직들을, 변경의 압력에 맞춰 작은 클래스로 분리한다.

그러면 인스턴스 사이의 협력 패턴에 일관성을 부여하기 쉬워지고, 유사한 행동을 수행하는 작은 클래스들은 역할이 부여되면서 추상화로 묶이고, 역할 간의 협력 방식이 일관성을 만든다.

 

일관성 있는 설계의 기본 원칙

1. 변하는 개념을 변하지 않는 개념으로부터 분리하라

코드에서 새로운 요구사항이 있을 떄마다 바뀌는 부분이 있다면, 그 행동을 바뀌지 않는 다른 부분으로부터 골라내서 분리해야 한다.

 

이를 위해서 조건을 개별적인 객체로 분리하고, 타입 계층을 구성하고, 타입 계층을 클라이언트로 분리하기 위해 역할을 도입하고, 이 역할을 추상 클래스와 인터페이스로 구현할 수 있다.

변하는 개념을 별도의 서브타입으로 분리해, 서브타입들을 클라이언트로부터 캡슐화한 것이다.

 

2. 변하는 개념을 캡슐화하라

변하는 개념을 캡슐화를 하면, 나중에 바뀌지 않는 부분에는 영향을 미치지 않은 채 해당하는 부분만 고치거나 확장할 수 있다.

 

훌륭한 추상화를 찾아 추상화에 의존하도록 하면, 결합도가 낮아지고, 대체 가능한 역할로 구성된 협력을 사용할 수 있다.

 

캡슐화는 데이터 은닉 이상이다.

데이터 은닉은 오직 외부에 공개된 메서드를 통해서만 객체의 내무베 접근할 수 잇게 제한해, 객체 내부의 상태 구현을 숨기는 방법이다.

클래스의 모든 인스턴스 변수는 private으로 선언하고, 오직 해당 클래스의 메서드만이 인스턴스 변수에 접근할 수 있다.

 

캡슐화는 변하는 어떤 것이든 감추는 것이다. 단순히 데이터만 감추는 것이 아니다.

따라서, 캡슐화는 데이터 은닉의 개념을 포함하고 있다.

 

캡슐화의 종류

데이터 캡슐화

인스턴스 변수와 같이 내부에 관리하는 데이터를 캡슐화한다.

메서드를 이용해서만 접근할 수 있다.

메서드 캡슐화

외부에서 이 메서드에 직접 접근할 수 없어, 클래스 내부 행동을 캡슐화 한다.

외부에 영향 없이 메서드를 수정할 수 있다.

클래스 내부와 서브 클래스에서만 이 메서드에 접근이 가능하다.

객체 캡슐화

객체와 객체 간의 관계를 캡슐화한다. 합성과 동일하다.

서브타입 캡슐화

서브타입의 종류를 캡슐화 한다. 다형성을 나타낸다.

 

728x90