-
1. 객체가 뭡니까?JAVA & Kotlin/객체지향 프로그래밍(OOP) 2023. 7. 15. 21:05
이 글은 객체지향 프로그래밍이라는 카테고리에 있는 글을 차례대로 봐야지 이해하기 편할것입니다.
"만약 여러분에게 객체지향 프로그래밍에서 객체란 정확히 뭡니까?"라는 질문을 듣는다면 어떻게 대답할건가요?
먼저 검색이나 대부분 자바 책에서 정의한 내용을 보도록하죠.
"존재하는 사물 혹은 개념, 논리와 같은 무형적인 것들도 객체라 정의할 수 있다"
이렇게 대답한다면 그 사람은 책보고 그냥 외운거라고 저는 생각합니다. (잘못된거라고 말하는게 아니다)
제가 이해하고 공부한 내용을 토대로 이 글을 읽는 사람이 조금이라도 객체지향을 이해 하기에 도움이 되기를 바랍니다.
잘못된 점이나 같이 생각해볼 주제가 있다면 댓글 또는 이메일로 문의주시면 감사하겠습니다.
'객체'
컴퓨터로 이 현실 세계를 어떻게 표현해야할지를 생각해봅시다.
동물이면 이빨의 크기, 나이, 울음소리, 먹이의 종류 등의 특징이 있을거고, 컴퓨터라면 CPU, RAM, SSD, 운영체제 등이 무슨 제품이고 어느 정도의 스펙을 가지고 있는지에 대한 특징들이 존재합니다.
이렇게 말로는 뭐가 있고 뭐를 하고 등을 설명할 수 있는데 컴퓨터에게는 어떻게 해줘야 우리가 편하게 코딩하면서 작동도 잘되도록 할 수 있을까?
이에 해당되는 해답을 주기위해 여러 컴퓨터 학자들이 모여서 만들어낸 개념이 객체라는 개념입니다.
"현실 세계의 존재하는 모든 것들을 객체라고 하자"
현실 세계에 존재하는 사람, 지구, 노트북과 같이 눈으로 확인할 수 있는것, 또는 눈으로 확인이 안되는 우정, 사랑, 슬픔 이런 모든 것들도 객체라고 할 수 있다.
그러면 이런 객체가 왜 컴퓨터로 현실 세계를 표현하기 적합할까? 객체에는 어떤 요소들이 있는지부터 확인하고 설명해보자.
'Abstraction (추상화)'
예를 들어보자, 사람이라는 객체가 있을 때 사람은 키가 몇이고, 몸무게가 몇이고, 나이가 몇인지에 대한 상태(status)가 존재한다.
또, '걸어간다', '생각한다', '밥먹는다'와 같은 행위(Behavior)가 존재한다.
이렇게 객체의 상태가 어떤게 있고, 행위는 무엇이 있는지를 생각하는 과정을 우리는 추상화(Abstraction)라고 한다.
이런 추상화 과정은 사람마다 다르게 생각할 수 있다. 그게 무슨 말이냐면 A는 사람이라는 객체가 학교라는 기준으로 생각한다면 A는
추상화 과정에서 사람이라는 객체를 학생의 관점으로 볼 것이고, B는 사람이라는 객체가 군대라는 기준으로 생각한다면 B는 추상화 과정에서 사람이라는 객체를 군인의 관점으로 볼 것이다.
이렇게 관점이 달라진다면 상태와 행위가 다르게 생각될 수 있다. (A는 상태로 학번을 생각할 수 있고, B는 상태로 군번을 생각할 수 있다.)
그렇기에 추상화 과정은 정확한 기준이 정해져야만 상태와 행위가 결정될 수 있다. (기준이 정해진다해도 사람마다 관점과 생각이 다르기에 서로가 다른 상태와 행위가 존재할 수 있음)
"이렇게 생각한 상태와 행위는 현실 세계를 표현하기에 너무 적합하지 않은가?"
이 질문에 대해 제가 설득해보겠다. 사람이 피로라는 상태가 존재하는데 만약 "공부한다"라는 행위를 하면 피로라는 상태가 증가할 것이고, "잠을 잔다"라는 행위를 하면 피로라는 상태가 감소할 것이다. 이렇듯 현실 세계에서 하는 행위, 그 행위로 인한 상태 변화로 표현이 가능하다. (물론 상태가 없는 객체도 있고, 행위가 없는 객체도 있지만 그것은 나중에 생각하도록 하자)
'Ojbect Modeling(객체 모델링)'
자 이제 현실 세계에 있는 무언가를 추상화 과정을 통해서 특징(상태와 행위)들을 정리하여 UML or Diagram으로 표현할 수 있다.
하지만 이 표현으로는 컴퓨터가 아직 이해할 수 없을 것이다.
"그냥 컴퓨터에게 사람은 피로라는 상태가 있고, 공부한다라는 행위가 있으니 이 것을 객체로 저장해."
컴퓨터가 알아들을까요? 절대 못알아듣는다. 컴퓨터는 정해진 규칙을 빠른 연산을 통해 처리하도록 설계되어있다.
그러면 정해진 규칙을 따라서 전달해야하지 않을까?
그렇다면 우리는 JAVA와 Kotlin으로 객체지향 프로그래밍을 이해하려고 하기 때문에 그 언어에 맞는 규칙, 즉 문법을 알아야 한다.
그 keyword는 우리가 객체지향을 배우면 나오는 'class'이다.
우리가 추상화 과정을 통해서 UML or Diagram으로 표현한 객체를 class라는 키워드로 컴퓨터가 알아들을 수 있도록 정의하는 것을 우리는 객체 모델링(Object Modeling)이라고 한다.
다음 장에는 현실 세계의 무언가를 추상화 과정을 통해 객체의 상태 및 행위를 구상하고 객체 모델링하는 과정을 통해 상태와 행위가 어떻게 컴퓨터에게 전달되는지에 대해서 알아보도록 하자.
// 객체지향은 우리는 이미 다 알고있다. 왜? 우리가 살고 있는 세상을 그대로 표현했기 때문에...