이전글 : 전자공학과 학생의 프로그래밍 - Udacity를 이용한 파이썬 배우기 (1)
Class?
과거에 배운 C와는 다르게 Python에선 Class가 등장합니다. class 를 만들면서 __init__를 정의하고... 뭐가 뭔질 모르겠습니다. 잠깐 개념을 다져보려 합니다. Function이나 library랑 다른게 뭐죠..?
Object Oriented Programming 이 뭐지?
Udacity 에서의 강의를 들으면서, Object Oriented Programming의 개념에 대해서 알게 됩니다. 과거 C언어를 배울때에는 말 그대로 '그냥' 코딩을 하게 되는데 전혀 새로운 개념이 등장한 것이죠. 그런데, 정확하게 뭘 의미하는지 모르겠습니다. Class를 도입하며 OOP에 대해 설명하는데, Function이랑 다른게 뭐죠?
흠... 잘 모르겠어서 나무위키 의 글을 참조하기로 합니다.
프로그램을 어떻게 설계해야 하는지에 대한 일종의 개념이자 방법론.
프로그램을 단순히 데이터와 처리 방법으로 나누는 것이 아니라, 프로그램을 수많은 '객체'라는 기본 단위로 나누고 이 객체들의 상호작용으로 서술하는 방식이다.
아하! OOP는 그 자체로 프로그래밍 언어에 속한 '기능' 이라기보단 일종의 방법론이자 철학이군요.
기존에 C를 가지고 프로그래밍 하던 시기를 생각해봅니다.
교수님이 과제로 내주신 __기능__을 구현하기 위해 그냥 코딩을 합니다. 순서대로 컴퓨터가 작동해서 어떠한 결과값을 내놓는게 중요합니다. 기능이 없다면 과제는 0점이니까요!
그러나 이렇게 코드를 짜면, 조금만 길어져도 에러를 찾기도 힘들고 코드도 어디가 뭘 하는지 알아보기 힘들어집니다.
이러한 문제를 해결하기 위한 프로그래밍 철학으로써 OOP가 등장하게 된 것 같군요.
다시한번 Class
OOP에 대해 알게되니, Class에 대해 이해가 어느정도 되는것 같습니다.

위 이미지에서처럼, Class는 정보를 가지고 있는 일종의 템플릿 역할을 합니다. 이 템플릿을 가져와 A라는 Object를 만들고 이 Object의 색은 무엇이고, 크기는 어떻고.. 하는 성질을 부여합니다. 그렇기 때문에 프로그램을 객체라는 단위로서 관리하기 용이해지는것이죠.
말로만 설명하는것 보단, 실제 예시를 가지고 설명하는게 좋을것 같네요.
Python에서 그림을 그릴 수 있는 turtle이란 녀석이 있습니다.turtle안에는 Turtle이란 클래스가 있는데, 이 클래스 안에는 그림을 그리는 함수와, 포인터에 대한 정보를 담고 있습니다.
한번 dog 라는 이름을 가진 객체를 만들어보죠.
import turtledog = turtle.Turtle() <-Turtle 이란 클래스를 받아와 dog라는 Object를 만들었습니다.dog.shape("arrow")<-dog의 포인터 모양을 "arrow"로 바꾸었습니다dog.color("black")<-dog가 그리는 선의 색을 검은색으로 바꿉니다.dog.forward(100) <- dog가 앞으로 움직여 100만큼의 길이의 선을 만듭니다.
이렇게, Turtle이란 클래스 안에는 포인터의 모양, 선의 색과 같은 정보를 가지고 있습니다. 또 앞으로 가라는 명령을 내리는 함수를 지니고 있죠.
또한 저는 dog라는 이름의 객체를 만들어 customize 했습니다.
같은방식으로 cat이라는 이름의 객체를 만들어 사용할 수 있겠죠. 이 과정에서, turtle 클래스 안에 있는 코드를 다시 쓸 필요 없이 재사용 가능하게 되었습니다. 관리가 용이해지고 코드를 보기도 쉬워졌네요.
이처럼 Class를 사용하면 생산성을 높이고, 유지보수도 쉬워집니다.