Programming/객체지향의 사실과 오해

[Programming] 객체지향의 사실과 오해(1) - 객체지향

ready-go 2023. 5. 7. 20:25

객체지향 프로그래밍

프로그래밍을 공부하다보면 객체지향이라는 말을 한 번은 들어봤을 것이다. 그러나 막상 '객체지향이 뭔데?'라고 물어보면 간단히 설명하기는 어렵다. 정확히 무엇인지는 몰라도, 이미 본능적으로 객체를 만들어서 잘 사용하고 있기 때문일 것이다.

 

위키백과는 객체지향 프로그래밍은 다음과 같이 설명하고있다.

객체 지향 프로그래밍(Object-Oriented Programming, OOP)은 컴퓨터 프로그래밍의 패러다임 중 하나이다. 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다.

 

쉽게 말해, 알고리즘 문제를 푸는 것처럼 명령어를 나열하던 방식에서 벗어나 객체들이 메시지를 주고받는 형태로 바뀌었다는 것이다. 결국 객체지향에 대한 질문은 '객체가 뭔데?'라는 질문을 낳게 된다.

 

객체란 무엇인가?

객체란 소프트웨어 세계의 문제를 해결하는 주체라고 할 수 있다. 예를 들어, 온라인 쇼핑몰은 상품을 주문하고, 결제하고, 배송하는 오프라인의 문제를 소프트웨어 세계로 가져온 것이다. 여기에는 소비자와 판매자, 주문과 결제 등의 주체가 존재할 수 있다. 소프트웨어 세계에서는 현실세계와는 다르게 주문과 결제같은 추상적인 개념도 객체가 될 수 있다. 소비자와 판매자가 주문과 결제보다 중요하지도 않고, 그저 전체 시스템을 구성하는 똑같은 객체일 뿐이다.

 

그렇다면 현실세계의 모든 것을 객체로 만들면 될까? 온라인 쇼핑몰을 만들 때 박스에 넣는 충전재까지 객체가 될 필요는 없다. 중요한 것은 문제를 해결하는 데 수행해야 할 역할과 책임이다. 이렇게 만들어진 객체들은 서로 협력을 통해 문제를 해결할 수 있다.

 

역할과 책임

객체의 역할이란 말 그대로 객체가 수행해야하는 역할을 의미한다. 온라인 쇼핑몰 예시에서는 소비자, 판매자, 주문, 결제 등이 모두 역할이다. 각각의 역할이 수행해야하는 행동을 책임이라고 한다. 소비자는 상품을 구매하고, 판매자는 상품을 판매하고, 주문은 주문한 상품의 개수를 기록하고, 결제는 판매자에게 돈을 지불하는 책임을 가진다.

 

이러한 역할의 중요한 특성은 대체가 가능하다는 것이다. 우리는 같은 상품이라면 A 판매자에게 구매하든, B 판매자에게 구매하든 전혀 상관이 없다. 그저 싼 가격에 원하는 물건을 구매할 수 있으면 된다. 마찬가지로 구매한 상품이 C 택배로 오든, D 택배로 오든 집 앞까지 무사히 오기만 하면 된다.

 

협력

이렇게 만들어진 객체들은 다른 객체와 협력을 통해 문제를 해결한다. 소비자는 판매자에게 주문을 하고, 결제 시스템을 통해 결제를 하는 것도 객체들간의 협력이다. 이렇게 객체들은 다른 객체에게 요청 메시지를 보내고, 응답 메시지를 받는 방식으로 상호작용한다.

 

객체들은 다른 객체가 무슨 일을 하는지는 알지 못한다. 그저 요청을 받으면 정해진 절차에 따라 일을 수행하고, 결과를 응답할 뿐이다. 그러나 중요한 것은 객체는 자율적인 존재라는 것이다. 요청을 받더라도 객체 내부의 상태에 따라 다른 동작을 할 수 있기 때문이다. 예를 들어, 쇼핑몰에서 물건을 살 때 정상적으로 주문이 완료될 수도 있지만, 재고가 없다면 주문이 취소될 수도 있다. 이러한 판단은 판매자 객체가 내부에 저장하고 있는 재고라는 상태에 의해 결정된다.

 

정리

결론적으로, 객체지향이란 여러 객체들이 각자의 역할을 수행하며 서로 협력을 통해 문제를 해결하는 프로그래밍의 패러다임이라고 할 수 있다. 객체지향에서 중요한 것은 어떤 객체들을 정의하고, 어떻게 상호작용할 것인가이다. 이러한 객체들의 관계는 객체들의 역할과 책임에 따라 달라진다.

 

3줄 요약

  1. 객체는 역할과 책임, 협력에 의해 결정된다
  2. 역할과 책임은 각 객체가 수행해야하는 행동을 말하고, 협력은 객체들간의 요청과 응답을 통해 이루어진다
  3. 객체는 내부 상태에 따라 자율적으로 동작하는 존재이다