객체지향

태태코딩 - 객체지향 원칙

태태코 2024. 12. 25. 16:14
반응형

 

객체지향 

1원칙 : 협력에 필요한 행동을 먼저 결정하고, 행동에 적합한 객체를 나중에 선택하라.

2원칙 : 객체의 행동을 먼저 구현하고, 행동에 필요한 데이터를 나중에 선택하라.

 

 

절자적인 설계의 문제점

 

1. 프로세스와 데이터를 나누어서 설계한다.

 

2. 모든 상황의 getter와 setter를 설정해야했다.

 

ex) 1. 프로세스와 데이터를 나누어서 설계한다는 뜻의 예

reservation service 에서 예약이라는 행동을 하기위해서 주문 정보와 여러가지를  가져오게 되는데. 

만약 reservation service에서 주문의 총 가격을 계산한다거나, 단순히 예약에 관한 메서드가 아닌, 모든 프로세스가 따로 만들어진다면, 유지보수가 힘들어진다. 

 

유지보수가 힘들어지는 이유: 이를 절차적인 프로그래밍이라고 하는데. 프로세스에 모든 코드가 모여있다 보니깐, 프로세스 메서드안에서 로직이 변경되거나 사용하는 다른 클래스의 데이터가 변경될 경우 프로세스 메서드가 계속계속 바뀌어야 하기 떄문이다.

 

ex) 2.  모든 상황의 getter 와 setter를 설정해야한다는 예

프로세스 내에서 다른 클래스의 데이터를 조회하고 수정해서 사용하기 때문에 다른 클래스의 데이터를 모두 getter와 setter를 열어둬야하는 문제가 생긴다.

 

 

설계순서 

 

메서드를 먼저 구현하고 안에 필요한 속성들은 나중에 추가해도 된다.
이유: 메서드를 먼저 구현하면, 다른 클래스에 영향이 없기 때문에
또한 외부 객체의 요청에 응답하기 위해서.

 

 

데이터를 결정하는 방법

 

  • 데이터를 결정할 때에는 문맥을 먼저 확인한다.
  • 요청을 처리하기 위한 객체를 나중에 선택해야한다. (변경에 유연하다)
  • 객체가 다른 객체에게 요청하고 응답하는 것을 (협력) 이라고 한다.

 

 

 

객체지향의 하이라이트는 문맥의 존재 여부다.

 

이위의 내용을 책임 주도 설계라고 부른다.

 

  •  협력을 위한 문맥결정
  •  필요한 책임 식별 
  •  책임을 수행할 객체를 선택 
  •  책임 구현 
  • 데이터 결정

 

책임 : 협력에 참여하기 위해 한 객체가 다른 객체에게 제공하는 행동을 책임이라고 한다.
협력 : 어플리케이션 기능, 객체의 책임 할당
시스템이 외부에 제공할 수 있는 서비스를 문맥이라고한다.

 

설계예시

 

예매시스템을 객체지향으로 설계한다? 

영화예매기능을 객체들 사이의 협력으로 구현하고, 협력에 필요한 객체들을 선택한다는 것을 의미한다.

 

  1.  애플리케이셔이 외부에 제공할 기능을 파악해야한다.
  2.  애플리케이션의 기능 요구사항을 시스템의 책임으로 변환
  3.  시스템의 책임을 객체의 책임으로 변환
  4.  객체의 책임 일부를 수행하기 위해 외부의 도움이 필요하다면 다른 객체에게 도움을 요청
  5.  이 요청을 또 다른 객체의 책임으로 변환
  6.  책임을 담당할 적적한 객체 선택

 

 

 

책임 할당시에는 도메인 모델에서 책임을 할당할 객체를 참고할 수 있다.

 

도메인 모델을 참고하는 이유는 표현적 차이를 줄이기 위해서.

 

 

앞으로의 객체지향 설계 공부 내용

 

GRASP(General Responsibility Assignment Software Pattern) -> 일반적인 책임할당을 위한 소프트웨어 패턴

CRC 카드를 통해서 책임과 협력을 표현하기 위한 객체지향 도구를 사용한다.

Candidate ( 후보, 역할 또는 객체)
Responsibility (책임)
Collaborator (협력자)

 

인프런 오브젝트

반응형

'객체지향' 카테고리의 다른 글

객체지향 기본 공부  (0) 2023.03.16
구구단 프로그램(java)  (0) 2023.02.22
계산기 만들기 프로그램  (0) 2023.02.22