정처기 감자정처기 감자
Python함수/클래스

검색

검색어를 입력해 개념, 문제, 필기를 찾습니다.

Python 클래스와 __init__

코딩Python
읽는데 13분 소요
처음 쓰인 날: 2026-02-18
마지막 수정일: 2026-09-29
조회수: —
선수학습(1개)
  • 함수의 기초

요약

Python 클래스의 기본 구조, __init__ 생성자, 인스턴스 메서드, 상속(super)까지. 정보처리기사 실기에 출제되는 클래스 관련 핵심 개념을 정리합니다.

클래스 핵심 정리

개념설명예시
class클래스 정의 키워드class Gamja:
init객체 생성 시 자동 호출되는 생성자def __init__(self, v):
self현재 인스턴스(객체)를 가리키는 매개변수self.v = v
클래스 속성클래스 자체에 속하는 속성, 모든 인스턴스가 공유class A: li = [1, 2, 3]
인스턴스 속성__init__ 안에서 self로 정의하는 속성self.name = name
인스턴스 메서드첫 인자로 self를 받아 인스턴스를 조작def add(self, x):
상속 / super부모 클래스 기능을 자식이 물려받음class B(A): super().__init__(v)

클래스란?

클래스(Class) 는 객체를 만들기 위한 설계도입니다. class 키워드로 정의하며, 속성(데이터)과 메서드(동작)를 하나로 묶습니다.

python
코드 하이라이팅 중…
점선 class Gamja 설계도에서 구현! 화살표 두 갈래가 나가 g = Gamja()와 h = Gamja()로 실선 인스턴스 Gamja g와 Gamja h가 각각 만들어지는 그림
설계도 하나로 인스턴스를 여러 개 만들 수 있으며, g와 h는 같은 설계도로 만든 서로 다른 인스턴스입니다

클래스(설계도)로 만든 실제 객체 하나하나를 인스턴스(instance) 라고 합니다. 위 코드의 g와 h는 모두 Gamja 클래스의 인스턴스입니다. 이처럼 같은 클래스로 인스턴스를 여러 개 만들 수 있습니다.

클래스 이름은 대문자로 시작하는 것이 관례입니다. Gamja() 처럼 클래스 이름 뒤에 괄호를 붙여 인스턴스를 생성합니다.

init 생성자

__init__ 은 인스턴스를 생성할 때 자동으로 호출되는 특별한 메서드입니다. 양쪽에 언더스코어 두 개(__)가 있어, double underscore를 줄인 던더(dunder) 메서드 라고도 부릅니다.

python
코드 하이라이팅 중…
Node(10) 호출 시 __init__이 자동 실행되어 self에 새 인스턴스, v에 10이 들어가고 인스턴스 n의 속성 v는 10, c는 빈 리스트로 채워지는 과정
Node(10)을 호출하면 Python이 새 인스턴스를 self로 넘겨 __init__을 자동 실행하고, 속성 v와 c가 채워진 인스턴스가 n에 연결됩니다
python
코드 하이라이팅 중…
출력
코드 하이라이팅 중…

__init__의 첫 번째 매개변수는 반드시 self 입니다. self는 생성된 인스턴스 자신을 가리키며, Python이 자동으로 전달합니다. Node(10) 을 호출할 때 self에는 새로 만들어진 인스턴스가, v에는 10이 전달됩니다.

self는 직접 전달하지 않습니다
__init__(self, v)처럼 정의해도, Node(10) 호출 시 self는 Python이 자동으로 넘겨줍니다. 사용자는 나머지 매개변수(v)만 전달하면 됩니다.

클래스 속성 vs 인스턴스 속성

클래스 속성과 인스턴스 속성은 정의 위치가 다릅니다.

python
코드 하이라이팅 중…

클래스 속성은 모든 인스턴스가 공유합니다. 인스턴스를 통해서도, 클래스 이름을 통해서도 접근할 수 있습니다.

python
코드 하이라이팅 중…
s.li는 인스턴스 s에 li가 없어 class Gamja의 클래스 속성 영역에서 찾고, Gamja.li는 클래스로 바로 들어가 두 경로가 같은 리스트 [1, 2, 3]에 도착하는 다이어그램
인스턴스에 없는 속성은 클래스에서 찾으므로 s.li와 Gamja.li는 같은 리스트 하나를 가리킵니다
출력
코드 하이라이팅 중…

인스턴스 속성은 각 인스턴스마다 별도로 존재합니다.

