• Home
  • About
    • 밤에 쓴 코드 photo

      밤에 쓴 코드

      부엉이의 개발 노트

    • Learn More
    • Facebook
    • Instagram
    • Github
  • Posts
    • All Posts
    • All Tags
  • Projects

O O P 4

04 May 2019

Reading time ~2 minutes

역할 , 책임 , 협력


  • 객체

    • 현실의 사물을 추상화 / 모방 ?
    • 가상세계의 사물을 창조
  • 객체간의 협력

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. 손님은 커피를 습득한다. // 문제 해결
    
  • 협력 하고 책임을 수행하는 것 의 의미

  • ```swift

    1. 동일한 역할을 하는 여러 객체가 존재한다.
    2. 동일한 역할을 하는 객체간에는 대체 가능성이 존재한다. // 동일한 역할을 하는 어느객체이든지 수행가능하다.
    3. 동일한 역할을 하는 객체간에는 동일한 책임이 적용되나, 그 책임을 수행하는 방식은 차이가 있을 수 있다. // 다형성
    4. 하나의 객체는 여러 역할을 할 수 있다. // 프로토콜 다중 구현 ```

객체의 자율성

  • 스스로 결정하고 , 스스로 책임을 지면 자율적인 존재라고한다.

  • 객체는 상태 와 행동 을 가진다.

  • 객체는 행동은 외부의 영향을 받지 않고 자신의 상태를 기반으로 행동을 결정한다.

  • 객체는 자신의 상태에 대해서 외부의 간섭로 부터 자유로워야한다.

  • 외부에서는 해당 객체가 무엇을 수행하는지는 알수 있으나 어떻게 수행하는지에 대해서는 알 수 없다.


#### 하는 것

  • 계산
  • 행동의 시작
  • 다른 객체를 제어

### 아는 것

- 링크된 다른 객체 - 자신에 대한 정보 - 자신이 유도할수 있는 것에 관해 아는 것 - (다른 객체에 보낼수 있는 요청)/

역할

  • 역할은 밖에서 볼때는 역할이고 안에서 볼때는 책임 이다.
  • 역할은 특정 동작을 수행할 의무를 가지고 , 그 동작을 수행한다.
  • 역할을 추상화 함으로써 , 인지과부화를 막을 수 있다.

카카오톡은 채팅어플을 만들어야합니다.

부엉이를 고용해서 , 부엉이에게 개발을 맡깁니다.

부엉이는 코딩을 합니다.

부엉이가 급한 일로 해외에 나가게되었습니다.

올빼미를 고용해서, 올빼미에게 개발을 맡깁니다.

채팅어플이 무사히끝납니다.

카카오톡은 , 은행어플을 만들어야합니다.

이번에는 기대하는 흥푸를 고용합니다.

기대하는 흥푸는 이제 코딩을 합니다.


위의 예제에서 굵게 표시된 부분을 제외한 동작은 계속적으로 반복되는 부분입니다.

그렇다면 저 동작을 하는 누구라도 괜찮지 않을까요?

저 동작을 하는 역할을 가진 어느 누구도 괜찮을거 같습니다.


역할로 다시 표현해보겠습니다.

IT기업은 소프트웨어를 만들어야합니다.

개발자를 고용해서 코딩을 시킵니다.


3줄로 줄어들었네요. - 단순해졌네요?

또 앞으로 새로운 개발자가 많이 많이 생겨도 저 위의 논리는 변함이 없을 것입니다. - 유연할 거같습니다.

위의 역할은 꾸준하겠네요 - 재사용이 가능하겠네요

###단순성,유연성,재사용성


추가 공부 : 책임 주도 설게(Responsibility - Driven - Design)

소프트웨어를 설계함에 있어서는 소프트웨어가 할 기능들을 정의해야 겠습니다.

또 그 기능을 구현하기위해서는 협력하는 객체를 만들고 ,

역할과 책임을 모두 알아낸뒤 적절한 객체에 할당을 해주어야 할 것입니다.

객체가 책임을 수행하다가 스스로 처리 못하는 경우 , 다른 객체에게 협력을 요청해야합니다.

이렇게 올바른 소프트웨어를 만들기위해서는 아래와 같은 사항을 지켜주면 좋습니다.

  • 시스템이 사용자에게 제공해야할 기능을 파악
  • 시스템의 책임을 더 작은 책임으로 분할
  • 분할된 책임을 수행할 수 있는 적절한 객체또는 역할을 찾아 책임을 할당
  • 역할을 하는 객체들간의 협력을 하여 동작.


Share Tweet +1