개발 공부를 하면서 “객체지향” 이라는 단어는 셀 수 없이 들어봤을 것이다.
객체지향의 개념에 대해 읽어봤을 뿐이라면, 제대로 이해하지 못 했을 수도 있다.
이 글은 객체지향에 대해 오해할 수 있는 내용들을 주제로 한다.
객체지향 프로그래밍(OOP)
부품에 해당하는 객체들을 먼저 만들고, 이들을 하나씩 조립해 전체 프로그램을 완성하는 기법이다.
by "이것이 자바다 1장"
구현에 필요한 객체를 파악하고, 객체들의 역할을 정의하여 상호작용을 통해 프로그램을 만드는 것이다.
기능 중심인 절차지향의 “무엇을 어떤 절차로 할 것인가?” 와 다르게, 객체 중심인 객체지향은 “누가 어떤 일을 할 것인가?”가 핵심이다.
by 인코덤
이론적인 접근 방식으로 설계를 한다면, 편협된 사고를 가질 수 있다.
그 중 대표적인 예시가 현실세계의 물체를 그대로 일반화시켜 프로그래밍하는 것이다.
현실에서는 단방향적인 접근만 일어난다.
다만, 객체지향으로 설계할 때는 다른 시각을 가져야 한다.
객체지향의 세계에선 사람도, 자동차도 동일한 객체로 다루어야 한다.
속도를 증가시킬지 말지는 자동차가 승인할 수도 있고, 반대로 요청을 거절할 수도 있다.
책임 주도 설계란?
‘어떤 책임이 어떤 객체에게 필요한가?’를 결정하는 과정이 전체 설계를 주도해야 한다는 것이다.
각 객체들에게 적절한 책임을 부여하여, 문제없이 상호작용을 하여 로직이 실행되도록 해야 한다.
아래 예시의 경우: 역할은 자동차이고, 구현은 차종에 해당된다.
사람은 차를 운전을 할 뿐, 차종이 무엇인지는 상관이 없어야 한다.
자동차가 그랜저가 포르쉐로 바뀐다 한들, “자동차”라는 역할은 동일하다.
→ 자동차라는 역할을 추상화하여 역할을 중점으로 개발했다면, 서비스에 유연성을 줄 수 있다.
협력 관계가 정해지지 않았을 때 아래와 같은 섣부른 설계는 올바르지 않다.
- ‘자동차니까 speed 속성이 필요하겠지’
- ‘핸들은 당연히 왼쪽에 있지’
객체가 어떤 객체와 어떤 상호작용을 할 지 정해지고, 역할이 정해진 후에 그 내용을 토대로
상태, 필드, 속성 등을 결정하는 것이 올바른 객체지향 접근 방식이다.