python
코드 하이라이팅 중…
점선 테두리의 class Node 설계도에서 a = Node(10)과 b = Node(20) 두 갈래의 구현! 화살표가 나가, 실선 테두리의 Node a(v 10)와 Node b(v 20) 인스턴스가 서로 연결 없이 따로 만들어진 그림
Node(10)과 Node(20)은 각자 __init__을 실행하므로, 인스턴스 속성 v는 a와 b가 따로 가집니다
python
코드 하이라이팅 중…
출력
코드 하이라이팅 중…
구분정의 위치공유 여부접근 방법
클래스 속성클래스 블록 (메서드 밖)모든 인스턴스가 공유클래스명.속성 또는 인스턴스.속성
인스턴스 속성__init__ 안 (self.속성)인스턴스마다 독립인스턴스.속성

인스턴스 메서드

인스턴스 메서드는 클래스 블록 안에 def로 정의한 함수입니다. 인스턴스로 호출하면 Python이 첫 번째 매개변수에 그 인스턴스를 자동으로 넣어 주기 때문에, 첫 매개변수를 self로 받아 두는 것이 규칙입니다. self를 통해 해당 인스턴스의 속성(self.속성)을 읽거나 수정할 수 있으므로, 인스턴스의 상태를 바꾸는 용도로 씁니다. 이름에 "인스턴스"가 붙는 이유는 메서드가 호출한 그 인스턴스에 묶여 동작하기 때문입니다. b.add(10)은 b의 속성을, 다른 인스턴스 b2.add(10)은 b2의 속성을 바꿉니다.

python
코드 하이라이팅 중…

b.add(10)을 호출하면 Python은 내부적으로 Bag.add(b, 10)처럼 첫 번째 자리에 인스턴스 b를 자동으로 넣어 줍니다. 그래서 메서드 안에서 self.items는 곧 b.items가 됩니다.

b = Bag() 인스턴스와, b.add(10)·b.add(20)·b.add(30)·b.total() 호출이 Bag.add(b, x)·Bag.total(b)로 바뀌어 self에 b가 들어가면서 items가 [ ]→[10]→[10, 20]→[10, 20, 30]으로 바뀌고 sum이 60을 반환하는 과정을 나타낸 표
b.add(10)은 Bag.add(b, 10)으로 바뀌어 self에 b가 들어가므로, 메서드 안의 self.items가 곧 b.items입니다
python
코드 하이라이팅 중…
출력
코드 하이라이팅 중…

메서드 안에서 리스트 속성 조작하기

__init__에서 리스트로 초기화한 속성(self.items = [])은 인스턴스 메서드에서 append·+=·인덱싱으로 자유롭게 조작할 수 있습니다. 시험에 자주 나오는 형태는 메서드가 값을 저장하고, 다른 메서드가 합/평균 등을 반환하는 구조입니다.

python
코드 하이라이팅 중…
실선 테두리의 Grade g 인스턴스(name 감자, scores [90, 80, 70])와, g.put(90)·g.put(80)·g.put(70)·g.avg() 호출이 Grade.put(g, s)·Grade.avg(g)로 바뀌어 self에 g가 들어가면서 scores가 [ ]→[90]→[90, 80]→[90, 80, 70]으로 늘고 avg가 240 / 3 = 80.0을 반환하는 과정을 나타낸 표
g.put(90)은 Grade.put(g, 90)으로 바뀌어 self에 g가 들어가므로, put이 쌓은 scores로 avg가 240 / 3 = 80.0을 반환합니다
python
코드 하이라이팅 중…
출력
코드 하이라이팅 중…
self를 빼먹으면 호출할 때 에러가 납니다
def add(x)처럼 self 없이 정의하면 b.add(10) 호출 시 인스턴스 b가 첫 자리에 끼어들어가 'add() takes 1 positional argument but 2 were given'이 발생합니다. 인스턴스 메서드는 반드시 첫 매개변수로 self를 받아야 합니다.

클래스 활용 예제

아래는 정보처리기사 실기에 출제된 것과 유사한 Node 클래스 활용 예제입니다.

python
코드 하이라이팅 중…
Node root의 c 리스트 칸 [0], [1]에 child1, child2가 들어 있고, root.c[0].v를 따라가면 child1의 v 값 2에 도착하는 트리 다이어그램
root.c[0]은 child1 인스턴스이므로 root.c[0].v는 child1.v, 즉 2입니다
출력
코드 하이라이팅 중…

각 Node 인스턴스는 v(값)와 c(자식 목록)를 독립적으로 가집니다. root.c에 자식 노드를 추가하면 트리 구조를 만들 수 있습니다.

리스트 클래스 속성은 공유됩니다
클래스 속성으로 리스트를 정의하면 모든 인스턴스가 같은 리스트를 공유합니다. 한 인스턴스에서 리스트를 수정하면 다른 인스턴스에도 영향을 줍니다. 인스턴스마다 독립적인 리스트가 필요하다면 __init__ 안에서 self.c = []로 정의해야 합니다.

클래스 상속과 super()

상속(inheritance) 은 이미 만든 클래스를 확장하여 새 클래스를 만드는 기능입니다. class 자식(부모): 형태로 선언하면 자식 클래스는 부모 클래스의 속성과 메서드를 그대로 물려받습니다.

