객체란 무엇인가?
현실의 무언가를 표현한것이다. 즉, 현실의 개념에 대응하는게 객체이다.객체는 협력(여러 객체가 함께 참여함), 책임(객체의 역할을 잘 수행해야함), 역할(객체 마다 자신의 역할을 가짐)을 수행하며 문제를 해결한다.현실의 사물과 달리 능동적이고 자율적인 존재이다.
객체는 메시지를 통해 다른 객체에 책임을 다하라고 요구한다. 메세지를 보내는 객체는 무엇을 할지 요구하고, 어떻게 하는지는 신경쓰지 않는다. 객체는 책임을 수행하라고 요구받지만, 어떻게 처리할 지는 자율에 맡긴다.
왜냐하면 서로 다른 유형의 객체가 동일한 메세지에 대해 다르게 반응하게 하기 위함이다. 다형성을 활용하여 하나의 객체가 다양한 타입을 가질 수 있게 한다.
(*다형성 : 하나의 객체가 여러가지 타입을 가질 수 있는 것을 의미한다.)
자바는 함수를 호출하여 메시지를 전송한다.
class ElectricChickenShop extends ChickenShop { // 다형성을 만족하는 객체
public void cookChicken(){}//똑같이 치킨을 만들지만 전기방식으로
public chicken getChicken(){} // 똑같이 치킨을 건넨다
}
객체지향적으로 설계하기
어려운점 : 현실세계를 반영하다보니 자칫 데이터 중심의 설계를 하기 쉽다. 어떤 객체가 무엇을 가져야하는지에 대해서 정리한다.(요리사[돈,후라이팬], 배달원[돈,오토바이....])
⇒ getter,setter가 과도하게 추가되어 결합도가 높아진다. (서로 알고 있는 객체가 많아진다.)
⇒ 하나의 변경사항에 대해서 많은 수정이 필요해진다. 그래서 유지보수가 어렵다.
⇒ 데이터를 처리하는 작업과 데이터가 분리되어 응집도가 낮아진다.
책임 주도 개발
1. 시스템이 사용자에게 제공해야하는 기능인 시스템 책임을 파악한다.
⇒ 시스템이 해야할 목적을 명시한다.
치킨 주문을 받아 손님에게 배달해야한다.
2. 시스템 책임을 더 작은 책임으로 분할한다.
⇒ 객체지향은 메세지로 통신한다. 따라서 어떤 메세지를 줄지 생각한다.
치킨 주문을 받는다.
치킨을 요리한다.
치킨을 손님에게 배달한다.
3. 분할된 책임을 수행할 수 있는 적절한 객체 또는 역할을 찾아 책임을 할당한다.
치킨 주문을 받는다. ⇒ 치킨가게
치킨을 요리한다. ⇒ 요리사
치킨을 손님에게 배달한다. ⇒ 배달원
4. 객체가 책임을 수행하는 도중 다른 객체의 도움이 필요한 경우 이를 책임질 적절한 객체 또는 역할을 찾는다.
5. 해당 객체 또는 역할에게 책임을 할당함으로써 두 객체가 협력하게 한다.
레퍼런스
[10분 테코톡] 웨지의 oop : https://www.youtube.com/watch?v=3etKkkna-f0
'개발' 카테고리의 다른 글
JAVA의 스레드를 공부하자 (0) | 2022.02.26 |
---|---|
[TDD] 자바와 JUnit을 활용한 실용주의 단위 테스트 (작성중) (0) | 2022.02.24 |
[JUnit5] JUnit5를 공부해보자(Spring Boot, REST API) (0) | 2022.02.24 |
JAVA의 Servlet이 뭐지? (0) | 2022.02.19 |
JAVA 인터페이스는 왜 쓰는 걸까? (0) | 2022.02.18 |