Skip to content

Latest commit

 

History

History
122 lines (99 loc) · 7.04 KB

python_class.md

File metadata and controls

122 lines (99 loc) · 7.04 KB

파이썬 : 클래스

해당 문서를 통해 파이썬의 클래스에 대해 알아봅시다.

0. 객체지향이란?

객체지향 프로그래밍은 컴퓨터 프로그래밍의 틀 중 하나로 실제 세계를 모델링하여 문제를 풀어나가는 방식입니다.
만들고자 하는 프로그램 안에서 필요한 객체들이 무엇인지 정의하고, 객체들간의 상호작용을 정리해 개발합니다.
객체를 사용하여 프로그래밍을 하면 코드의 중복을 줄일 수 있고 유지보수가 쉬워지며, 다른 프로젝트에서도
재활용해서 사용할 수 있습니다. 파이썬에서 이러한 객체지향 프로그래밍을 클래스(class)를 통해서 합니다.
객체를 만들려면 설계도이 필요하겠죠?
클래스를 작성하는 것이 곧 객체의 설계도를 만드는 것이라고 할 수 있습니다. 그럼 이제 클래스가 어떻게 구성되는지, 어떤 식으로 작성하고 객체는 어떻게 생성하는지 알아보겠습니다.

1. 클래스의 구조

클래스는 기본적으로 다음과 같이 선언합니다.

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라고 나오네요.

클래스를 어떻게 제작하고 객체는 어떻게 만들어야하는지 알아보았습니다.
이제 마지막으로 상속의 개념에 대해 간단히 설명하고 클래스에 대한 이야기는 끝내도록 하겠습니다.

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)이란, 파이썬 정의와 문장들을 담고 있는 파일. 달리 말하면 함수나 변수 또는 클래스르 모아 놓은 파일
이라고 할 수 있습니다. 쉽게 누가 어떠한 기능을 구현할 수 있게 미리 만들어 놓은 파이썬 파일이라고 생각하시면 되겠습니다.
이런 모듈을 가져다 쓸 때는 fromimport를 사용합니다.

여러분이 개발을 하거나 프로젝트를 진행할 때 모든 것을 아주 밑단부터 만들 수는 없습니다.
누군가가 미리 만들어놓거나 구현한 기능을 가져다 조합하는 경우가 많을겁니다. 상황에 따라 여러 모듈을 적재적소에 활용하는
것도 꼭 필요한 능력입니다.

파이썬 내장 모듈이니 random을 이용해 어떻게 모듈을 사용하는지 알려드리겠습니다.
모듈을 사용하기 위해서는 해당 모듈을 가져올 필요가 있습니다. 앞서 말했다시피 fromimport를 사용합니다.

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하는 파일과 같은 디렉토리에 있어야 합니다.
실습삼아 해보시는 것도 나쁘진 않겠네요.

이로써 클래스와 모듈에 대한 아주 기본적인 설명이 끝났습니다.
더 궁금한 점이 있다면 검색을 하거나 질문해주시면 감사하겠습니다.