python
코드 하이라이팅 중…
Shape 클래스를 상속한 Circle 클래스에서 인스턴스 c를 만들면 name은 부모 __init__이, r은 자식 __init__이 채우고 area()는 자식 버전이 쓰이는 과정
name은 super().__init__으로 부모가 채우고, r과 덮어쓴 area()는 자식 Circle에서 옵니다
python
코드 하이라이팅 중…
출력
코드 하이라이팅 중…

super().__init__() — 부모의 생성자 호출

자식 클래스에서도 __init__을 다시 정의하면, 부모의 __init__은 자동으로 호출되지 않습니다. 부모의 초기화 로직(여기서는 self.name = name)을 그대로 쓰고 싶다면 super().__init__(...)으로 직접 호출해 줘야 합니다.

python
코드 하이라이팅 중…
Rectangle(3, 4) 호출 시 자식 __init__에서 super().__init__으로 부모 Shape.__init__이 name을 채운 뒤 자식으로 돌아와 w와 h를 채우는 순서 다이어그램
super().__init__()은 부모 __init__을 실행한 뒤 자식 __init__으로 돌아옵니다. 파랑은 부모가, 초록은 자식이 채운 속성입니다
python
코드 하이라이팅 중…
출력
코드 하이라이팅 중…
표현의미
class B(A):B가 A를 상속 (A의 속성·메서드를 물려받음)
super().__init__(...)B 안에서 부모 A의 __init__ 을 호출
메서드 오버라이딩자식 클래스에서 같은 이름의 메서드를 새로 정의하면 자식 버전이 우선 적용

상속 풀이 체크리스트

  1. class 자식(부모):에서 부모가 누구인지 확인합니다.
  2. 자식 __init__ 안에서 super().__init__(...)을 호출하는지 확인합니다. 호출하지 않으면 부모의 초기화 로직은 실행되지 않습니다.
  3. 같은 이름의 메서드가 부모·자식 양쪽에 있으면 자식 쪽이 우선 실행됩니다 (오버라이딩).
  4. 자식 인스턴스(c = Circle(5))의 속성을 읽을 때 자식에 없으면 부모에서 찾습니다. c.name은 부모 __init__이 넣어 준 self.name을 읽은 결과입니다.
자식 __init__이 있으면 부모 __init__은 자동 호출되지 않습니다
자식 클래스에서 __init__을 새로 정의하면 부모 __init__은 실행되지 않습니다. 부모의 속성 초기화를 그대로 쓰고 싶다면 반드시 super().__init__(...)을 호출해야 합니다. 이를 빠뜨리면 부모가 세팅해야 할 속성(self.name 등)이 비어 있어 AttributeError가 납니다.

정보처리기사 실기 기출 문제

문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
메가커피와 함께, 홈페이지 개선에 참여하세요! ☕
혹시 이용에 불편한 점이나 개선이 필요한 부분을 발견하셨나요? 댓글로 알려주시면 더 나은 감자가 될 수 있어요! 🥔 제보해주신 모든 분께 메가커피 기프티콘을 드립니다! (본인 이메일로 댓글 달아주셔야해요~)
정처기 감자정처기 감자

정보처리기사 합격
도와줄라고 하는 감자

실기 이론

  • 이론 공부법
  • DB
  • 네트워크/OS
  • SW 설계
  • SW 개발
  • 보안/신기술

시험 응시

  • 시험장 찾기
  • 원서 접수
  • 응시자격 서류

요약 PDF

  • 26년 3회 이론 압축
  • 26년 3회 코딩 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

  • 전체 기출문제
  • 25년 3회
  • 25년 2회
  • 문제 포럼

감자 이용권

  • 이용권 구매

실기 이론

  • 이론 공부법
  • DB
  • 네트워크/OS
  • SW 설계
  • SW 개발
  • 보안/신기술

시험 응시

  • 시험장 찾기
  • 원서 접수
  • 응시자격 서류

요약 PDF

  • 26년 3회 이론 압축
  • 26년 3회 코딩 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

  • 전체 기출문제
  • 25년 3회
  • 25년 2회
  • 문제 포럼

감자 이용권

  • 이용권 구매
© 2025 재현기획개발. All rights reserved.
  • 정처기 감자의 시작
  • 업데이트 로그
  • 개인정보 처리방침
  • 이용약관
상호명 : 재현기획개발 / 주소: 서울특별시 영등포구 영등포로 150, 지하1층 108호 L145 가라지(당산동1가, 생각공장 당산) / 대표: 김재현 / 전화: 010-8158-7127 / 통신판매업신고: 제2025-서울영등포-1569호 / 이메일: contact@edugamja.com / 사업자등록번호: 573-51-00999