개요
- 객체 지향 설계 자체는 반복적이고 점진적인 과정임.
- 식별
- 객체 할당
- 캡슐화
- 객체 간의 통신 설계를 포함한다
주요 단계
- 기능 식별 및 객체의 할당
- 제공해야 할 기능을 탐색하고 세분화한다.
- 식별된 기능을 적절한 객체에 할당한다
- 때로는 데이터를 먼저 추가하고, 그 데이터를 이용하는 기능을 넣을 수도 있다.
- 캡슐화
- 객체 간 통신 설계
- 반복
- 1단계부터 3단계 까지 과정을 개발하는 동안 지속적으로 반복.
예시
기능 식별
- 파일에서 데이터를 읽기
- 데이터 암호화
- 파일에 데이터 쓰기
초기 객체 설계
- 파일에서 읽기 객체
- 암호화 객체
- 파일 쓰기 객체
각 객체의 인터페이스가 도출됨.
interface FileDataReader {
public byte[] read();
}
interface Encryptor {
public byte[] encrypt(byte[] data);
}
interface FileDataWriter {
public void write(byte[] data);
}
책임 분리 및 재설계
- 암호화 객체는 2가지 책임이 있음.
- 흐름 제어 ( 데이터 읽기, 암호화, 쓰기 )
- 데이터의 암호화
- 구현 과정에서 책임 분리의 필요성이 있다면 재설계
[파일 읽기 객체] --> [흐름 제어 객체] --> [암호화 객체]
|
v
[파일 쓰기 객체]
- 만약 코드상에서 흐름 제어 객체라는 것이 등장한다면
설계의 점진적 발전
- 객체 설계는 한번에 완성 X, 구현을 진행하면서 점진적으로 완성함
- 최초의 설계는 완벽하지 않음 → 개발하면서 설계 변경
- 설계시 변경될 부분을 유연한 구조로 가져가야 한다.
캡슐화의 중요성
- 내부 구현에 유연함을 제공
- 객체의 내부 구현이 변경되어도 외부 인터페이스는 유지가능