생성자 __init__ 완전 이해하기

파이썬 하루 하나씩 배우기: 생성자 __init__ 완전 이해하기

“__init__가 뭐예요?” 파이썬 입문자들이 가장 많이 묻는 질문 중 하나입니다.
눈앞에 있는 코드를 이해 못 하고 벙찐 적 있다면, 오늘 이 글이 그 안개를 걷어줄지도 모릅니다.

Thank you for reading this post, don't forget to subscribe!

이 글은 파이썬 클래스의 핵심 구조 중 하나인 생성자 메서드 __init__의 개념, 문법, 활용 사례를
하루 10분 투자로 완전히 이해할 수 있도록 구성된 가이드입니다.

1. __init__이란 무엇인가?

파이썬 init 메서드 구조

파이썬에서 __init__ 메서드는 객체가 생성될 때 자동으로 호출되는 특별한 메서드입니다.
‘생성자(constructor)’라고 부르기도 하며, 클래스 기반 프로그래밍의 ‘입구’ 역할을 하죠.

객체가 “태어나는 순간” 어떤 기본값을 갖고 어떤 속성을 지녀야 하는지 __init__에서 결정됩니다.
사람으로 치면 ‘출생 등록서’ 같은 거예요.


2. 기본 문법과 동작 방식

__init__ 구조 설명

요소설명
self생성된 객체 자기 자신을 가리킴
매개변수객체 생성 시 전달될 값들
속성 할당객체의 내부 상태 정의 (예: self.name = name)

문법적으로는 어렵지 않지만, self가 정확히 무엇을 가리키는지 모르면 헷갈리기 쉽습니다.
결론부터 말하자면, self는 “현재 만들어지고 있는 그 객체 자신”입니다.

3. 실전 예제: 사람 클래스 만들기

init 사람 클래스 예시

직접 코드를 써보는 게 가장 빠릅니다. 사람(Person)이라는 클래스를 만들고, 이름과 나이를 속성으로 가지게 해볼까요?


class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

p1 = Person("이수연", 28)
print(p1.name)  # 출력: 이수연
print(p1.age)   # 출력: 28
  • 객체를 만들면 자동으로 __init__ 호출됨
  • self는 p1이라는 객체 자체를 가리킴
  • 생성자에서 속성을 직접 초기화할 수 있음

이제 조금씩 감이 오시죠?
__init__은 클래스의 사용 방법을 정의하는 문법적 약속입니다.

4. 상속에서 __init__ 활용하기

super init 상속 구조 예시

자식 클래스가 부모 클래스를 상속받을 때 __init__은 어떻게 작동할까요?
기본적으로는 부모 클래스의 __init__을 그대로 쓸 수도 있고, 오버라이딩해서 바꿀 수도 있습니다.


class Animal:
    def __init__(self, species):
        self.species = species

class Dog(Animal):
    def __init__(self, name):
        super().__init__("Dog")  # 부모 클래스의 생성자 호출
        self.name = name

d = Dog("Mango")
print(d.species)  # 출력: Dog
print(d.name)     # 출력: Mango

여기서 핵심은 super().__init__()입니다.
자식 클래스에서 부모의 속성까지 초기화하려면, 꼭 이 코드를 호출해줘야 합니다.
안 그러면 부모 클래스의 초기화가 생략되어 오류나 이상 동작이 발생할 수 있어요.


5. 자주 하는 실수와 팁

처음 __init__을 배우는 분들이 흔히 저지르는 실수들을 모아봤습니다.
이 리스트는 피하면서 빠르게 성장해 보세요.

  • self 빠뜨리기: 메서드 정의 시 항상 첫 번째 인수로 self를 넣어야 함
  • 속성 할당 누락: 매개변수를 받은 뒤 self.속성에 반드시 저장할 것
  • super() 생략: 상속 시 부모 생성자를 꼭 호출하지 않으면 오류 발생
  • 기본값 오용: 리스트, 딕셔너리 같은 가변 객체를 기본값으로 쓰면 안 됨

6. 요약과 실전 연습문제

자, 여기까지 따라오셨다면 __init__의 존재 이유와 작동 원리는 완전히 이해하셨을 겁니다.
딱 3문장으로 요약하면 이렇게 정리할 수 있어요:

  • __init__은 객체 생성 시 자동 실행되는 메서드입니다.
  • self는 객체 자신이며, 속성 할당에 꼭 사용해야 합니다.
  • 상속 시에는 super()로 부모 초기화를 반드시 호출하세요.

✏ 실전 연습문제

  1. 이름과 이메일을 속성으로 갖는 User 클래스를 만들어 보세요.
  2. 상속을 사용해 Student 클래스를 만들고, 학번 속성을 추가해보세요.
  3. __init__ 안에서 조건문을 이용해 값 검증을 넣어보세요.

