Python에서 __init__과 self의 역할

2024. 11. 17. 13:30·Category/Python
728x90

Python에서 __init__과 self는 클래스(class)와 관련된 핵심 개념입니다. 이를 이해하면 Python의 객체 지향 프로그래밍(OOP)을 잘 다룰 수 있습니다. 

__init__ 메서드란?

  1. 클래스의 생성자(Constructor):
    • 클래스가 새로운 객체를 생성할 때 자동으로 호출되는 메서드입니다.
    • 객체의 초기 상태를 설정하는 데 사용됩니다.
  2. 사용 예:
    • 객체를 생성할 때 전달받은 데이터를 초기화하거나, 필요한 변수들을 설정합니다.
class Stack:
    def __init__(self):
        # 스택 초기화
        self.stack = []

# 객체 생성
s = Stack()
print(s.stack)  # 빈 리스트 출력: []

self란?

  1. 현재 객체(instance)를 나타냄:
    • 클래스 내부의 메서드가 호출될 때, 해당 메서드가 어떤 객체에 대해 호출되었는지 알려줍니다.
    • 객체 자신의 변수나 메서드에 접근하기 위해 사용됩니다.
  2. 필수적으로 첫 번째 매개변수로 선언:
    • 클래스의 메서드는 첫 번째 매개변수로 self를 반드시 받아야 합니다.
    • Python은 메서드 호출 시, 호출한 객체를 자동으로 self에 전달합니다.
  3. 사용 예:
    • 클래스 내부에서 변수를 저장하거나 메서드 호출 시 사용합니다.
class Stack:
    def __init__(self):
        self.stack = []  # self.stack: 현재 객체의 스택 리스트

    def push(self, value):
        self.stack.append(value)  # 현재 객체의 stack에 값 추가

    def pop(self):
        return self.stack.pop()  # 현재 객체의 stack에서 값 제거

# 객체 생성 및 사용
s = Stack()
s.push(10)
s.push(20)
print(s.pop())  # 20

__init__과 self의 관계

  1. __init__에서 self 사용:
    • __init__ 메서드는 객체가 생성될 때 호출되므로, 객체 자신을 나타내는 self를 사용해 초기화 작업을 합니다.
  2. self는 객체를 구분:
    • 동일한 클래스에서 생성된 여러 객체가 있을 때, 각 객체의 데이터를 독립적으로 관리합니다.
class Stack:
    def __init__(self):
        self.stack = []  # 각 객체마다 stack을 독립적으로 가짐

s1 = Stack()
s2 = Stack()

s1.stack.append(10)
print(s1.stack)  # [10]
print(s2.stack)  # [] (독립적임)

스택 구현 예제: __init__과 self 포함

class Stack:
    def __init__(self):
        # 스택을 빈 리스트로 초기화
        self.stack = []

    def push(self, value):
        # 스택에 값 추가
        self.stack.append(value)

    def pop(self):
        # 스택에서 값 제거 및 반환
        if self.is_empty():
            return None  # 비어있으면 None 반환
        return self.stack.pop()

    def peek(self):
        # 스택의 최상단 값 확인
        if self.is_empty():
            return None
        return self.stack[-1]

    def is_empty(self):
        # 스택이 비어 있는지 확인
        return len(self.stack) == 0


# 스택 사용 예제
s = Stack()
s.push(1)
s.push(2)
print(s.peek())  # 2
print(s.pop())   # 2
print(s.is_empty())  # False
print(s.pop())   # 1
print(s.is_empty())  # True

간단한 __init__과 self 요약

  1. __init__:
    • 객체가 생성될 때 자동으로 호출됩니다.
    • 객체의 초기 상태를 설정하는 역할.
  2. self:
    • 메서드가 호출된 객체 자신을 참조합니다.
    • 객체의 변수나 메서드에 접근하기 위해 사용.

이해를 돕는 비유

  • 클래스는 설계도이고, 객체는 그 설계도로 만든 제품입니다.
  • __init__은 설계도를 바탕으로 제품을 만들 때, 초기 세팅을 하는 과정입니다.
  • self는 현재 만들고 있는 제품을 가리킵니다.
class Phone:
    def __init__(self, brand, model):
        self.brand = brand  # 현재 객체의 브랜드 저장
        self.model = model  # 현재 객체의 모델 저장

# 객체 생성
p1 = Phone("Apple", "iPhone 14")
p2 = Phone("Samsung", "Galaxy S23")

print(p1.brand, p1.model)  # Apple iPhone 14
print(p2.brand, p2.model)  # Samsung Galaxy S23

정리

  • __init__은 객체를 생성할 때 초기 설정을 담당.
  • self는 메서드 내부에서 객체 자신을 가리킴.
  • 이 둘은 클래스의 데이터를 관리하고, 각 객체를 독립적으로 다룰 수 있도록 합니다.
728x90

'Category > Python' 카테고리의 다른 글

파이썬 정렬 함수 sort()와 sorted() 차이점  (0) 2024.11.18
Python의 itertools 모듈에서 제공하는 주요 함수 정리  (0) 2024.11.18
zip 함수란?  (0) 2024.11.16
SQLAlchemy란?  (2) 2024.09.18
Python 가상 환경이란?  (1) 2024.09.16
'Category/Python' 카테고리의 다른 글
  • 파이썬 정렬 함수 sort()와 sorted() 차이점
  • Python의 itertools 모듈에서 제공하는 주요 함수 정리
  • zip 함수란?
  • SQLAlchemy란?
Corinee
Corinee
  • Corinee
    Coding Note
    Corinee
  • 전체
    오늘
    어제
    • 분류 전체보기 (361) N
      • Category (354)
        • Algorithm (7)
        • SQL (2)
        • Java (4)
        • C (9)
        • React (7)
        • JavaScript (9)
        • CSS (2)
        • Node (1)
        • SpringBoot (26)
        • Database (3)
        • Network (1)
        • Django (6)
        • Python (22)
        • Flask (4)
        • iOS (25)
        • Swift (4)
        • Flutter (11)
        • Dart (3)
        • Git (1)
        • Firebase (1)
        • Gof (1)
        • 정보처리기사 (112)
        • AI (5)
        • NestJs (4)
        • Docker (1)
        • 사이드 프로젝트 (1)
        • Note (80)
        • Socket (1)
        • 개인 정보 처리 방침 (1)
        • 면접 (0)
        • Vue.js (0)
      • Archive (2) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    ajax (asynchronous javascript and xml)
    counter
    chrome extension 자동 배포
    defaultdict
    named export vs default export
    public vs assets
    프로세스 강제 종료
    useEffect
    jackson 라이브러리
    intellij 콘솔 한글 깨짐
    Collections
    react
    쉽게 풀어쓴 C언어 Express
    원시값(primitive)
    중첩 함수(nested function)
    math.h
    styled-components
    x.y.z (메이저.마이너.패치)
    semver)
    json.parse(json.stringify())
    Jest
    소프트웨어 버전 관리
    stdlib.h
    mcp server
    core web vitals
    시맨틱 버전(semantic versioning
    react router
    structuredclone()
    inp
    mermaid-cli
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Corinee
Python에서 __init__과 self의 역할
상단으로

티스토리툴바