반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART) 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

오늘은 파이썬 프로그래밍의 초보에서 벗어나기 위한 첫번째 단계로, 클래스(class)의 개념에 대해 알아보겠습니다.

 

새로운 개념을 이해할 때에는 원래 알고 있는 개념에서 덧붙이거나 비유를 통해서 이해하는 것이 효율적이라고 생각합니다.

비유를 통해 최대한 쉽게 설명해볼테니 차근차근 따라와주세요.

 


 

1. 클래스의 개념

 

클래스는 기초문법 강의에서 배운 함수의 개념과 유사하면서도 다릅니다.

 

출처. 프로그래머가 필요한 수학 (brunch)

 

함수란 아래의 그림의 빵 만드는 기계처럼 '밀가루(입력)을 받아서 의도된 프로세스를 통해 빵(출력)을 내보내는 무엇'라고 이해한다면,

클래스 빵 만드는 기계(함수) 입력과 출력(변수)의 정보를 담은 설계도입니다.

 

위의 설명만 이해하셔도 클래스의 절반은 파악하신 것이니 꼭 이해하고 넘어가셨으면 좋겠습니다.

 

 

우리는 이 설계도가 있다면 얼마든지 빵 만드는 기계를 만들 수 있는 것이죠.

또한 이 설계도를 내용을 추가하거나 변경하여 새로운 기능의 빵 만드는 기계를 만들 수 있습니다.

 

위의 내용은 다음 시간에 상속(inheritance)메소드 오버라이딩(method overriding)의 개념을 공부하며 더 자세히 다루어 보겠습니다.

 

 

2. 클래스 기초

 

설계도를 활용 하려면 도면해독법에 대한 지식이 필요하듯이 클래스를 활용하기 위한 기본 개념들이 필요합니다.

 

1) 객체

프로그래밍이 처음이시거나 C언어를 공부하셨던 분들은 객체(object)란 용어가 생소하실텐데요.

객체란 그냥 실체가 있는 무엇이라는 뜻을 있어보이게 표현한 말입니다. 현재 사용하고 계신 컴퓨터나 휴대폰, 앉아있는 의자, 혹은 나 자신 까지도 모두 객체라고 생각할 수 있습니다.

 

이 객체란 개념은 설계도만 존재하고 실체는 존재하지 않는 상태인 클래스와 엮어서 설명되곤 합니다.

여러 책에서 붕어빵 틀(클래스)과 붕어빵(객체)으로 설명합니다만 개인적으로 정확한 비유는 아니라고 생각합니다.

어떻게 보면 붕어빵 틀도 실체일테니까요.

 

2) 속성과 메소드

앞서 클래스를 빵 만드는 기계(함수)와 입력과 출력(변수)의 정보를 담은 설계도라고 설명했습니다.

지금 배울 속성(attribute)과 메소드(method)는 각각 설계도에 표시되어 있는 변수와 함수라고 이해하시면 됩니다.

 

클래스의 변수 = 속성 (attribute)

클래스의 함수 = 메소드 (method)

 

예를 들어, 현금자동인출기(ATM)를 클래스로 작성한다면,

속성으로는 계좌번호, 잔액, 인출금액, 메소드로는 입금하기, 출금하기, 이체하기 등을 만들 수 있을 것입니다.

 

3) 클래스 선언

class의 선언은 'class 클래스명:'으로 선언해줍니다.

 

만약 아래와 같이 클래스를 선언해주면 '클래스명'이라는 이름의 아무 내용도 담기지 않은 설계도가 생성된다고 생각하시면 됩니다.

마치 CAD(전자도면)을 새로 만들고 이름만 정해서 저장해준 느낌입니다.

 

class 클래스명:
	pass

 

다음으로는 클래스 안에 내용을 채워보겠습니다. 이해를 위한 코드이므로 실제로는 작동되지 않습니다.

 

class ATM:                    # 클래스 선언

    계좌번호 = "123456789"      # 속성 선언
    계좌잔액 = "30000"


    def withdraw_all(self):   # 메소드 선언

        print(self.계좌번호 + "에서" + self.계좌잔액 + "을 인출하겠습니다.")

 

우리가 돈을 뽑는 ATM 클래스를 만들어보았습니다.

 

속성으로는 계좌번호와 계좌잔액을 가지며, 메소드로는 계좌잔액을 모두 인출하는 withdraw_all 메소드를 가지는 클래스입니다.

 

여기서 self라는 생소한 개념이 보입니다. 클래스를 사용하려면 이 self에 대한 이해가 필수적입니다.

 

self란?

메소드 선언 시 사용된 self는 객체가 자기 자신을 참조하는데 사용하는 매개변수입니다.

self를 사용하면, 메소드에서 클래스에 정의된 모든 속성 및 다른 메소드에 접근할 수 있습니다.

 

파이썬에서는 메소드를 선언할 때 첫 번째 매개변수로 반드시 self를 명시하도록 하고 있으며, 메소드를 호출할 때는 self 매개변수에 아무런 인수를 전달하지 않아도 됩니다.

 

 

4) 인스턴스 생성

인스턴스란 클래스를 기반으로 생성된 객체를 가리킵니다. 그냥 객체라고 해도 되겠지만 특별히 어떤 클래스의 객체라는 것을 말해주는 느낌이랄까요. 마치 영희(객체)라는 사람이 있는데, 굳이 미영이의 딸(OO 클래스의 인스턴스)이라고 부르는 느낌이라고 생각하시면 되겠습니다. 완벽한 예는 아닌듯하지만 느낌만 가져가시면 좋겠습니다.

 

class ATM:                  # 클래스 선언

    계좌번호 = "123456789"    # 속성 선언
    계좌잔액 = "30000"


    def withdraw_all(self): # 메소드 선언

        print(self.계좌번호 + "에서" + self.계좌잔액 + "을 인출하겠습니다.")
        

Coding_ATM = ATM()          # 인스턴스 생성

print(Coding_ATM.계좌번호)    # 인스턴스의 속성 가져오기
Coding_ATM.withdraw_all()   # 인스턴스의 메소드 호출

 

위의 코드에서 방금 만들어준 ATM 클래스를 가지고 Coding_ATM이라는 객체를 생성해주었습니다.

클래스명에 소괄호( )를 붙여서 해당 클래스의 인스턴스를 생성할 수 있습니다.

 

여기서, 'Coding_ATM은 ATM의 인스턴스다'라고 말할 수 있습니다.

 

Coding_ATM.계좌번호나 Coding_ATM.withdraw_all( )과 같이 생성된 인스턴스에 닷(.) 연산자를 사용하면 해당 클래스의 속성이나 메소드를 호출할 수 있습니다.

 


오늘은 클래스의 가장 기본에 대해서 다루어보았습니다.

 

다음 시간에는 클래스에 대한 조금더 깊은 내용을 다루어보겠습니다.

 

 

반응형

+ Recent posts