컴퓨터 프로그래밍 패러다임 중 하나로,
컴퓨터 프로그램을 수많은 명령어로 이루어진 목록으로 보는 방식에서, "Objects" 객체들로 이루어져 있다고 시각을 바꾸어 파악하고자 하는 패러다임.
위키백과를 보면 역사와 시초, 그리고 많은 양의 내용들을 볼 수 있는데, 사실 모두 이해하기가 쉽지 않았다.
나는 직관적으로 정리해서 이해하기 때문에, 직역된 말들이 오히려 이해를 방해하는 느낌이다. 그래서 핵심적인 부분만 이해하려 노력했다.
'사람이 말로 표현 가능한 모든 것을 객체라 할 수 있다.'
위키백과의 말이다.
조금 더 위키백과에서 인용하면,
객체(Object) - 클래스의 인스턴스(실제로 메모리상에 할당된 것)이다. 객체는 자신 고유의 속성(attribute)을 가지며 클래스에서 정의한 행위(behavior)를 수행할 수 있다. 객체의 행위는 클래스에 정의된 행위에 대한 정의를 공유함으로써 메모리를 경제적으로 사용한다.
그래서 클래스는..?
클래스(Class) - 같은 종류(또는 문제 해결을 위한)의 집단에 속하는 속성(attribute)과 행위(behavior)를 정의한 것으로 객체지향 프로그램의 기본적인 사용자 정의 데이터형(user defined data type)이라고 할 수 있다. 클래스는 다른 클래스 또는 외부 요소와 독립적으로 디자인하여야 한다. 프로그래머는 아니지만 해결해야 할 문제가 속하는 영역에 종사하는 사람이라면 클래스를 사용할 수 있다.
더 못 알아듣겠다.
비전공자인 내가 이런 개념에 접근하기란 쉽지 않았다.
FREE CODE CAMP 에서 독학을 하기 시작했는데, 여기서 굉장히 쉽게 비유를 해준다.
객체라는 단어에 집중하지 말고, 단순히 강아지가 있다고 생각해보자.
"강아지는 다리가 4개에 꼬리가 있고, 산책을 좋아하는 동물이다."
여기서 동물을 클래스Class 라고 취급하고, 강아지를 객체Object로 바라보면 이해가 되기 시작한다.
동물 : 강아지 => Class : Object
강아지는 동물이고 동물의 기본적인 특징들을 가지고 있다. 먹고 자고 싸고, 귀엽고..?는 강아지만 ?
이게 '클래스의 인스턴스' 라는 부분을 이해시켜준다.
즉 강아지는 동물의 구체적인 사례(instance) 중 하나로서, 동물의 특징을 가지고 있다.
(이것이 나중에 속성의 상속에 연결된다.)
비교가 적절해다... 내가 FREE CODE CAMP를 좋아하는 이유다.
이러한 인식을 기반으로 아래 예를 더 보자.
객체는 속성을 가지고 행위를 수행할 수 있다고 했는데, 이 부분에 대한 이해를 해보자.
굉장히 쉽게 생각하면 된다.
'강아지는 다리가 4개다'
는 사실이 강아지 객체가 가지는 속성으로, 다리 뿐만 아니라 꼬리, 코, 등등 많은 속성을 가지고 있다. 일딴 프로그래밍에서는 '자료(객체)에 속성이 있다.'하고 넘어가자.
'강아지가 뛰어다닌다'
는 강아지 객체가 수행할 수 있는 행위이다. 마찬가지로 다른 행위도 할 수 있을 거고,
여기도 우선 프로그래밍에서 '자료가 수행 할 수 있는 행위가 있을 수 있구나' 하고 또 넘간다.
정말 단순하게 생각하면 뭔가 당연한 말인데 왜 프로그래밍에서 말하면 이해가 안될까..
다시 위키백과 객체 정의를 보면 처음보다 이해가 되기 시작한다.
사실 사전적 정의에 너무 목매일 필요없이, 그냥 '사물(객체)들이 특성을 가지고 있다고 바라보는 방식처럼 프로그래밍에 사고방식을 적용한다.' 라고 생각하면 더 편하다.
정의 자체가 패러다임이라는데....
(... 그래서 패러다임의 의미를 가져왔다.)
패러다임 : 한 시대의 사람들의 견해나 사고를 근본적으로 규정하고 있는 인식의 체계. 또는, 사물에 대한 이론적인 틀이나 체계
옛날에는 프로그래밍을 생각할 때, 수많은 컴퓨터 명령어를 써내려가는 인식이었다고 한다.( 찾아보면 다른 패러다임도 많다... )
그런데 개발 규모가 커지면서 좀 더 다른 방식의 언어를 도입해야 한다고 느꼈고, 그 과정에서 일련의 노력 끝에 생긴 것 중 하나가 객체지향프로그래밍으로
자료를 추상화하여, 속성과 행동을 가지는 하나의 객체로 바라보기 시작한 것.
이다.
이제는 아까처럼 아 그렇구나하고 넘어가는게 아니라, 어떻게 해서 OOP를 통해서 프로그래밍을 구사하는지, 다음 포스트에서 JAVASCRIPT에서 어떻게 OOP 방식의 프로그래밍을 하는지 다루어야 겠다.