본문 바로가기
프로그래밍 언어/Python

Python(파이썬) 9. 클래스(Class)와 객체(Object), 인스턴스(Instance)

by kkmin93 2021. 9. 25.
반응형

 

 

" 가장 큰 영광은 한 번도 실패하지 않음이 아니라, 실패할 때마다 다시 일어서는 데에 있다. "

 

- 공자 -

 

Python(파이썬) 9. 클래스(Class)와 객체(Object), 인스턴스(Instance)

목 차
1. 객체 지향 프로그래밍(OOP, Object-Oriented Programming
2. 클래스(Class)
3. 객체(Object)와 인스턴스(Instance)

 

1. 객체 지향 프로그래밍(OOP, Object-Oriented Programming)

  •  컴퓨터 프로그램의 방식 중 하나로 컴퓨터 프로그램을 명령어 대신 독립된 단위("객체")로 구분하고 파악할 수 있도록 도와준다.
  • 예를 들어, 스마트폰, 에어컨, 세탁기, 건조기, 커피 머신 등 서로 독립된 객체들이 가진 고유의 기능으로 서로 상호작용하여 인간의 삶의 질을 높여준다.

 

 

2. 클래스(Class)

 1) 클래스(Class)란?

  • 클래스의 추상적인 개념은 "반복되는 변수, 메소드(함수)를 미리 정해놓은 틀(설계도)"라고 이해하면 쉽다.
  • 클래스는 객체의 사용을 돕기 위해 구조나 행동 등을 정의한다.
  • 따라서 복잡한 코드를 쉽게 호출하고 사용할 수 있게 한다.

 

클래스란, "어떤 물건을 만들기 위한 틀(클래스)이고 똑같은 물건(객체, 인스턴스)을 찍어낼 수 있다."

 

  • class 클래스 이름: 형식으로 정의하며 클래스 이름은 반드시 첫 글자는 대문자로 입력한다.
  • 정의된 class 클래스 이름:  밑에 다양한 함수(메소드)들과 변수(속성)들로 정의가 된다.

 

 3) 클래스 및 객체 생성

 

  ① 객체의 설계도인 클래스를 먼저 정의한다.
  ② 클래스 내 변수 및 메소드를 정의한다.
   → 메소드를 정의할 때 매개변수의 첫 번째는 반드시 self를 입력하며, self는 현재의 객체를 가리키는 변수이다.


  ③ 정의된 클래스를 이용하여 객체를 생성한다.
  ④  만든 객체의 속성과 메소드를 사용한다.

  • 포켓몬 생성하기

 

 

3. 객체(Object)와 인스턴스(Instance)

 1) 객체(Object), 인스턴스(Instance)란?

  • 포켓몬이라는 객체 혹은 인스턴스를 생각했을 때, 포켓몬이라는 생명체는 이름, 나이, 몸무게 등 속성(Attribute)을 변수라고 한다.
  • 속성들은 객체 안의 변수에 저장되며, 포켓몬들이 하는 몸통 박치기, 앉기, 점프하기 등의 행동들은 메소드(Method)라고 정의한다.

 

즉, 객체 혹은 인스턴스는 "변수와 메소드"로 구성되어 있다.

 

 

  • 객체, 인스턴스는 객체 이름 = 클래스 이름()의 형태로 클래스에 정의된 것처럼 객체가 만들어진다.
  • 객체가 생성된 이후에는 객체 이름.변수객체 이름.메소드()의 형식으로 변수와 메소드를 사용한다.

 

 2) 객체와 인스턴스의 차이

  • 클래스로 만든 객체를 인스턴스라고 하며, 두 단어는 혼용하여 사용이 가능하지만 구분 또한 가능하다.
  • 위의 예제를 볼 때, Trainer1은 객체이고, 객체 Trainer1은 Poketmon의 인스턴스이다.
  • 즉, 객체나 인스턴스나 Trainer1을 가리기지만, 인스턴스는 그 객체가 어떤 클래스의 객체인지 설명할 때 사용된다.

 

 3) 생성자(Constructor)

  • __init__() 메소드는 클래스에서 가장 먼저 시작시키는 메소드를 뜻한다.

 

  • __init__()로 만들어진 메소드가 없는 클래스로 객체를 생성할 때는 오류가 없다.
    • 초기 시작되는 메소드가 없기 때문이다.
  • 반면 __init__()로 만들어진 메소드가 있는 클래스로 객체를 생성할 때는 __init__()메소드가 실행되기 때문에 오류가 생긴다.
    • 클래스 내 __init__()메소드는 객체화(인스턴스화)시 시작되는 메소드
    • 클래스 내 __init__()메소드가 아닌 다른 메소드는 정의만 해놓은 상태라고 생각하면 된다.
  • 생성자를 사용하면 객체가 생성될 때 객체의 속성을 생성 및 초기화할 수 있다.
    • "맨처음 클래스를 생성할  때 이것을 실행해라"라는 느낌의 생성자는 클래스의 맨 첫 부분에 한 번만 생성해준다.

 

반응형