데이터 과학 유망주의 매일 글쓰기 — 73일차
프로그램을 객체화하기
# 클래스, #인스턴스, # 객체
오늘 한일:
오늘은 객체지향언어(Object-Oriented Programming, OOP)이라는 개념에 대해 조금 더 깊게 들어갔다. 이전 섹션에서 클래스, 객체, 인스턴스 등에 대해 배웠으나, 이번 만큼 그 의의에 대해 깊게 들어가지는 않았다.
오늘 많은 조사와 탐구 끝에 이 OOP라는 개념에 대해 내 나름대로의 철학을 가지게 되었다. 그래서 오늘은 내가 알아낸 객체지향언어의 개념에 대해 정리해 보려한다.
객체지향언어(Object Oriented Programming)
전통적인 프로그램, 특히 “C” 언어의 경우 일반적으로 절차를 나열하는 절차지향 프로그래밍(Procedural Programming) 또는 함수화하여 가독성을 높이는 함수지향적 프로그래밍(Functional Programming)이 가능했다. 그러나, 이러한 프로그래밍의 경우, 같은 기능이나 변수를 복제하는데 있어 한계가 있었다. 그래서 이러한 점을 보완하기 위해 “C++”라는 객체지향언어가 등장하였고, 그 이래로 Java, C#, 그리고 내가 쓰는 Python등의 언어가 발달했다.
그렇다면 객체지향언어는 무엇이 다른가? 객체 지향언어는 일단 클래스라는 개념이 있다는 것이 가장 큰 차이다. 이 클래스는 프로그램의 전체적인 틀을 잡아주고, 그 안에서 내가 원하는 함수들을 정의할 수 있다. 만약, 특정한 함수가 이전 함수와 비슷한 기능을 하거나 같은 변수를 다르게 사용해야할 필요가 있다면, 얼마든지 각 함수에서 처음 선언된 변수를 가져와 사용할 수 있다.
이러한 클래스를 정의해 놓고 나면, 만약 내가 여러개의 다른 계산기 프로그램을 만들어야 할때, 이 클래스를 인스턴스화 (calculator_1 = Calculator(1, 1), calculator_2 = Calculator(1, 2), …) 함으로써 여러개의 다른 인자를 가진 계산기 프로그램을 만들어 낼 수 있다. 즉, 프로그램의 재사용을 용이하게 해 준다는 것이다. 마치, 계산기를 찍어내는 공장에서 계산기를 만들어내는 공정(클래스)을 가동하여(인스턴스화) 여러 계산기 제품(객체)들을 만들어 내는 것이라 할 수 있다.
앞으로 할일:
오늘은 “클래스가 인스턴스화되서 객체가 된다.”는 매우 간단한 진리를 제대로 배운 날이었다. 특히, 공장에서 계산기를 만들어내는 것에서 “아 이런 개념이구나!”라고 무릎을 탁 칠수 있었다. 역시 이해를 위해서는 비유만한 것이 없다. 이 비유가 정확하다는 것을 선생님께 확인했기 때문에, 적어도 내가 오늘 클래스의 개념은 제대로 배웠다는 것은 의심의 여지가 없다고 생각한다.
이번 주 과제는 주관식이며, 코딩을 한다기 보다 개념적으로 어떠한 것을 이해하고, 그 이해한 내용을 나만의 언어로 풀어보는 서술형 문제가 많았다. 컴퓨터 공학을 전공하지는 않았지만, 왠지 컴퓨터 공학을 전공하는 학생이 된 느낌이랄까? 덕분에, 작은 코드도 왜 그렇게 쓰이고, 왜 그렇게 돌아가는지에 대해 나름 논리적으로 생각하고 이해해 볼 수 있는 것 같다.
생각보다 나 스스로 각 개념을 알아보고 정리하는 것이 그렇게 쉽고 빠른 일은 아니지만, 무언가 근본적인 지식을 얻는 것 같아 그 어느 때보다 보람있고 재미있다. 이제까지 배웠던 머신 러닝, 딥러닝 등의 과정들은 내가 무엇을 하는지도 100% 이해하지 못한 채 코드를 가져와 내 입맞에 맞게 끔 짜집기하는 연습을 많이 했다. 물론 코딩을 하는게 재미있었지만, 가끔은 “내가 지금 뭘하는 거지?”라는 생각도 들었었다. 하지만, 내가 코드 하나를 짜더라도 조금 더 생각해 볼 수 있는 시간이 있다는 것, 그 안에서 돌아가는 원리를 찾아보고 이해하려 노력하면서 나만의 방식으로 정리하고 이해하는 과정이 모두 보람차다. 무엇보다도, 프로그래밍에 있어 무엇이 중요한 가치인지 고민해보고 나만의 철학을 쌓아 나갈 수 있는 연습을 하고 있다는 것이 매우 흥미롭다.
내일은 이번 주 마지막 수업 시간이다. 내일도 객체지향언어 개념을 더 배운다고 하는데, 기대가된다. 생각만큼, 다가오는 금요일 오전의 자가 점검 시간이 두렵지 만은 않다. 이번 주 대부분의 과제처럼 주관식이라면 나는 매우 자신있다. 어쩌면 아직, 폭풍우가 몰아치지 않아서 그럴지도 모르지만, 그런다고해도 즐거운 마음으로 모험을 계속할 수 있을 것 같다. 이제는 그 어떤 것 보다도 프로그래밍에 대한 철학 근육이 생기고 있으니까.