14. 클래스(class)
페이지정보
내용
클래스 (class)
최근의 프로그래밍 언어를 보면 객체지향(Object Orientied)이라는 말을 많이 사용한다.
객체(Object)는 프로그램에서 존재하는 독립된 개체라 생각하면 된다. 하나의 함수도 객체가 될 수 있고, GUI환경에서 Button 하나가 객체가 될 수 있다.
이러한 객체를 사용하는 이유는 재사용성이다. 한번 만들어 둔 것을 필요할 때 마다 호출하여, 다른 인수를 통해 다른 객체를 만들어 낼 수 있다.
객체를 이해하기 위해서 많이 사용하는 예를 든다면 붕어빵 틀이라고 할 수 있다. 붕어빵 틀은 고정되어 있다. 여기에 밀가루 반죽과 팥을 넣으면 팥 붕어빵이 만들어지고, 계란을 넣으면 계란 붕어빵이 만들어진다. 그 모양은 같으나 내용물이 다르다.
이렇게 한번 만들어 놓은 틀에 필요한 재료를 넣어서 입맛에 맞게 만들 수 있는 것이 객체이다.
일반적으로 프로그래밍 언어에서는 클래스로 객체를 많이 표현한다.
클래스를 좀 더 쉽게 이해하자면, 변수, 함수의 집합이라고 생각해도 된다. 좀 더 추가하여 설명하자면 클래스 내부에 선언된 함수들을 메서드(method)라고 표현한다.
용어 설명 : https://www.jbmpa.com/python_tip/8
클래스의 기본 형태
class 클래스 이름: def __init__(self, 매개변수) self.변수 메서드(self, 매개변수) 메서드(self, 매개변수) |
클래스가 생성될 때, __init__ 메서드가 호출된다. 함수에서 매개변수(parameter)로 인자(argument)들을 넘겨주는 것처럼 클래스에 인자들을 넘기면 __init__ (양쪽에 underscore 2개씩) 메서드에서 인자들을 받아들인다.
다음의 예로 클래스를 이해해보자.
class Book: a = Book("운명이다")
a.publisher("사람사는 세상") ainfo = a.getBook() print(ainfo)
b.publisher("노무현재단") binfo = b.getBook() print(binfo) |
책제목 : 운명이다, 출판사 : 사람사는 세상, 출판년도 : 2010, 가격 : 13500 책제목 : 바보 산을 옮기다, 출판사 : 노무현재단, 출판년도 : 2015, 가격 : 15000 |
소스 설명
class Book: def __init__(self, title): self.title = title self.price self.publisher self.year |
클래스 선언. 선언된 클래스를 호출할 때, 인자를 받아들일때 사용하는 메서드는 __init__ 이다. 언더바(__)가 두개 들어간다. 클래스 내부에 들어있는 변수와 메서드는 모두 self가 앞에 붙는다. self는 말 그대로 클래스 자기 자신을 의미한다. __init__ 메서드안에 선언된 변수는 클래스 내부 어디에서건 사용할 수 있다. self.title, self.price, self.publisher, self.year는 global 선언을 해주지 않아도 클래스 내부의 다른 메서드에서 모두 공유하여 사용할 수 있다. |
def price(self, price): self.price = price |
클래스 내부의 메서드이다. 가격을 입력하는 메서드이다. 클래스 내부에서 클래스 메서드를 사용하기 위해서는 self.메서드 의 형태로 사용한다. 클래스 외부에서 클래스 메서드를 사용하기 위해서는 클래스객체.메서드 의 형태로 사용한다. |
def getBook(self): bookinfo = "책제목 : " + self.title + ", 출판사 : " + self.publisher + ", 출판년도 : " + self.year + ", 가격 : " + self.price return bookinfo |
클래스에서 저장된 값들을 출력해주는 메서드이다. 클래스 내부 변수에 저장된 값들을 모두 사용할 수 있다. return을 통해 결과를 반환한다. |
a = Book("운명이다") b = Book("바보 산을 옮기다") |
클래스 객체 호출. a = Book("운명이다")의 의미는 위에서 만들어 놓은 Book이라는 클래스를 불러들인다. 다만 Book 클래스를 불러들일 때(호출할때, 만들어낼 때), 책 제목은 "운명이다"라고 저장한다. 이렇게 만들어 낸 책은 a라는 객체로 저장한다.
b = Book("바보 산을 옮기다"의 의미도 위와 마찬가지다. 하지만 생성한 Book 클래스는 b라는 객체로 저장되었다.
a와 b는 같은 클래스로 만들어진 객체지만 둘은 서로 다른 독립된 객체이다. 둘 사이의 변수들은 공유되지 않고 완전히 독립적이다. |
a.publisher("사람사는 세상") ainfo = a.getBook() print(ainfo) |
Book 클래스로 만든 a라는 객체에 내부 메서드를 이용하여 각 정보들을 입력한다. 클래스 내부 메서드는 클래스객체.메서드 형태로 사용한다.
그리고 getBook() 메서드를 통해 모든 정보를 받아서 출력한다. |
클래스는 같은 내용을 반복적으로 사용하되, 그 내용이 독립적인 것을 만들어 낼 때 유용하게 사용할 수 있다.
물론 클래스가 프로그래밍을 할 때 필수적으로 필요한 것은 아니다. 최근에는 다시 객체지향이 아니라 함수지향적으로 코딩하는 사람들도 많다.
프로그램의 성격이나 용도에 맞게 필요한 것들을 만들어서 사용하면 된다.