해당 문서를 통해 파이썬의 클래스
에 대해 알아봅시다.
객체지향 프로그래밍은 컴퓨터 프로그래밍의 틀 중 하나로 실제 세계를 모델링하여 문제를 풀어나가는 방식입니다.
만들고자 하는 프로그램 안에서 필요한 객체
들이 무엇인지 정의하고, 객체들간의 상호작용을 정리해 개발합니다.
객체를 사용하여 프로그래밍을 하면 코드의 중복을 줄일 수 있고 유지보수가 쉬워지며, 다른 프로젝트에서도
재활용해서 사용할 수 있습니다. 파이썬에서 이러한 객체지향 프로그래밍을 클래스(class)
를 통해서 합니다.
객체를 만들려면 설계도
나 틀
이 필요하겠죠?
클래스를 작성하는 것이 곧 객체의 설계도
를 만드는 것이라고 할 수 있습니다.
그럼 이제 클래스가 어떻게 구성되는지, 어떤 식으로 작성하고 객체는 어떻게 생성하는지 알아보겠습니다.
클래스는 기본적으로 다음과 같이 선언합니다.
class Book: #Book이라는 클래스 선언
total_number_of_book = 0 #클래스 변수(객체들이 공유) 여기선 생성한 책 객체의 총 수를 나타냄
def __init__(self, author, name): #생성자, init은 initialize의 앞부분
self.author = author #저자를 나타낼 author 변수
self.name = name #책의 이름을 나타낼 name 변수
Book.total_number_of_book += 1 #책의 수를 증가
def info(self): # 책의 정보를 나타낼 메소드(일단 클래스의 함수를 메소드라 생각하자)
print('저자:{}, 이름:{} '.format(self.author, self.name))
책을 표현한 클래스의 예시를 적어보았습니다.
클래스는 객체에 상관없이 같은 클래스라면 그 값을 공유하는 '클래스변수'와 객체(인스턴스)마다 다른 '인스턴스 변수',
그리고 클래스의 함수인 메소드
로 이루어져 있습니다.
인스턴스 변수는 보통 객체가 만들어질 때 마다 자동으로 호출되는 메소드인 생성자
를 이용해 선언해줍니다.
생성자
처럼 특수한 용도를 가지는 메소드는 __
가 붙습니다.
예시에서는 책 인스턴스를 생성할 때 책의 저자와 이름을 지정하도록 했습니다. 그리고 별도의 info
메소드를 만들어
책의 정보를 볼 수 있게 했습니다.
알아가는 단계이니 self
는 간단히 객체 자신을 뜻한다고 생각하시면 되겠습니다.
실제로 객체를 생성하고 메소드를 부르는 법은 다음과 같습니다.
Book_1 = Book('모두의 딥러닝','조태호') #책 1 생성
Book_2 = Book('힐빌리의 노래','J.D.밴스') #책 2 생성
Book_1.info()
#저자:모두의 딥러닝 , 이름:조태호
Book_2.info()
#저자:힐빌리의 노래 , 이름:J.D.밴스
print(Book.total_number_of_book)
#2
객체를 생성할 때에는 '클래스의 이름()'과 같이 적으시면 됩니다.
위의 예시에서는 Book_1과 Book_2 객체를 생성하고 작성한 info 메소드를 이용해 책의 정보를 표현해보았습니다.
만들어 놓은 total_number_of_book 클래스 변수를 print 하니 2라고 나오네요.
클래스를 어떻게 제작하고 객체는 어떻게 만들어야하는지 알아보았습니다.
이제 마지막으로 상속
의 개념에 대해 간단히 설명하고 클래스에 대한 이야기는 끝내도록 하겠습니다.
클래스는 자기 변수나 메소드를 다른 클래스에 물려줄 수 있습니다.
현실세계에서 부모님으로부터 유산을 상속받는 것과 같다고 생각하시면 될 것 같습니다.
프로그래밍 세계에서도 변수나 메소드를 물려주는 클래스를 부모 클래스
, 상속받는 클래스를 자식 클래스
라고 합니다.
자식 클래스는 부모 클래스로부터 물려받은 변수와 메소드를 그대로 사용할 수 있게 됩니다.
앞서 예시로 만들었던 Book 클래스를 상속해 보겠습니다.
class Dictionary(Book):
pass
Dict_1 = Dictionary('해달사전', '최강민')
Dict_1.info()
#저자:해달사전 , 이름:최강민
print(Book.total_number_of_book)
#3(위에서 Book_1과 Book_2를 만들었으므로 책은 총 3개)
책 클래스를 상속받는 사전 클래스를 만들고 안의 내용은 채우지 않았습니다.
하지만 책 클래스의 생성자와 info 메소드를 그대로 사용할 수 있으며, 심지어 클래스 변수인 total_number_of_book 또한
그대로 상속됨을 확인할 수 있었습니다.
이로써 클래스에 대한 기본적인 설명은 끝났습니다.
모듈(module)
이란, 파이썬 정의와 문장들을 담고 있는 파일. 달리 말하면 함수나 변수 또는 클래스르 모아 놓은 파일
이라고 할 수 있습니다. 쉽게 누가 어떠한 기능을 구현할 수 있게 미리 만들어 놓은 파이썬 파일이라고 생각하시면 되겠습니다.
이런 모듈을 가져다 쓸 때는 from
과 import
를 사용합니다.
여러분이 개발을 하거나 프로젝트를 진행할 때 모든 것을 아주 밑단부터 만들 수는 없습니다.
누군가가 미리 만들어놓거나 구현한 기능을 가져다 조합하는 경우가 많을겁니다. 상황에 따라 여러 모듈을 적재적소에 활용하는
것도 꼭 필요한 능력입니다.
파이썬 내장 모듈이니 random
을 이용해 어떻게 모듈을 사용하는지 알려드리겠습니다.
모듈을 사용하기 위해서는 해당 모듈을 가져올 필요가 있습니다. 앞서 말했다시피 from
과 import
를 사용합니다.
import random #random 모듈 가져오자
a = random.random() #random 모듈 안의 random 함수 사용(0에서 1사이 임의의 수를 뽑아줌)
print(a)
위와 같이 모듈을 통째로 import 하기도 하지만, 모듈 내부의 필요한 것만 가져오기도 합니다. 이 때 쓰는 것이 from
입니다.
밑에서 random
함수만을 가져와 보겠습니다.
from random import random #random 모듈의 random 함수만을 가져온다
a = random()
print(a)
정리하면 다음과 같습니다.
import 모듈
#모듈.특정기능()
from 모듈 import 특정기능
#특정기능()
다양한 기능을 가진 모듈이 존재하니 원하는 기능을 잘 찾아 활용해보시기 바랍니다.
앞서 작성한 book 클래스도 어떤 이름 파이썬 파일로 저장한다면 모듈로 import할 수 있습니다.
물론 내장 모듈이 아니니 import하는 파일과 같은 디렉토리에 있어야 합니다.
실습삼아 해보시는 것도 나쁘진 않겠네요.
이로써 클래스와 모듈에 대한 아주 기본적인 설명이 끝났습니다.
더 궁금한 점이 있다면 검색을 하거나 질문해주시면 감사하겠습니다.