일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 함수형패러다임
- 개발
- 협업
- 클린소프트웨어
- 문법
- Solid
- iOS프로그래밍
- 인터페이스
- 아이폰프로그래밍
- 의존성
- 클린코드
- CleanCode
- 부스트코스
- 개발자
- POP
- fp
- DesignPattern
- 이름
- Swfit
- 네이밍
- interface
- OOP
- 디자인패턴
- IOS
- protocol
- 함수형프로그래밍
- 객체지향프로그래밍
- SWIFT
- 고차함수
- 의도
- Today
- Total
밤에 쓴 코드
OOP) 역할 , 책임 , 협력 본문
역할 , 책임 , 협력
- 객체
- 현실의 사물을 추상화 / 모방 ?
- 가상세계의 사물을 창조
- 객체간의 협력
protocol guest{
func order(menu : String){}
}
// 손님 역할
protocol Casher{
func takeOrder(menu : String, money : UInt){}
func deliver(menu : String){}
}
// 캐셔 역할
protocol Barista{
func makeCoffee(menu : String) -> (Coffee){}
}
// 바리스타 역할
각각의 역할이 존재하고 그에 해당하는 책임이 있다.
하나의 문제를 해결하기 위해서는 여러 객체간의 협력이 필요하다.
역할은 외부에서 볼때는 역할이고 , 내부에서 볼때는 일종의 책임에 해당한다.
객체간의 협력을 할때는 요청:메시지 로 소통하고 각각의 객체는 처리:메소드를 수행하고 응답한다.
1. 손님이 캐시어에게 주문을 한다. // 요청 2. 캐시어가 바리스타에게 주문 내용을 전달한다 // 요청 3. 바리스타가 커피를 만든다. // 응답 4. 캐시어가 커피의 완성을 알린다. // 응답 5. 손님은 커피를 습득한다. // 문제 해결
협력 하고 책임을 수행하는 것 의 의미
1. 동일한 역할을 하는 여러 객체가 존재한다. 2. 동일한 역할을 하는 객체간에는 대체 가능성이 존재한다. // 동일한 역할을 하는 어느객체이든지 수행가능하다. 3. 동일한 역할을 하는 객체간에는 동일한 책임이 적용되나, 그 책임을 수행하는 방식은 차이가 있을 수 있다. // 다형성 4. 하나의 객체는 여러 역할을 할 수 있다. // 프로토콜 다중 구현
객체의 자율성
스스로 결정하고 , 스스로 책임을 지면 자율적인 존재라고한다.
객체는 상태 와 행동 을 가진다.
객체는 행동은 외부의 영향을 받지 않고 자신의 상태를 기반으로 행동을 결정한다.
객체는 자신의 상태에 대해서 외부의 간섭로 부터 자유로워야한다.
외부에서는 해당 객체가 무엇을 수행하는지는 알수 있으나 어떻게 수행하는지에 대해서는 알 수 없다.
하는 것
- 계산
- 행동의 시작
- 다른 객체를 제어
아는 것
- 링크된 다른 객체
- 자신에 대한 정보
- 자신이 유도할수 있는 것에 관해 아는 것 - (다른 객체에 보낼수 있는 요청)/
역할
- 역할은 밖에서 볼때는 역할이고 안에서 볼때는 책임 이다.
- 역할은 특정 동작을 수행할 의무를 가지고 , 그 동작을 수행한다.
- 역할을 추상화 함으로써 , 인지과부화를 막을 수 있다.
카카오톡은 채팅어플을 만들어야합니다.
부엉이를 고용해서 , 부엉이에게 개발을 맡깁니다.
부엉이는 코딩을 합니다.
부엉이가 급한 일로 해외에 나가게되었습니다.
올빼미를 고용해서, 올빼미에게 개발을 맡깁니다.
채팅어플이 무사히끝납니다.
카카오톡은 , 은행어플을 만들어야합니다.
이번에는 기대하는 흥푸를 고용합니다.
기대하는 흥푸는 이제 코딩을 합니다.
위의 예제에서 굵게 표시된 부분을 제외한 동작은 계속적으로 반복되는 부분입니다.
그렇다면 저 동작을 하는 누구라도 괜찮지 않을까요?
저 동작을 하는 역할을 가진 어느 누구도 괜찮을거 같습니다.
역할로 다시 표현해보겠습니다.
IT기업은 소프트웨어를 만들어야합니다.
개발자를 고용해서 코딩을 시킵니다.
2줄로 줄어들었네요. - 단순해졌네요?
또 앞으로 새로운 개발자가 많이 많이 생겨도 저 위의 논리는 변함이 없을 것입니다. - 유연할 거같습니다.
위의 역할은 꾸준하겠네요 - 재사용이 가능하겠네요
단순성,유연성,재사용성
추가 공부 : 책임 주도 설게(Responsibility - Driven - Design)
소프트웨어를 설계함에 있어서는 소프트웨어가 할 기능들을 정의해야 겠습니다.
또 그 기능을 구현하기위해서는 협력하는 객체를 만들고 ,
역할과 책임을 모두 알아낸뒤 적절한 객체에 할당을 해주어야 할 것입니다.
객체가 책임을 수행하다가 스스로 처리 못하는 경우 , 다른 객체에게 협력을 요청해야합니다.
이렇게 올바른 소프트웨어를 만들기위해서는 아래와 같은 사항을 지켜주면 좋습니다.
- 시스템이 사용자에게 제공해야할 기능을 파악
- 시스템의 책임을 더 작은 책임으로 분할
- 분할된 책임을 수행할 수 있는 적절한 객체또는 역할을 찾아 책임을 할당
- 역할을 하는 객체들간의 협력을 하여 동작.
'OOP' 카테고리의 다른 글
OOP ) SOLID - 객체지향 5원칙 (0) | 2019.05.18 |
---|---|
OOP ) 타입, 추상화 (0) | 2019.04.28 |
OOP ) 상태 , 행동 , 식별자 (0) | 2019.04.26 |
OOP ) Class,객체간의 소통 (0) | 2019.04.07 |
OOP ) 클래스 / 인스턴스 / 객체 (0) | 2019.04.02 |