본문 바로가기
Python/객체지향 및 자료구조

__init__ 메소드

by hooni40 2021. 5. 8.
728x90
반응형

안녕하세요, 개발자를 꿈꾸는 직장인입니다.

 

오늘은 __init__함수를 알아보려 합니다.

init 함수가 왜 필요한지에 대해 먼저 살펴보겠습니다.

 

인스턴스 변수는 항상 사용 전에 미리 설정해야 합니다.

예를 먼저 살펴보겠습니다. 

 

class User:
  pass

user1 = User()
user1.name = "Hoon"
user1.email = "hoon@naver.com"
user1.password = "123"

 

 

user1을 인스턴스로 만든 후에 name, email, password와 같은 변수들을 따로 설정을 해줘야 합니다!

위와 같이 코드를 짜게 되면 길이가 너무 길어지는데요, 인스턴스 변수 전부를 한 번에 설정할 수 있는 인스턴스 메소드를 한번 설정해 보겠습니다.

 

위의 예를 initialize라는 함수를 만들어 한번에 나타내 보겠습니다.

initialize의 파라미터로는 첫 번째로는 메소드를 호출하는 인스턴스가 자동으로 전달되는 self가 되고 다음부터 순서대로 나머지 name, email, password를 적습니다. 그러므로 def __init__(self, name, email, password): 가됩니다.

 

메소드 내부는 어떻게 될까요? 내부에서는 파라미터 self를 가지고 인스턴스 변수를 설정하게 됩니다. 

이전 인스턴스 메소드/변수 글에서 나왔듯이 인스턴스가 self로 넘어오게 됩니다. 

 

user1이 인스턴스라고 가정하면 self.name = nameuser1.name = name이 되게 됩니다! 같은 방식으로 email, password도 동일하게 설정하게 되면 아래 코드와 같이 적을 수 있습니다.

 

class User:
  def initialize(self, name, email, password):
    self.name = name
    self.email = email
    self.password = password
    
 
user1 = User()
user1.initialize("hoon", "hoon@naver.com", "123")

 

 

결과는 동일하게 나왔는데요, 지금은 user1만 사용하여 길이 차이가 별로 안 나는 것 같지만 user가 10명까지 늘어나면 코드량이 엄청 줄어들게 됩니다! 이제 위와 같이 클래스 내부에 함수를 지정해주었다면, 

user1 = User()   # 유저를 생성하는 줄

user1.initialize("hoon","hoon@naver.com","123") #초기값을 지정하는 줄

위의 두줄만 적으면 되게 됩니다!

 

여기서 한 줄로 바꿀 수 있는 방법도 있는데요, 이것이 바로 __init__ 함수입니다!

함수 앞뒤로 "_(under bar)"가 두 개씩 있는 메소드를 magic method(special method)라고 정의합니다.

__init__인스턴스가 생성될 때 자동으로 호출이 됩니다.

사용 방법으로는 클래스 내부에 initialize 대신 __init__을 사용하고, 인스턴스를 생성하는 user1 = User()의 괄호 안에 initialize괄호 안의 파라미터들을 넣어주는 것입니다.

 

class User:
  def __init__(self, name, email, password):
    self.name = name
    self.email = email
    self.password = password
    
 
user1 = User("hoon", "hoon@naver.com", "123")
user2 = User("Minhee", "min@naver.com", "12")

 

 

한 줄로 완성된 것을 확인할 수 있습니다! 어떻게 이렇게 되는지 정리해 보겠습니다.

 

user1 = User("hoon", "hoon@naver.com", "123")

① 먼저 User 인스턴스가 생성이 되고,

__init__메소드가 자동 호출이 됩니다

   -. self에는 User인스턴스가 들어가게 됩니다.

   -. 괄호 안 변수들이 오른쪽의 값으로 들어가면서 인스턴스 변수들의 초기값이 설정이 됩니다!

이렇게 두줄을 한 줄로 줄일 수 있기 때문에 보통 class에는 init 메소드를 꼭 작성해 줍니다!

728x90
반응형

'Python > 객체지향 및 자료구조' 카테고리의 다른 글

가변 타입 / 불변 타입  (0) 2021.07.04
클래스 메소드  (0) 2021.07.03
__str__ 메소드  (0) 2021.05.10
인스턴스 메소드 / 변수  (0) 2021.05.07
객체(인스턴스)/객체 지향 프로그래밍  (0) 2021.05.06

댓글