본문 바로가기
Python/구조 공부하기

[Python] 1. 클래스와 인스턴스

by 그갸거겨 2021. 10. 5.
728x90
반응형
클래스
- 개발자에게 필요한 새로운 형식을 정의하는 것을 의미
- 데이터를 변형하는 함수와 속성을 같은 이름 공간에 묶음
- 메모리 공간 차지 X
인스턴스
- 클래스를 복사해서 생성한 복사본
- 메모리 공간 차지 O
클래스와 인스턴스의 관계
- 붕어빵틀(클래스)과 붕어빵(인스턴스)의 관계와 같음
- 붕어빵틀이 있다고 해서 붕어빵이 있는 건가? X
- 붕어빵틀은 붕어빵을 만들기 위한 틀일 뿐! 붕어빵이 있는 것은 아니다.
- 이걸 프로그래밍 관측에서 보면,
- 붕어빵틀(클래스)은 그냥 틀일 뿐, 메모리에 존재하는 게 아니다.
- 붕어빵(인스턴스)을 만들어야 메모리에 존재하는 것이다.
cf. 인스턴스와 객체는 같은 뜻이며, 둘 중 어느 단어를 사용하든 상관 없다.
객체 지향 프로그래밍의 특징
1. 추상성 : 꼭 필요한 부분만 구현하는 것
2. 상속성 : 부모 클래스에서 공통 부분을 상속 받는 것
3. 다형성 : 동일한 인터페이스에 대해 구체적인 인스턴스마다 다른 동작을 할 수도 있는 것
  ↪ 쉬운 말 : 같은 함수이지만, 각각의 인스턴스마다 전부 다른 동작을 할 수 있는 것
⇒ 객체 지향 프로그래밍을 한다면, 여러 클래스들을 레고처럼 조립하여 SW 개발이 가능 O

 

아래에 코드의 예를 참고!

class Person:
    name = "default name"
    def print(self):
    print("My name is {0}".format(self.name))

if __name__ == '__main__':
	p = Person()
	p.name = 'charmer'
	p.print()
- 4번 째 줄까지 Person(클래스)에 대한 내용이다.
  ↪ 클래스이므로, 당연히 메모리 공간을 차지하지 않는다.
- 7번 째 줄인, p = Person()에서 인스턴스를 생성하므로, 이때 메모리 공간을 차지
- 8번 째줄에서 p(인스턴스)에 있는 name에 값 입력
↪ 온점(.)을 통해 접근한다.
- 마지막 줄이 실행되면 다음과 같은 출력이 나타난다.
  ↪ My name is charmer
728x90