코드잇 스프린트/파이썬

클래스와 인스턴스

JOHAWK 2024. 7. 25. 23:11

객체 지향 프로그래밍(Object-Oriented Programming, OOP)에서 사용되는 클래스와 인스턴스에 대해 알아보겠습니다.

 

클래스와 인스턴스

목차

1. 객체 지향 프로그래밍

2. 클래스

1) 클래스란?

2) 어떻게 사용하나요?

3. 인스턴스

 

1. 객체 지향 프로그래밍

객체 지향 프로그래밍은 컴퓨터 프로그램을 여러 개의 독립된 단위인 '객체(object)'로 구성된 복합체로 파악한다. 이를 바탕으로 복잡한 문제를 잘게 나누어 객체로 만들고 객체를 조합해서 문제를 해결하는 방식의 프로그래밍을 의미한다.

객체 지향 프로그래밍은 프로그램을 유연하고 변경이 쉬워 프로그래밍을 더 배우기 쉽게 하고 소프트웨어 개발과 보수를 간편하게 한다. 그리고  직관적으로 코드를 분석할 수 있다는 장점도 있다 .

앞으로 이야기할 클래스와 인스턴스 모두 객체 지향 프로그래밍에서 사용된 개념이다.

 


2. 클래스

1) 클래스란?

클래스는 객체 지향 프로그래밍에서 가장 작은 단위인 객체를 만들기 위한 일종의 틀(template)이다.

 


2) 어떻게 사용하나요?

클래스를 설정하는 방법은 아래와 같다. 먼저 class에 클래스 이름을 지정하고 def 함수를 통해 다음 줄에 해당 클래스에서 사용할 수 있는 메서드를 입력한다.

여기서 주의할 점은 클래스 이름의 첫 글자는 대문자로 시작해야 한다는 점과,  메소드에 들어가는 첫번째 매개변수는 self가 들어가야 한다는 것이다. self는 객체 자기 자신을 참조하는 매개변수로 self를 사용하지 않으 타입 에러 메시지가 나오게 된다.

그 외에 클래스에서 정의하는 메소드에서는 첫번째 매개변수만 self로 지정한다면 그 외에 여러 변수를 사용할 수 있다.

class Class_name:  # Class_name에 들어갈 클래스 이름은 대문자로 시작한다.
    def method(self, var1, var2):  # method에 들어가는 첫번째 매개변수는 무조건 self가 들어가야 한다.
        코드 입력
TypeError: ... takes 0 positional arguments but 1 was given  # method의 첫번째 매개변수는 self로 설정해주세요!

 

위 내용을 바탕으로 간단하게 춤의 종류를 정의하는 dance 클래스를 만들어보았다.

class Dance:
    def moving(self):
        print("이 춤을 추는 건 재밌다.")

 

그리고 클래스에서 사용할 수 있는 메소드 중 __init__메소드가 있는데 해당 메소드를 초기화 메소드라고 부른다. 이 메소드는 어떤 클래스의 객체가 생성되면 메소드를 입력하지 않아도 자동으로 호출되어 객체가 가지게 될 여러 특징을 정해다.

 

초기화 메소드를 활용해 축구 선수라는 클래스를 만들어보면 다음과 같다.  축구 선수 클래스로 지정된 객체는 자동으로 두번째 매개변수인 player_name을 self.name 속성에 로 저장하게 되고, behavior 메소드를 사용하면 self.name이 반영된 "OOO선수가 슈팅을 합니다!"라는 문구를 출력할 것이다.

self.name에서 self는 인스턴스 자신을 의미한다. 즉, self.name은 자기 자신에게 name이라는 속성을 추가한 것이다.

class Soccer_player:
    def __init__(self, player_name):
        self.name = player_name  # 두번째 매개변수인 player_name을 self.name 속성으로 저장
    
    def behavior(self):
        print(f"{self.name} 선수가 슈팅합니다!")

 

 


3. 인스턴스

인스턴스는 객체 지향 프로그래밍에서 클래스로 만들어낸 객체에 해당한다. 즉, 인스턴스 = 클래스() 형식으로 정의된다.

위에서 만든 Dance 클래스와 Soccer_player 클래스를 활용해 인스턴스를 만들면 아래와 같다.

# Dance 클래스가 적용된 인스턴스
class Dance:
    def moving(self):
        print("이 춤을 추는 건 재밌다.")

tango = Dance()  # 여기서 Tango는 Dance 클래스가 적용된 인스턴스가 된다.
tango.moving()


# Soccer_player 클래스가 적용된 인스턴스
class Soccer_player:
    def __init__(self, player_name):
        self.name = player_name
    
    def behavior(self):
        print(f"{self.name} 선수가 슈팅합니다!")

son = Soccer_player("손흥민"):  # son이 "손흥민"을 두번째 매개변수로 갖는 인스턴스가 된다.
    son.behavior()
이 춤을 추는건 재밌다.
손흥민선수가 슈팅합니다!

탱고(tango)를 Dance 클래스의 인스턴스로 설정해 moving 메소드를 사용할 때 "이 춤을 추는 건 재밌다."가 출력되었고,

son을 "손흥민"을 두번째 매개변수로 갖는 Soccer_player 클래스의 인스턴스로 설정해 behavior 메소드에서 "손흥민 선수가 슈팅합니다!"라는 결과가 출력되었다.

 

참고

파이썬 코딩 도장: 34.1 클래스와 메서드 만들기 (dojang.io)

 

파이썬 코딩 도장: 34.1 클래스와 메서드 만들기

Unit 34. 클래스 사용하기 ​클래스는 객체를 표현하기 위한 문법입니다. 예를 들어 게임을 만든다고 하면 기사, 마법사, 궁수, 사제 등 직업별로 클래스를 만들어서 표현할 수 있습니다. ▼ 그림 3

dojang.io

파이썬 코딩 도장: 34.2 속성 사용하기 (dojang.io)

 

파이썬 코딩 도장: 34.2 속성 사용하기

지금까지 클래스에서 메서드를 만들고 호출해보았습니다. 이번에는 클래스에서 속성을 만들고 사용해보겠습니다. 속성(attribute)을 만들 때는 __init__ 메서드 안에서 self.속성에 값을 할당합니다.

dojang.io

[파이썬] 클래스와 객체, 인스턴스를 이해해보자 (예시를 통한 설명) (tistory.com)

 

[파이썬] 클래스와 객체, 인스턴스를 이해해보자 (예시를 통한 설명)

파이썬의 클래스(class)와 객체(object), 인스턴스(instance)에 대해 정리해보겠습니다. 클래스(class), 객체(object), 인스턴스(instance)를 구분해보자. 클래스(class)는 주로 어떤 틀에 비유됩니다. 즉, 똑같

kingnamji.tistory.com