파이썬 하루 하나씩 배우기: 생성자 __init__ 완전 이해하기
“__init__가 뭐예요?” 파이썬 입문자들이 가장 많이 묻는 질문 중 하나입니다.
눈앞에 있는 코드를 이해 못 하고 벙찐 적 있다면, 오늘 이 글이 그 안개를 걷어줄지도 모릅니다.
이 글은 파이썬 클래스의 핵심 구조 중 하나인 생성자 메서드 __init__의 개념, 문법, 활용 사례를
하루 10분 투자로 완전히 이해할 수 있도록 구성된 가이드입니다.
목차
1. __init__이란 무엇인가?
파이썬에서 __init__
메서드는 객체가 생성될 때 자동으로 호출되는 특별한 메서드입니다.
‘생성자(constructor)’라고 부르기도 하며, 클래스 기반 프로그래밍의 ‘입구’ 역할을 하죠.
객체가 “태어나는 순간” 어떤 기본값을 갖고 어떤 속성을 지녀야 하는지 __init__에서 결정됩니다.
사람으로 치면 ‘출생 등록서’ 같은 거예요.
2. 기본 문법과 동작 방식
요소 | 설명 |
---|---|
self | 생성된 객체 자기 자신을 가리킴 |
매개변수 | 객체 생성 시 전달될 값들 |
속성 할당 | 객체의 내부 상태 정의 (예: self.name = name) |
문법적으로는 어렵지 않지만, self가 정확히 무엇을 가리키는지 모르면 헷갈리기 쉽습니다.
결론부터 말하자면, self는 “현재 만들어지고 있는 그 객체 자신”입니다.
3. 실전 예제: 사람 클래스 만들기
직접 코드를 써보는 게 가장 빠릅니다. 사람(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__ 활용하기
자식 클래스가 부모 클래스를 상속받을 때 __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()로 부모 초기화를 반드시 호출하세요.
✏ 실전 연습문제
- 이름과 이메일을 속성으로 갖는 User 클래스를 만들어 보세요.
- 상속을 사용해 Student 클래스를 만들고, 학번 속성을 추가해보세요.
- __init__ 안에서 조건문을 이용해 값 검증을 넣어보세요.
당신의 손가락이 직접 타이핑해야 진짜 내 것이 됩니다. 지금 바로 테스트해보세요.
7. 사용자 실전 후기 & 초보자를 위한 꿀팁
“처음엔 self가 왜 필요한지 몰랐어요. 그냥 다 오류만 뜨고… 근데 __init__ 개념을 알고 나니 클래스가 정말 살아있는 구조라는 게 느껴졌어요.”
– 비전공자 출신 데이터 분석가 지망생 이민우 님
많은 초보자들이 __init__
에서 막히는 이유는 바로 ‘클래스와 인스턴스의 관계’를 감으로 못 잡기 때문입니다.
그걸 넘는 순간, 객체지향의 문이 활짝 열리죠.
✔ 실전 꿀팁 요약
- “__init__은 생성 시 자동 호출된다”는 사실을 항상 기억하세요.
- 속성 이름은
self.속성명
으로 반드시 저장해야 합니다. - 상속 구조라면
super().__init__()
은 필수입니다! - 기본값을 주려면
def __init__(self, name="홍길동")
처럼 작성하세요. - 코드보다 개념을 먼저 이해하면 디버깅도 쉬워집니다.
“언제부터인지 몰랐지만, 클래스가 겁나게 무서웠다.”
그 감정은 이해가 아니라 관계 맺기에 실패했기 때문일지도 모릅니다.
“모든 객체는 생겨나는 순간을 기억한다. __init__은 그 기억의 시작점이다.”
8. 자주 묻는 질문 (FAQ)
9. 참고 이미지 & 외부 자료
이미지와 참고 링크를 통해 __init__
의 구조를 시각적으로 더 명확히 이해해 보세요. 복잡하게 느껴졌던 생성자의 개념이 한눈에 정리됩니다.
🔗 외부 학습 링크 모음
- 📘 GeeksForGeeks – __init__ in Python
기초 문법과 고급 활용 예제까지 폭넓게 설명한 글
- 🎥 YouTube – Python OOP Crash Course
파이썬 클래스와 생성자에 대한 시각 강의 영상 (Corey Schafer)
- 📄 Python 공식문서 – 데이터 모델: __init__
공식 문서에서 설명하는 생성자 메커니즘과 스펙
10. 마무리: 생성자를 이해하는 건 객체를 이해하는 첫걸음입니다
파이썬 클래스는 결국 ‘설계도’이고, __init__
는 그 설계도를 실행하는 시동 버튼입니다.
시작은 간단하지만, 그 철학은 깊습니다.
오늘 공부한 내용을 스스로 설명할 수 있다면, 객체지향 문법의 문 앞까지 도달한 것입니다.
이제 주석 달린 예제와 연습 문제를 직접 풀어보면서 진짜 내 코드로 체화해 보세요.
“공부는 기억이 아니라, 연결이다.”
당신의 개념이 하나씩 연결되길 바랍니다.
HANSORI.AI_Blog Labs에서 더 알아보기
구독을 신청하면 최신 게시물을 이메일로 받아볼 수 있습니다.