클래스(Class), 객체(Object), 인스턴스(Instance) 간단 정리
클래스(Class)
객체를 만들어 내기 위한 설계도
객체의 상태와 행동을 규정하지만 그 객체를 의미하는 것은 아님
객체(Object)
클래스에 정의된 속성과 메서드를 가지는 실체
실제 메모리에 할당되며 실제 동작을 수행한다.
인스턴스(Instance)
특정 클래스의 실제 구현체
클래스로부터 생성된 개별 객체
여러 개의 인스턴스가 하나의 클래스로부터 생성될 수 있다.
김춘수의 꽃과 객체지향 프로그래밍
사실 OOP 개념을 막 배우던 시기에는 대체 OOP를 왜 쓰는 가에 대해서 깊은 공감을 하지 못 하였다.
그래서 나는 김춘수의 "꽃"이라는 시로 이해를 하려했던 기억이 있다.
물론 지금 생각해보면 민망한 비유기는 하지만 적어도 그때의 나한테는 어느정도 도움이 되었던 것 같다.
내가 그의 이름을 불러주기 전에는
그는 다만
하나의 몸짓에 지나지 않았다.
내가 그의 이름을 불러주었을 때,
그는 나에게로 와서
꽃이 되었다.
1연의 "그의 이름을 불러주는 행위"를 하기 전의 "그"는 "하나의 몸짓"에 지나지 않았다고 표현하고 있다.
우리는 여기서 다음과 같이 비유를 할 수 있다.
그의 이름을 불러주는 행위 ➡️ "그"에게 "의존성"을 부여해주는 행위
그 ➡️ 하나의 클래스
하나의 몸짓 ➡️ 아직 구체화되기 전의 추상적인 상태
객체지향적 해석
하지만 2연에서는 "그"의 이름을 불러주는 행위를 함으로써 "그"의 의미가 바뀌었다는 것을 알 수 있다.
"그"는 결국 하나의 인스턴스가 되어 "꽃"이라는 실제로 존재하게 되었다고 해석할 수 있다.
그리고 내가 "그"의 이름을 불렀다는 것은 실제 메모리에 할당되었다는 것으로도 생각할 수 있다.
클래스 자체는 코드 세그먼트나 TEXT 영역에 저장된다.
하지만 이름을 불러 인스턴스화한다는 것은 HEAP 영역에 저장이 된다.
이때의 HEAP 영역은 객체를 위한 메모리를 할당하는 곳이며, 실제 객체의 동작 시 사용되는 공간이기도 하다.
더 나아가자면 클래스를 인스턴스화하는 과정은 CPU가 수행한다.
그렇기에 "내"가 "그"에게 이름을 불렀다는 행위로 인해 "그"가 🌸이 되었다는 것은 어쩌면 이 시에 나온 "나"를 하나의 CPU로 해석해도 되지 않을까하는 생각도 든다.
마무리하며...
시에서는 "그"와 "내"가 시의 주체가 되어 낭만적이고 철학적인 의미를 내포하고 있다.
하지만 현실도 그렇고, 객체 지향에서는 "그"라는 클래스가 수많이 존재한다.
덧붙이면, 우리는 하나의 클래스에서 여러 개의 인스턴스를 생성할 수 있다는 사실을 인지해야 한다.
우리가 어떤 클래스에 의미를 부여하고, 그 메모리를 할당할 지는 우리의 선택이니, 어떤 "그"에게 의존성을 부여하여 결합도를 높일 지는 늘 잘 신중해야 한다.
'부스트캠프 > 챌린지' 카테고리의 다른 글
[부스트캠프 웹모바일 9기] 챌린지 2주 차 회고 (0) | 2024.07.28 |
---|---|
[부스트캠프 웹모바일 9기] 챌린지 Day 9 학습 정리 (0) | 2024.07.25 |
[부스트캠프 웹모바일 9기] 챌린지 Day 8 학습 정리 (0) | 2024.07.24 |
[부스트캠프 웹모바일 9기] 챌린지 Day 7 학습 정리 (0) | 2024.07.23 |
[부스트캠프 웹모바일 9기] 챌린지 1주 차 회고 (2) | 2024.07.21 |