IT/파이썬 기초

[파이썬 기초] class, 생성자, 멤버변수, 메소드 정리

Daniel_5 2023. 7. 8. 10:21
반응형

안녕하세요. 다니엘입니다. 

이번에는 파이썬 class와 생성자, 메소드, 멤버변수까지 정리해 보도록 하겠습니다. 

저는 기존에 java를 배운 경험이 있어서 class에 대한 개념이 있지만 

처음 접하시는 분들은 많이 생소하실것 같아요. 

예시를 들어 class가 필요한 이유에 대하여 설명드리도록 하겠습니다.

예제와 코드는 나도코딩 유튜브 강의에서 참조하였습니다. 항상 감사드립니다. 


1) class가 필요한 이유

게임을 예시로 들어보자.

붕어빵 굽기 게임에 대하여 코딩을 해보자면 

붕어빵 하나하나의 객체를 코딩 할 때 

name : 붕어빵

price : 300원

ingredent : 팥 

print("{} 붕어빵이 찍혀 나왔습니다. ".format(name)

print("가격 {0}, 붕어빵 속재료 {1}" . format(price, ingredent))

이렇게 코딩을 할 수 있다. 

만약 붕어빵 굽기 게임에서 붕어빵을 100개 만든다고 한다면 ?

100 개를 전부 위의 코드를 사용해야한다. -> 코딩 라이닝 굉장히 늘어나고 비효율 적 


이와 같은 상황에서 유용하게 쓰이는것이 바로 class 이다. 

class 는 보통 붕어빵 틀, 벽돌 틀에 비유가 된다. 

class를 선언함으로써 붕어빵을 직접 손으로 빚어서 굽는게 아니고, 벽돌을 직접 손으로 빚는게 아니고 

단순히 붕어빵 틀에 반죽을 넣고, 벽돌 틀에 시멘트를 붓듯이 간단한 작업만으로 붕어빵, 벽돌을 쉽게 만들 수 있게 해준다. 

 

2) class 사용법

__init__ 함수는 생성자라고 불리는데 이후에 설명 하겠습니다.

 

이런식으로  class를 정의하고 객체를 class를 통하여 만들게 되면 코드를 재사용할 수 있게 되어

코드의 총량이 매우 줄어들 뿐만 아니라 코딩하기에도 매우 편리해 진다.

참고) class로 부터 만들어지는것 --> 객체 or 인스턴스 라고 불림. 

 

3) 생성자 __init__

만들어 지는 객체를 초기화시켜주는 함수 

객체명 = Class명('변수1','변수2','변수3')

이런 식으로 써주면 함수 안에 넘겨주는 변수들의 값으로 생성되는 객체가 초기화됨

예) 붕어빵을 만들 때 붕어빵 생성자 함수를 호출하게 되는데 이때 '붕어빵', '500원', '팥' 이렇게 넘겨주는 것

주의) 객체를 만들 때는 __init__ 함수에 self를 제외한 변수 개수만큼을 넘겨줘야지 만들 수 있다. 

 

4) 멤버 변수 

클래스 안에 self.name, self.hp, self.damage 와같이 클래스 내부에 정의된 변수 

멤버 변수를 외부에서 쓰려면 객체 다음에 .을 찍어서 호출해야 한다.

 

파이썬에서는 외부에서 변수를 추가하는 것이 가능하다. 

 

외부에서 붕어빵 사이즈를 정의하고 적용이 되었는지 if문을 통하여 확인해 보았다. 

 

4) 메소드

메소드란 클래스안에 정의되는 함수. 메소드안에는 무조건 self가 들어간다. 

메소드는 당연한 얘기지만 클래스안에 호출되기 때문에 

클래스를 이용하여 생성되는 객체에서만 호출이 가능하다. 

클래스란 어떤 대상의 특징과 기능들을 모두 모아놓은 틀 이기 때문에 

그 클래스로 호출되는 객체들만이 해당 클래스의 모든 변수들과 메소드를 이용할 수 있음.

클래스 정의
붕어빵 객체 생성 및 메소드 호출
생성 및 메소드 호출 결과

 

참고) self를 쓰는 이유 ?

객체를 생성할 때 생성자에서도 self가 이용되고, 메소드에서도 self가 이용된다. 

self는 class 내부에서 정의될 때는 적어주지만 호출할 때는 self를 빼고 호출하게 된다. 

아래의 예를 보면 생성자 __init__에는 self를 포함한 4개의 매개변수가 정의되어 있고

메소드 turnover에도 self가 매개변수로 들어간다.

하지만 호출할 때는 모두 self를 빼고 호출한다. 

 

클래스 내부에서 self를 정의해 주는 이유

객체들이 가진 변수, 메소드를 구분해 주기 위하여

Bungbbang 클래스를 정의하고 bung1, bung2, bung3 등의 객체를 Bungbbang 클래스를 통하여 생성하였다. 

bung1은 bung1만의 이름,가격,재료, 메소드를 가지게 되고 bung2, bung3도 마찬가지로 가지게 된다. 

bung3.turnover() 구문에는 사실 tunrover에 매개변수를 넣는 것 같지 않지만 turnover라는 메소드를 호출할때 

자동으로 bung3 객체의 주소값을 turnover 함수에 넘겨주어 관련된 메소드를 호출할 수 있음. 

 

반응형