CS 관련 책을 빌리려 도서관에서 갔다가 바로 옆에 꽂혀있는 표지가 특이한(가운데 구멍이 뚫려있다?) 얇아보이는 책이 둥그러니 있길래 읽어보았다
책을 읽기 전 생각하는 기계 라는 제목이 흥미로웠다
책의 표지는 튜링머신? 을 형상화 하는 것 같았다
집에 돌아와 책을 펼쳐서 3장 프로그래밍 을 읽어보니 나름 아는 내용? 도 나오고 해서 흥미롭게 읽어보았다
예를 들어 재귀함수에 대한 개념을 설명할때 아동용 프로그래밍 언어 로고에서 그림을 그리는 거북을 예시로 설명하며 프로그래밍 언어로 어떻게 그림을 그릴 수 있는지에 대한? 귀여운 내용들이 있었다
여기에서 객체 지향 언어에 대한 내용도 있었다
나는 평소 Java 언어를 사용하다 보니 이 말의 의미가 무엇인지 생각해보게 되었다
"객체지향의 가장 큰 이점은 객체들이 독립적으로 지정되고 새 프로그램을 만들기 위해 결합될 수 있다는 점이다" - 대니얼 힐리스
여기서 두가지 포인트가 있다고 생각한다
1번째는 "객체들이 독립적으로 지정된다"
2번째는 "객체들이 결합될 수 있다"
이 생각을 하기 전 객체가 무엇이 될 수 있을까에 대한 고민을 해보았다
그러다가 문득 어느 책에서 보았던 글귀가 생각이 났다
"세상은 수많은 객체들로 이루어져있다"
주변에서 쉽게 볼 수 있는 보이는 물체에서 찾아보면 어떨까? 생각을 하였고 이동 장치(버스, 지하철, 자동차 등 많지만 앞으로는 쉽게 자동차라고 말하겠습니다)를 객체로 생각하게 되었다
자동차가 좋은 예시는 아닐 수 있지만 객체로 생각해본 이유는 아래와 같다
첫번째 포인트에서 "말하는 객체들이 독립적으로 지정된다" 는 각 자동차들이 독립적으로 행동함으로써 지정되었다고 생각을 했고
두번째 포인트에서 말하는 "새 프로그램을 만들기 위해 결합될 수 있다" 에서 물론 프로그램이 소프트웨어가 될 수도 있지만 프로그램이란 결국 어떠한 목표를 달성하기 위한 방법이라 생각되어 일상생활에서 접할 수 있는 사람이 만들어낸 도로 규칙, 도로의 흐름, 수요에 맞는 버스 및 지하철 공급, 개인 자동차 사용 등을 생각해보았다
이는 결국 사람의 이동을 위한 것이라는 하나의 목표를 위해 프로그램된 것이며 객체간의 결합이 잘 되었다고 생각한다
그렇다면 다시 돌아가, 대니얼 힐리스가 위 글귀를 통해 말하고자 하는것은 무엇이었을까 ?
이점이라는 것은 다른 것에 비해 좋은점 이다
다른것이 무엇이 있을까 ?
쉽게 떠올릴 수 있는 것은 절차지향 언어이다
Stranger(정말 이름이 이거다..) 님의 말을 빌려보면
객체지향 프로그래밍의 반대 개념이 절차지향이라고 오해하는 분들이 많은데 절대 반대개념이 아닙니다. 어디까지나 프로그래밍 접근 방법이 조금 상이할 뿐 정반대 개념이 아니죠. 대개 절차적 프로그래밍은 '데이터를 중심으로 함수'를 만들어 쓰는편이고, 객체지향은 '데이터와 기능(함수)들을 묶어 하나의 객체'로 만들어 씁니다. - Stranger
출처 - 객체지향과 절차적 프로그래밍
즉, 절차적 프로그래밍에 비해 객체 지향적으로 프로그래밍을 하게 되었을때의 이점은 데이터와 기능들을 묶어서 사용했을때 객체간에 잘 결합이 되어 그 시너지를 발휘할 수 있다는 의미로 해석된다
자동차들은 교통법이라는 규칙 아래 잘 결합이 되어 현재 우리의 삶에서 많은 도움이 되고 있다고 생각한다 이러한 현상 또한 사람이 잘 프로그래밍을 한 결과가 아닐까? 하는 생각으로 위 글귀에 대한 나의 생각을 마무리해보려 한다