파이썬(python) | Class

Jihun Kim·2022년 1월 1일
1

파이썬

목록 보기
8/11
post-thumbnail

Class

class는 객체지향성 언어의 개념으로, 틀을 만들어 찍어내는 공장과 거의 비슷하다. 틀이 class이고 틀로 찍어낸 제품이 '객체'이다. - "핵심만 간단히, Hello World! 파이썬 3"

즉, 클래스를 ‘자동차의 설계도’, 객체는 ‘실제로 만들어진 자동차’라고 생각할 수 있다.

class temp:
    a = None

    def __init__(self, str):  # 객체가 만들어질 때 반드시 실행되는 메서드
        self.a = str

    def driving(self, str):  # 메서드이며 반드시 첫 번째 인자에 self를 넣어야 한다
        print("%s로 운전 중입니다" % (str))

위와 같은 예시가 있을 때, 하나씩 살펴 보자.

  • init()메서드는 객체가 만들어지면서 실행되는 메서드로, 이 안에 명령어를 넣으면 인스턴스가 만들어질 때 반드시 실행된다.

  • 메서드를 만들 때 사용하는 첫 번째 인자인 self는 ‘class’가 아니라 ‘객체’를 가리킨다.



그런데, 위에서 언급한 객체인스턴스의 차이는 무엇일까?

객체와 인스턴스

클래스에 의해 만들어진 객체를 인스턴스라고 부르기도 한다. 이 둘을 혼용해서 쓴다고 오해할 수도 있지만 두 개념은 명백히 다르다.

인스턴스는 특정 객체가 어떤 클래스의 객체인지에 대한 "관계 위주"로 설명할 때 사용한다.

가령, 자동차 class가 있을 때 ‘트럭은 객체’라고 하며 ‘트럭은 자동차의 객체’보다는 ‘트럭은 자동차의 인스턴스’라는 표현을 사용한다.

객체는 프로그램에서 구현할 대상으로, 클래스의 정의대로 만들어진 실체이다. 반면 인스턴스는 설계도를 바탕으로 프로그램에서 구현된 구체적인 실체이다. 객체를 프로그램에서 실체화하면 그것을 인스턴스라고 부르는 것이다.

그렇다면, 위의 temp 클래스의 예시에서

"init()메서드는 객체가 만들어지면서 실행되는 메서드로, 이 안에 명령어를 넣으면 인스턴스가 만들어질 때 반드시 실행된다."

라고 한다면 일단 temp 클래스로부터 "객체"를 만들고 구체적인 실체인 "인스턴스"를 만들 때 init() 메서드가 실행된다는 의미가 된다. 다시 말해, str에 해당하는 값이 실제로 들어갈 때 인스턴스가 만들어지게 된다. 이 때 인스턴스는 메모리에 할당 된다. 또한 인스턴스는 class에 bound 된다.


추가적으로 더 살펴 보면

객체가 할 수 있는 기능을 메소드라 하며 클래스는 결국 속성과 메서드의 집합이다. 속성은 객체가 가질 성질을 정의하며 메서드는 객체가 할 수 있는 기능을 정의한다. 이렇게 속성과 메서드를 하나로 묶어서 처리하는 것을 캡슐화라고 한다.

만약 클래스와 인스턴스의 관계를 확인하고 싶다면 isinstance 메서드를 사용할 수 있다.

class Test:
	pass

이렇게 클래스를 정의한 뒤 아래와 같이 인스턴스를 만든다.

t = Test()

그러면 해당 객체는 메모리에 저장된다.
이제 t가 Test의 인스턴스가 맞는지 확인한다.

isinstance(t, Test)  # 첫 번째 인자가 인스턴스, 두 번째 인자가 클래스
>>> True


참고
1) https://www.itple.co.kr/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%ED%81%B4%EB%9E%98%EC%8A%A4-%EA%B0%9D%EC%B2%B4-%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0
2) 핵심만 간단히, Hello World! 파이썬 3

profile
쿄쿄

0개의 댓글