Python/Glossary[용어 사전]

[ __init__ ] : 생성자, 초기화 함수란 무엇인가?

샰롯 2022. 9. 27. 18:42
시작에 앞서 본 내용은 학습 내용을 기록하기 위함이며 내용에 틀린 점이 있을 수 있으니 이점 유의 부탁드립니다.


__init__

initialize, constructor

 

생성자, 초기화자, 초기화 함수



용어 설명
가변 객체(Mutable Object) : 값이 변하더라도 메모리에 할당된 주소 값이 일정한 객체 
                                                 Ex. List, Dict,... 등

객체(Object) :
클래스에 선언된 모양 그 자체
                         클래스의 인스턴스(instance)
                         모든 인스턴스를 대표하는 포괄적인 의미

인스턴스(Instance) :
클래스가 메모리에 할당된 상태
                                   인스턴스는 객체에 포함된다.
                                   추상적인 개념과 구체적인 객체 사이의 관계에 초점을 맞출 경우에 사용
                                   원본으로부터 생성된 복제본을 의미

추후 클래스 및 객체, 인스턴스에 대해 아카이브할 예정

생성자(Initialize)
def __init__(self):
새로 생성된 클래스 인스턴스에 대해 자동으로 필요한 값, 출력 등을 초기값으로 세팅하는 역할

  • 새로 생성된 클래스 인스턴스에 필요한 값, 출력이 자동으로 실행된다. 
class foo:
    def __init__(self):
        print('안녕하세요')

var = foo()
안녕하세요

위 코드 실행 결과와 같이
__init__ 함수의 역할중 하나는 Class가 호출될 때 자동으로 실행되는 함수 이다.

  • 인자 전달
    전달받은 값으로 인스턴스 변수 초기화
class foo:
    def __init__(self, name):
        self.name = name

var = foo('F7 project')  # 인스턴스 생성 및 인자 전달

print(var.name)  # 인스턴스 변수 속성참조(attribute references)
F7 project

  • 인스턴스의 함수(메서드)에서 변수 사용
class foo:
    def __init__(self, name):
        self.name = name
        
    def hello(self):
        print(f'안녕하세요 {self.name}님')  # 인스턴스의 함수(메서드)에서 변수 사용

var = foo('F7 project')  # 인스턴스 생성 및 인자 전달

var.hello()
안녕하세요 F7 project님

초기화자, 초기화 함수라고 불리는 이유?(필자의 생각)

더보기

초기화란?

initialization



  • 초기화(initialization) : 변수 선언 초기에 지정된 값
자바, C 등과 같은 언어의 경우 변수 이름만 먼저 선언이 가능하다.
이후 변수를 사용하기 위해 반드시 값을 넣어주는 작업이 필요하며,
이를 초기 지정 값 설정, 초기화(초기값 설정)라고 한다.

  • Language : C 
    변수 초기화 예시
#include <stdio.h>
int main(void)
{
    int num;  // 변수 선언
    num = 1;  // 변수 초기화(변수 사용전 값을 넣어주는 작업)
    printf("%d", num);
    return 0
}

  • 클래스 변수 사용
리스트, 딕셔너리와 같이 가변 가능한 객체를 클래스 변수로 선언하여 공유될 때 예상치 못한 결과가 발생한다.
# Class 선언
class Foo:
    list_ = []  # 클래스 변수
        
    def add(self, var):
        self.list_.append(var)
# 인스턴스 a
a = Foo()
a.add(1)

print(a.list_)
[1]
# 인스턴스 b
b = Foo()
b.add(2)

print(b.list_)
[1, 2]

위 결과와 같이
초기화자를 사용하지 않고 클래스 변수로 빈 리스트를 선언하여 사용할 경우
하나의 리스트가 모든 Foo 인스턴스들에 공유된다.

  • 인스턴스 변수 사용
    초기화 함수를 사용한 변수 초기화
# Class 선언
class Foo:
    def __init__(self):
        self.list_ = []  # 인스턴스 변수
        
    def add(self, var):
        self.list_.append(var)
# 인스턴스 a
a = Foo()
a.add(1)

print(a.list_)
[1]
# 인스턴스 b
b = Foo()
b.add(2)

print(b.list_)
[2]

이와 같이
__init__을 통해 클래스 호출 시 자동으로 인스턴스 변수로 선언하여,
모든 인스턴스가 공용으로 수정 가능한 변수가 아닌,
각 인스턴스의 초기값으로 설정해주어 인스턴스 간 간섭이 없도록 하기 때문에,
초기화자, 초기화 함수라 명명한 것이 아닌가 추측함.

참조
 

9. Classes — Python 3.10.7 documentation

9. Classes Classes provide a means of bundling data and functionality together. Creating a new class creates a new type of object, allowing new instances of that type to be made. Each class instance can have attributes attached to it for maintaining its st

docs.python.org