컴퓨터 언어가 등장하면서 많은 언어들은 데이터와 함수만을 표현해왔다. 자동차를 예로 들어보자.
A라는 자동차와 B라는 자동차를 구성하는 부품들을 변수로 선언하려고 한다. 그럼 그림과 같아질 것이다.
이젠 자동차에게 명령을 내리는 함수를 만들어보자. 신호등이 바뀌면 모든 자동차들이 같은 명령을 받는게 당연하지만 이건 예시니까 각각의 자동차에게 명령을 내리는 신호등이 있다고 가정을 하자.
변수들과 함수들이 많이 생긴 것을 확인할 수 있다. 저렇게 이름을 붙혀주면 어떤 것을 의미하는지 알 수 있기에 편리해졌다고 생각할 수도 있다. 하지만 현실은 이렇게 보여진다.
아직은 감이 안올 수도 있다. 하지만 자동차가 5000대가 되고 신호등에는 좌회전 신호가 생기고 자동차의 모든 부품들을 변수로 만들어줘야 한다면 어떻게 될까?
이처럼 데이터와 많아질수록 변수와 함수가 끊임없이 늘어나는 문제가 생겼다. 그래서 이를 해결하기 위해 연구하던 사람들은 묶음을 만들어 놓고 사용하기 시작했다.
이렇게 하니 하나의 계층에 변수가 무한히 펼쳐지는 일도 생기지 않았고 함수도 묶음 안에 넣어버릴 수 있었다. 이런 묶음의 형식을 클래스(Class)라고 하고 클래스안에 만들어진 각각의 묶음들을 객체(Object)라고 부르기 시작했다. 그리고 이는 이후에 객체 지향 프로그래밍 언어에 기초가 된다.
객체에 대한 아이디어 이외에도 변수를 어떻게 함수로 처리할 수 있을지에 대한 문제도 해결해야 했다. 이를 바탕으로 만들어지게 된 것이 바로 절차 지향 프로그래밍이다. 절차 지향 프로그래밍은 변수를 묶음으로 만들기보다 함수로 처리하는 데에 중점을 두고 있다. 분산 환경에서 데이터 처리에 매우 효과적이기에 최근에 각광받고 있다.
객체 지향 프로그래밍과 절차 지향 프로그래밍 모두 프로그램을 어떻게 사용할지를 바탕으로 발전이 되었다. 다만 두 프로그래밍의 관점이 달랐기에 다르게 발전되었다. 이외에도 많은 관점들이 존재했지만 앞서 소개한 두 관점이 특히나 효율적이었기에 많은 주목을 받아왔다.
“Everything in Python is an object, and almost everything has attributes and methods.”
https://linux.die.net/diveintopython/html/getting_to_know_python/everything_is_an_object.html
"파이썬(Python)에서 모든 것은 객체(object)다. 그리고 대부분의 객체는 속성(attributes)과 메서드(methods)를 갖는다." 파이썬 사용자라면 한 번쯤 들어봤을 말이다. 사실 이 한 문장이 파이썬을 가장 잘 설명하고 있기도 하다. 파이썬에서는 정수, 소수, 문자열, 딕셔너리, 함수 등등 모든 것들이 객체로 이루어져 있다. 따라서 파이썬을 사용하기 위해서 객체에 대한 개념을 이해하는 것은 매우 중요하다.
파이썬 공식 사이트에서는 객체를 다음과 같이 설명하고 있다. (https://docs.python.org/3/glossary.html)
객체는 속성과 매서드를 가지고 있는 데이터이다. 객체의 속성은 변수로 구현되고 객체의 메서드는 함수로 구현된다. 변수는 쉽게 설명하자면 =
연산자를 이용해 값을 할당했을 때 그 객체에 이름을 부여하는 것이다. 함수는 값을 저장하는 변수와는 달리 명령을 저장하는 역할을 한다. 변수와 함수에 대한 내용은 다음 링크에 정리해두었다.
https://velog.io/@kkamyang/Python-1-1-%ED%95%A8%EC%88%98%EC%99%80-%EB%B3%80%EC%88%98
파이썬에서 모든 것들이 객체로 이루어져 있다고 해서 모든 프로그래밍 언어가 그런 것은 아니다! 일부만 객체인 언어도 있고 심지어는 객체가 없는 언어도 있다. 따라서 모든 것들이 객체로 이루어져 있다는 것은 그 언어의 특징 중 하나일 뿐 장점이라고 말하기에는 어렵다. 어찌됐건 지금 배우고 있는 파이썬이 대표적인 객체 지향 언어이니까 잘 써먹을 수 있도록 열심히 공부해야겠다.