당신의 손가락이 직접 타이핑해야 진짜 내 것이 됩니다. 지금 바로 테스트해보세요.

7. 사용자 실전 후기 & 초보자를 위한 꿀팁

파이썬 실습 화면 예시

“처음엔 self가 왜 필요한지 몰랐어요. 그냥 다 오류만 뜨고… 근데 __init__ 개념을 알고 나니 클래스가 정말 살아있는 구조라는 게 느껴졌어요.”

– 비전공자 출신 데이터 분석가 지망생 이민우 님

많은 초보자들이 __init__에서 막히는 이유는 바로 ‘클래스와 인스턴스의 관계’를 감으로 못 잡기 때문입니다.
그걸 넘는 순간, 객체지향의 문이 활짝 열리죠.

✔ 실전 꿀팁 요약

  • “__init__은 생성 시 자동 호출된다”는 사실을 항상 기억하세요.
  • 속성 이름은 self.속성명으로 반드시 저장해야 합니다.
  • 상속 구조라면 super().__init__()은 필수입니다!
  • 기본값을 주려면 def __init__(self, name="홍길동")처럼 작성하세요.
  • 코드보다 개념을 먼저 이해하면 디버깅도 쉬워집니다.

“언제부터인지 몰랐지만, 클래스가 겁나게 무서웠다.”
그 감정은 이해가 아니라 관계 맺기에 실패했기 때문일지도 모릅니다.

“모든 객체는 생겨나는 순간을 기억한다. __init__은 그 기억의 시작점이다.”

8. 자주 묻는 질문 (FAQ)

__init__은 꼭 써야 하나요?
아니요, 안 써도 클래스는 생성됩니다. 하지만 객체 초기 설정이 필요할 경우에는 거의 항상 사용하게 됩니다. 생략하면 기본 생성자가 작동합니다.
self는 꼭 써야 하나요?
네. self는 생성된 객체 자신을 가리키는 고정된 약속입니다. 메서드 안에서 속성이나 다른 메서드에 접근하려면 self 없이는 불가능합니다.
__init__ 안에서 조건문을 써도 되나요?
네. 유효성 검사를 위해 많이 사용됩니다. 예를 들어 나이가 0보다 작으면 에러를 발생시키는 식으로요.
클래스에서 __init__ 외에 또 중요한 메서드는 뭐가 있나요?
__str__, __repr__, __eq__, __len__ 등 다양한 매직 메서드들이 있습니다. 각각의 역할은 다르며 객체의 표현, 비교, 길이 등과 관련되어 있어요.
여러 개의 __init__을 가질 수 있나요?
파이썬에서는 같은 이름의 메서드를 여러 개 정의할 수 없습니다. 다만, 매개변수에 기본값을 주거나 *args, **kwargs를 사용해 유연하게 처리할 수 있습니다.

9. 참고 이미지 & 외부 자료

이미지와 참고 링크를 통해 __init__의 구조를 시각적으로 더 명확히 이해해 보세요. 복잡하게 느껴졌던 생성자의 개념이 한눈에 정리됩니다.


init 구조 시각 자료

self와 생성자 설명 인포그래픽

🔗 외부 학습 링크 모음

10. 마무리: 생성자를 이해하는 건 객체를 이해하는 첫걸음입니다

파이썬 클래스는 결국 ‘설계도’이고, __init__는 그 설계도를 실행하는 시동 버튼입니다.
시작은 간단하지만, 그 철학은 깊습니다.
오늘 공부한 내용을 스스로 설명할 수 있다면, 객체지향 문법의 문 앞까지 도달한 것입니다.

이제 주석 달린 예제와 연습 문제를 직접 풀어보면서 진짜 내 코드로 체화해 보세요.
“공부는 기억이 아니라, 연결이다.”
당신의 개념이 하나씩 연결되길 바랍니다.

이 콘텐츠, 얼마나 도움되셨나요?

⭐⭐⭐⭐⭐ 5점 만점 기준으로 평가해주세요!


init 구조 요약 이미지

🧭 HANSORI.AI_Blog Labs 푸터

본 콘텐츠는 HANSORI.AI_Blog Labs 자동화 시스템을 기반으로 구성되었으며,
파이썬 입문자를 위한 “하루 하나씩” 블로그 시리즈의 일부입니다.
모든 내용은 GPT4.5 기반 최신 기술 문서를 참고하여 2025년 기준으로 작성되었습니다.

“프로그래밍은 문법이 아니라, 연결된 이해다.”
당신의 다음 한 걸음도, 저희가 함께하겠습니다.


HANSORI.AI_Blog Labs에서 더 알아보기

구독을 신청하면 최신 게시물을 이메일로 받아볼 수 있습니다.