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
'Python > 구조 공부하기' 카테고리의 다른 글
[Python] 6. 다중 상속 및 이름 충돌 (2) | 2021.10.26 |
---|---|
[Python] 5. 상속과 다형성 (0) | 2021.10.26 |
[Python] 4. private 멤버 (0) | 2021.10.26 |
[Python] 3. 정적 메소드 (0) | 2021.10.13 |
[Python] 2. 생성자 메소드와 소멸자 메소드 (0) | 2021.10.06 |