[Python] OOP-2 . 생성자 (Constructor)
1) 생성자의 개념
- 생성자(Constructor)는 인스턴스를 생성하면 무조건 호출되는 메서드 이다.
- 인스턴스를 생성하면서, 필드값을 초기화 하는 역할을 하는 메서드 이기도 하다.
class Car:
color = ""
speed = 0
def upSpeed(self, value):
self.speed += value
def downSpeed(self, value):
self.speed -= value
def printFields(self, myCar):
print("%s의 색상 : %s, 속도 : %dkm" % (myCar, self.color, self.speed))
if __name__ =="__main__":
myCar1 = Car()
myCar2 = Car()
myCar3 = Car()
위에 Car class는 따로 생성자를 정의하지 않았는데, 이런 경우는 Python interpreter가 알아서 추가해준다.
(묵시적으로 아무런 값으로 설정되지 않은 기본 생성자를 추가해준다)
2) 생성자의 기본
- 생성자는 아래와 같은 이름을 갖는다. 언더바 ( _ ) 2개가 붙은것을 Python 에서는 reserved method라고 한다.
(프로그램 작성시, 이런 reserved된 이름을 사용해서 함수명, 변수명을 만들 수 없다)
__init__()
① 매개변수가 없는 생성자 → 기본생성자
class Car:
color = ""
speed = 0
def __init__(self):
self.color = "red"
self.speed = 0
# and then when creating instance, it calls the constructor
myCar1 = Car()
마지막 라인에, 생성자를 호출하면서 color은 red로 그리고 speed는 0으로 초기화가 이루어진다.
이렇게, 매개변수가 self 만 있는 생성자를 기본 생성자라고 한다.
Python에서 생성자의 규칙 1. 생성자명은 __init__ 으로 작성해야한다. 2. 생성자는 return 값이 없다. 3. 생성자가 여러개 존재하면 안된다. |
② 매개 변수가 있는 생성자
class Car:
color = ""
speed = 0
def __init__(self, color, speed):
self.color = color
self.speed = speed
# main part
myCar1 = Car("red", 30)
mycar2 = Car("blue", 200)
이 경우, 인스턴스를 만들 때 초기값을 매개변수로 받아서 초기화 한다.
단, 이 경우에는 매개변수 없이 Car instance를 생성하면 오류 발생
3) Car 클래스의 전체 코드 (생성자 추가, getter() 메서드 추가)
class Car :
name = ""
speed = 0
# 매개변수가 있는 생성자
def __init__(self, name, speed) :
self.name = name
self.speed = speed
# 아래 2개의 메서드는 getter() 메서드라고 한다.
def getName(self):
return self.name
def getSpeed(self) :
return self.speed
#변수 선언 부분
car1, car2 = None, None
#메인 코드 부분 #
car1 = Car("아우디", 0)
car2 = Car("벤츠", 30)
print("%s의 현재 속도는 것입니다." % (car1.getName(), car1.getSpeed()))
print("%s의 현재 속도는 0입니다." % (car2.getName(), car2.getSpeed()))
OOP에서 캡슐화라는 개념이 존재하는데, class의 filed를 위부로 노출시키는 것을 방지하는 것을 의미한다.
setter() method와 getter() method가 있는데, 보통 getter() 만 주로 쓰인다.
(최소한 필드의 값을 읽어야 연계된 프로그램에서 그 값을 활용가능하기 떄문)
비유하자면, 캡슐안에 Variables과 Method가 들어있고, 캡슐 껍질에 getter() 가 존재하면서 내부 필드를 가져올 수 있다.
참고 (접근 제어자?)
#변수 앞에 _ _를 붙이면 private 성질로 클래스 내부에서만 접근 가능
class Person:
__name = ""
__age = 0
height = 180
참고2 __str__() 함수
def __str__(self):
print(self.__name)
print(self.age)
print(self.height)
print(self.weight)
print(self.address)
# __str__() method는 맴버변수의 값을 간단하게 확인하고자 할 때 주로 사용한다.
# JAVA의 toString() method와 유사
출처 : 파이썬(Python) 기초부터 실무까지 part.4