Java 패러다임

nGyu·2022년 5월 12일
2
post-thumbnail

Java는 객체지향 언어이다

이런 말을 많이 들어보았을텐데, 객체지향? 그냥 블록단위로 짤라서 서로 하는일 분업하는거 아니야? 라는 생각만 가지고 있었지 객체지향이 어떤건지 대충 짐작만 가고 정확히 어떤건지 잘 몰랐다.
그래서 한번 제대로 알아보기로 했다.


객체지향

객체지향이라 하면 먼저 떠오르는것은 Java일텐데, Java하면 Class가 떠오르게 된다.
" 그럼 Class를 잘 쓰면 되는거 아니야? "

반은 맞고, 반은 틀렷다.

우선, 객체지향이 무엇일까?

프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체 를 만들고, 그 객체간 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법.

자 여기서 키워드가 몇가지 나왔다.

상태, 행위, 상호작용

예시를 한번 들어보자.

스타벅스에 커피를 사러 왔다고 가정을 하자.

우선, 손님의 입장으로 스타벅스에 가면 커피를 주문한다.
이 주문은 캐셔가 받게되고, 캐셔는 바리스타에게 제조를 요청한다.

자 여기서 역할을 나누어보자

손님, 캐셔, 바리스타
이렇게 총 3명으로 나뉘게 되는데 이들의 상태와 행위는 어떠한가?

손님 : 주문하기
캐셔 : 주문받고 바리스타에게 제조 요청하기
바리스타 : 제조요청받고 제조하기

여기서 보면 각각의 할 일이 정해져있다.

손님은 주문을 한다.
캐셔는 주문을 받고, 제조요청을 한다.
바리스타는 요청받은 음료를 제조한다.

스타벅스 안에서 이들의 상호작용으로 손님은 커피를 받을 수 있게 되었다.

여기서 눈치가 빠른 사람들은 알 수 있을것이다.

손님, 캐셔, 바리스타 들은 객체이고,
행동은 메서드라고 할 수 있다.

그런데 꼭 캐셔가 주문받아야하나?
여러 객체가 동일안 역할을 수행할 수 있다.
역할을 대체할 수 있다.

아니다, 바리스타가 받을 수도 있다.
손님의 입장에서는 바리스타가 주문을 받으면 그 사람이 캐셔다.

주문을 꼭 대면으로 받아야하나?
방법은 자율적으로 선택할 수 있다.

캐셔가 주문을 받을 때 꼭 대면으로 받을 필요는 없다. silen order 와 같이 온라인으로도 요청하고 받을 수 있다. 주문만 잘 받으면 된다.

바리스타가 꼭 커피를 만들어야하나?
한 객체가 동시에 여러 역할을 수행할 수 있다.

커피를 제조할 수 있는 캐셔면 바쁠때 같이 도와서 제조할 수 있다.


예시를 통해 알게 된 몇가지 개념

객체는 협력적이어야 한다.

  • 객체는 요청을 유연하게 받거나 요청할 수 있어야한다.
  • 객체는 명령에 따라 움직이는게 아닌, 요청에 따라 움직인다.
  • 응답의 방식은 객체가 스스로 판단하고, 요청에 응하는것도 스스로 판단한다.

객체는 충분히 자율적이어야 한다.

  • 각각의 요청에 대해 스스로 판단하고 행동할 수 있다.

정리

키워드는 객체간의 상호작용 이라고 생각한다.

여기서 스타벅스의 목표는 무엇인가?
바로, 손님에게 커피를 제조하여 판매하는것이다.
이처럼 각각의 객체들은 목표를 위해 서로 상호작용한다.

그럼 우리의 목표는 무엇인가?
어플리케이션 기능 구현이다.

이처럼 한가지 목표를 위해 다양한 객체들이 있을것이고, 이 객체들을 서로 상호작용하게 하여 효율적인 작업을 통해 우리의 목표를 이룰것이다.

이것이 객체지향이 지향하는 패러다임이 아닐까 싶다.

profile
지금보다 내일을, 모레를 준비하자

0개의 댓글