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:
    def __init__(self, title):
        self.title = title
        self.price
        self.publisher
        self.year
                
    def price(self, price):
        self.price = price
    
    def publisher(self, publisher):
        self.publisher = publisher
    
    def year(self, year):
        self.year = year
        
    def getBook(self):        
        bookinfo = "책제목 : " + self.title + ", 출판사 :  " + self.publisher + ", 출판년도 :  " + self.year + ", 가격 :  " + self.price        
        return bookinfo
    
    

a = Book("운명이다")
b = Book("바보 산을 옮기다")

 

a.publisher("사람사는 세상")
a.year("2010")
a.price("13500")

ainfo = a.getBook()

print(ainfo)

 

b.publisher("노무현재단")
b.year("2015")
b.price("15000")

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("사람사는 세상")
a.year("2010")
a.price("13500")

ainfo = a.getBook()

print(ainfo)

Book 클래스로 만든 a라는 객체에 내부 메서드를 이용하여 각 정보들을 입력한다.

클래스 내부 메서드는 클래스객체.메서드 형태로 사용한다.

 

그리고 getBook() 메서드를 통해 모든 정보를 받아서 출력한다.

 


클래스는 같은 내용을 반복적으로 사용하되, 그 내용이 독립적인 것을 만들어 낼 때 유용하게 사용할 수 있다.

 

 

물론 클래스가 프로그래밍을 할 때 필수적으로 필요한 것은 아니다. 최근에는 다시 객체지향이 아니라 함수지향적으로 코딩하는 사람들도 많다.

 

프로그램의 성격이나 용도에 맞게 필요한 것들을 만들어서 사용하면 된다.

 

 

 

 

'파이썬 기초' 카테고리의 다른 글

18. Database  (0) 2020.05.16
17. 쓰레드 (Thread)  (1) 2020.05.16
16. 예외 처리  (0) 2020.05.16
15. 모듈(module)과 패키지(package), import  (0) 2020.05.16
13. 파일 읽고 쓰기  (0) 2020.05.16
12. 함수 (function) 만들기  (0) 2020.05.16
11. 반복문 - for  (0) 2020.05.16
10. 반복문 - while  (0) 2020.05.16

+ Recent posts