전자공학과 학생의 프로그래밍 - Class (2)
이전글 : 전자공학과 학생의 프로그래밍 - 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 turtle
dog = 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를 사용하면 생산성을 높이고, 유지보수도 쉬워집니다.
클래스 즉 객체=캡슐화 의미만 잘 이해하시면 쉬움!
각 부품을 객체화 시켜서 분리하게 되면 코딩시 자동차로 비유한다면 엔진을 별도로 A엔진, B엔진 , C엔진을 이식할 수 있고 A엔진이 C,D,E 자동차에 이식할 수 있다는 장점이 생긴다는게 큰 이점
오 알려주셔서 감사합니다 ㅎㅎ 아직 C밖에 제대로 배운게 없어서 개념이 생소한데 알려주셔서 도움되네요 ㅎㅎ
언어는 순차적으로 배우세요
파이선이 요새 많이들 배우기는 하지만 정석으로 배우는걸 추천드려요
c언어 완벽하게 배우시고 난뒤에 c++로 객체지향적 언어로 객체 개념을 잡아두시고 나서 java를 섭렵하시고나서 파이선을 하셨으면 해요.
나중에 다 필요할거임
학생이니깐 순차적으로 한번 제대로 공부해보세요
요즘은 Java나 Python 강의가 훨씬 많다보니 C계열 강의는 씨가 말랐습니다.. -_-;;
전 전자공학과이다 보니 필연적으로 코드를 실행하는 하드웨어를 생각하게 되는데, Python은 정말 이해가 안되는것 투성입니다 ㅋㅋ 용어도 조금씩 다른것 같고.. 조언해주신대로 C++한번 알아봐야겠습니다.
저는 붕어빵틀로 이해했던것 같은데 그마저도 지나보니 뭐... 그냥 그렇습니다 ^^;;
비유와 실제 대상은 완벽하게 똑같을 수는 없는것이니까요. 어쨋든 개념에 쉽게 다가가게 하는데 의의가 있다고 생각합니다 ㅎㅎ
Congratulations @sirsubk1014! You have completed some achievement on Steemit and have been rewarded with new badge(s) :
Award for the number of comments received
Click on any badge to view your own Board of Honor on SteemitBoard.
For more information about SteemitBoard, click here
If you no longer want to receive notifications, reply to this comment with the word
STOP