파이썬은 함수를 중심으로 돌아가는 = 순서지향 프로그래밍 / 객체지향 프로그래밍 언어에요. 그렇다면, 객체지향 프로그래밍은 뭘까요?
객체지향 프로그래밍은 곧, 클래스와 객체가 중심이 되는 프로그래밍이에요.
어라? 뭔가 이상하죠. 용어를 설명해야 하는데, 용어가 서로 꼬리를 물고 있어서 이해가 되지 않아요.
마치 철학을 설명하려면, '철학' 이라는 단어를 사용해야 하는것 처럼요.
진짜 짜증나서 프로그래밍 공부 못하겠죠? 제가 최대한 쉽게 설명해볼게요.
클래스(class)는 객체를 만들어 내는 도구에요. 객체(object)는 변수와 같이 자료를 저장하는 도구인데, 변수와 다른 점은 클래스 안에서 활동한다는 사실이에요. 기억해두십시다.
변수와 객체는 같은 말인데, 객체만 클래스 안에서 활동. 곧, 변수라는 범위에 객체가 속하는 것
좋았어요. 클래스 공부에 반은 온거에요. 시작은 반이니까요. 함수는 쉬운데, 클래스도 쉬워야해요. 프로그래밍이란, 누구나 할 수 있어야 하니까요. 하지만 우리는 나중에 알고리즘 문제들을 풀어나가기 위해 자료구조에 자주 사용되는 클래스에 익숙해져야만 해요. 아, 따지지좀 마요. 무조건 해야하니까요.
후, 더 이상은 잘 못만들겠어요. 이거 한다고 돈이 떨어지는게 아니니까. 클래스에는 3명의 학생(속성/멤버변수)가 있어요. 그리고 이 학생들은 각자 청소시간마다 정해진 동작(멤버함수, 메소드)를 실행하죠. 그럼 이러한 청소 분담표를 나눠 볼까요? 이 클래스의 이름은 아담과 이브가 있으니까 천국(heaven)이라고 지을꺼에요. 내맘이에요.
class Heaven : #클래스의 이름을 정의 했어요.
def__init__(self, todo) #'생성자 함수'라고 불리는 친구에요. 밑에서 설명할게요
self.todo = todo # 데이터 멤버 todo의 정의를 하고 초기화를 하는 과정이에요. 학생들에게 할일을 정리하기 위해 시작하는 단계라고 생각해요
*잠깐만, 생성자 함수란?
생성자 함수란, 객체가 생성될 때 마다 자연스럽게 호출되는 함수에요. 객체가 사용할 데이터를 초기화 하고 정의 하는 일을 해요. 즉 우리가 만들 클래스에서는 학생들이 할 일을 초기화하고 정의 내리는 역할을 한다고 생각하면 돼요.
'todo' 로 정의 내려진 속성은 일개 변수에 지나지 않지만, 'Heaven'이라는 클래스 안에 저장됭어 있다는 이유만으로 일반 변수와는 차이점을 가져요. 이 친구들은 self(학생 이름)에 참조할 대상들인거죠.
클래스에 우리는 이제, 생성자를 정의 내렸잖아요? 그럼 객체를 만들 차례에요. 객체를 한번 만들어볼까요? 객체를 만드는 방법은 아래와 같아요.
adam = Heaven('칠판 지우기') #아담은 칠판지우기라는 속성을 가지고 있어요
eve = Heaven('바닥 쓸기') #이브는 바닥 쓸기를 하네요
bella = Heaven('분리수거') #벨라는 분리수거를 할거에요.
우리가 만든 Heaven이라는 클래스에는 2개의 매개변수가 있어. self, 와 todo지. 이떄, 생성자를 호출하는 코드에서는 한개의 인수만 제공된 것을 주의깊게 봐야해. ('칠판 지우기')처럼. 메소드가 호출될때마다 파이썬은 어떤 학생에 대한 호출인지를 인지해야만 하는데, 이를 위해서는 매개변수중 특별하게(self)가 활용돼. 어떤 메소드가 호출되면 파이썬은 자동으로다가 'self'가 메소드를 호출한 객체를 참조 하도록 하는거지.