
객체지향
1원칙 : 협력에 필요한 행동을 먼저 결정하고, 행동에 적합한 객체를 나중에 선택하라.
2원칙 : 객체의 행동을 먼저 구현하고, 행동에 필요한 데이터를 나중에 선택하라.
절자적인 설계의 문제점
1. 프로세스와 데이터를 나누어서 설계한다.
2. 모든 상황의 getter와 setter를 설정해야했다.
ex) 1. 프로세스와 데이터를 나누어서 설계한다는 뜻의 예
reservation service 에서 예약이라는 행동을 하기위해서 주문 정보와 여러가지를 가져오게 되는데.
만약 reservation service에서 주문의 총 가격을 계산한다거나, 단순히 예약에 관한 메서드가 아닌, 모든 프로세스가 따로 만들어진다면, 유지보수가 힘들어진다.
유지보수가 힘들어지는 이유: 이를 절차적인 프로그래밍이라고 하는데. 프로세스에 모든 코드가 모여있다 보니깐, 프로세스 메서드안에서 로직이 변경되거나 사용하는 다른 클래스의 데이터가 변경될 경우 프로세스 메서드가 계속계속 바뀌어야 하기 떄문이다.
ex) 2. 모든 상황의 getter 와 setter를 설정해야한다는 예
프로세스 내에서 다른 클래스의 데이터를 조회하고 수정해서 사용하기 때문에 다른 클래스의 데이터를 모두 getter와 setter를 열어둬야하는 문제가 생긴다.
설계순서
메서드를 먼저 구현하고 안에 필요한 속성들은 나중에 추가해도 된다.
이유: 메서드를 먼저 구현하면, 다른 클래스에 영향이 없기 때문에
또한 외부 객체의 요청에 응답하기 위해서.
데이터를 결정하는 방법
- 데이터를 결정할 때에는 문맥을 먼저 확인한다.
- 요청을 처리하기 위한 객체를 나중에 선택해야한다. (변경에 유연하다)
- 객체가 다른 객체에게 요청하고 응답하는 것을 (협력) 이라고 한다.
객체지향의 하이라이트는 문맥의 존재 여부다.
이위의 내용을 책임 주도 설계라고 부른다.
- 협력을 위한 문맥결정
- 필요한 책임 식별
- 책임을 수행할 객체를 선택
- 책임 구현
- 데이터 결정
책임 : 협력에 참여하기 위해 한 객체가 다른 객체에게 제공하는 행동을 책임이라고 한다.
협력 : 어플리케이션 기능, 객체의 책임 할당
시스템이 외부에 제공할 수 있는 서비스를 문맥이라고한다.
설계예시
예매시스템을 객체지향으로 설계한다?
영화예매기능을 객체들 사이의 협력으로 구현하고, 협력에 필요한 객체들을 선택한다는 것을 의미한다.
- 애플리케이셔이 외부에 제공할 기능을 파악해야한다.
- 애플리케이션의 기능 요구사항을 시스템의 책임으로 변환
- 시스템의 책임을 객체의 책임으로 변환
- 객체의 책임 일부를 수행하기 위해 외부의 도움이 필요하다면 다른 객체에게 도움을 요청
- 이 요청을 또 다른 객체의 책임으로 변환
- 책임을 담당할 적적한 객체 선택
책임 할당시에는 도메인 모델에서 책임을 할당할 객체를 참고할 수 있다.
도메인 모델을 참고하는 이유는 표현적 차이를 줄이기 위해서.
앞으로의 객체지향 설계 공부 내용
GRASP(General Responsibility Assignment Software Pattern) -> 일반적인 책임할당을 위한 소프트웨어 패턴
CRC 카드를 통해서 책임과 협력을 표현하기 위한 객체지향 도구를 사용한다.
Candidate ( 후보, 역할 또는 객체)
Responsibility (책임)
Collaborator (협력자)
'객체지향' 카테고리의 다른 글
객체지향 기본 공부 (0) | 2023.03.16 |
---|---|
구구단 프로그램(java) (0) | 2023.02.22 |
계산기 만들기 프로그램 (0) | 2023.02.22 |