경험 및 후기

[영상후기] OOP 객체지향 프로그래밍

주니홍 2022. 7. 11. 04:51

https://www.youtube.com/watch?v=3etKkkna-f0 

 

 

객체지향 프로그래밍이란?

  • 프로그래밍 개발방법론

  • 사람이 현실을 바라보는 방법을 개발에 접목
    • 직관적으로 이해하기 쉽다
    • 유지보수를 용이하게 만든다

 

객체란 무엇인가?

  • 객체는 현실의 무언가에 추상적으로 표현한 것
    ex) 오토바이, 치킨집, 배달 모든 것 등등

  • class 는 객체를 표현하는 하나의 수단이다
    ( class ! = 객체 )

  • 다른 객체와 협력(Collaboration)하는 역할(role)을 맡고 있는 대상

  • 역할을 맡으면 임무를 수행할 책임(responsbility)이 생긴다

  • 책임을 다하기 위한 데이터와 프로세스를 가지고 있다


이해를 돕기위해 치킨서비스를 개발한다는 개념으로

 

협력(Collaboration) 이란?

시스템 목표를 달성하기위해 여러 객체가 참여하여 행동하는 것

ex) 치킨을 튀겨서 손님에게 배달해야 한다 (시스템 목표)

 

책임(responsbility) 이란?

협력 속에서 본인이 수행해야 할 임무의 내용을 알고, 수행하는 것

ex) 치킨을 튀길 객체는 치킨을 맛있게 조리할 책임을 갖는다

 

역할(role) 이란?

동일한 목적을 가진 책임의 묶음

ex) 치킨을 조리할 책임을 가지는 역할은 요리사이다

 

 

 

메세지

객체는 메세지를 통해 다른 객체에 책임을 다하라고 요구한다

 

메세지를 보내는 객체는 무엇을 할지만 요구하고

어떻게 하는지는 신경쓰지 않아도 된다

 

객체는 책임을 수행하라고 요구 받지만

어떻게 처리할 지는 자율에 맡긴다 

 

객체를 세줄로 정리

1. 객체는 현실의 개념을 추상화 한 것

2. 객체들은 서로 협력하고, 역할을 맡아 책임을 수행하여 문제상황 해결

3. 현실의 사물과는 달리 객체는 능동적이고 자율적인 존재

 

 

객체지향적인 설계시 빠지기 쉬운 함정

현실세계를 반영하기위한 설계를 시작하면 데이터중심의 설계를 하기 쉽다

 

데이터중심적인 설계를 하게되면

1. 결합도가 높아진다

ㅡ> 하나의 변경이 일어날때 다수의 변경을 필요로 한다

 

2. 응집도가 낮아진다

ㅡ> 여러가지 이유로 코드 수정이 많아진다

 

 

 

객체지향적인 설계를 하는 방법

책임 주도 개발

1. 시스템이 사용자에게 제공해야 하는 기능인 시스템 책임을 파악한다

( 협력이 무엇인지 시스템목표를 파악 )

치킨 주문을 받아 손님에게 배달해야한다



2. 시스템 책임을 더 작은 책임으로 분할한다

( 책임을 여러개로 만드는 것 )

  • 치킨 주문을 받는다
  • 치킨을 요리한다
  • 치킨을 손님에게 배달한다


3. 분할된 책임을 수행할 수 있는 적절한 객체 또는 역할을 찾아 책임을 할당

  • 치킨 주문을 받는다  ㅡ> 치킨 가게
  • 치킨을 요리한다  ㅡ>  요리사
  • 치킨을 손님에게 배달한다  ㅡ> 배달원


4. 객체가 책임을 수행하는 도중 다른 객체의 도움이 필요한 경우

이를 책임질 적절한 객체 또는 역할을 찾는다

  • 주문을 받은 치킨가게는 치킨요리를 ㅡ>  요리사에게 부탁
  • 요리사는 요리한 치킨을 배달 ㅡ> 배달원에게 부탁
  • 배달원은 책임을 수행


5. 해당 객체 또는 역할에게 책임을 할당함으로써 두 객체가 협력하게 한다

class ChickenShop {
	Chef chaf = new Chef();
    
    public void takeOrder() {
    	chef.cook(); // 두 객체가 협력한 부분
    }
}

 

 

 

책임 주도 설계를 하게되면

 

결합도는 낮아지고, 응집도는 높아지는 설계를 할 수 있게된다!!