AiPE

클래스(Class) vs 객체(Object) vs 인스턴스(Instance) vs 메서드(Method) 본문

[XiBBaL] Study/Java

클래스(Class) vs 객체(Object) vs 인스턴스(Instance) vs 메서드(Method)

Oshimaker XiBBaL 2024. 4. 3. 15:02
반응형

클래스와 객체, 인스턴스의 경우 용어의 정의가 꽤나 헷갈린다.

 

보통 클래스와 객체를 붕어빵 틀과 붕어빵에 많이들 비유를 하는데, 엄밀히 말하면 이 설명은 오류가 있다.

이 비유를 기반으로 생각을 이어나가다보면 분명 오류를 만나게 되므로, 이 비유는 사용하지 않는 것이 좋다.

따라서 이 포스팅에서는 붕어빵, 붕어빵 틀 대신 다른 적절한 비유를 사용했다.

위 비유가 왜 틀렸는지에 대해서는 이 포스트를 맨 아래로 내려 "3. 참고자료"의 첫번째 글을 참고하자.

다른 분의 포스팅인데, 설명이 명쾌해서 가져와보았다.

 

또한 객체와 인스턴스의 경우 두 개의 용어를 혼용한다고 알려져 있는데,

엄밀히 말하면 둘은 서로 다르다.

사람들이 제대로 구분할 줄을 모르기 때문에 (혹은 의사소통의 편의상) 혼용하는 것이다.

비슷하면서도 다른 이 둘을 어떻게 구분해야 할지 명확한 기준을 제공하는 곳이 많지 않다.

 

이번 포스팅에서는 이들의 개념을 명확히 구분하고 정확한 정의를 내려보자.

 

 

1. 클래스 / 객체 / 인스턴스 / 메서드의 정의와 관계

가장 간단하게 한 문장으로 정의내리면 다음과 같다.

 

 

객체 = 구현하고자 하는 대상

클래스 = 대상을 구현하기 위한 설계도 겸 틀

인스턴스 = 설계도를 기반으로 객체를 실제로 구현해 놓은 것

메서드 = 클래스(설계도) 내에 있는 구체적인 행동강령 

 

 

이를 다이어그램으로 표현하면 다음과 같다.

 

 

 

 

예시로 이해하면 더 명확할 것이다.

 

예를 들어 "롯데타워"라는 "빌딩"을 짓는다고 하자.

 

"빌딩"이라는 추상적인 관념은 객체에 속한다.

하지만 그냥 빌딩이라고만 하면 이게 몇 층 짜리인지, 어떤 구조로 만들건지, 어떻게 지을 것인지 등을 알 수 없다.

 

이러한 구체적인 정보와 방법론들은 설계도 안에 들어있다.

이 설계도가 바로 클래스이다.

 

이러한 클래스 내부에는 변수와 메소드가 들어있다.

 

변수는 정보를 담는다.

건물의 층수, 재질, 구조 등이 여기에 속한다.

메소드는 방법론을 담는다.

어떻게 지을 것인지, 어떤 경우에 어떤 행동을 해서 지을 것인지, 건물에 물이 샐 때는 어떻게 대처할 것인지 등이 여기에 속한다.

 

 

 

이제 이 설계도(클래스)를 기반으로 하여 빌딩을 짓도록 한다.

당연히 설계도에 포함된 정보와 방법론을 기반으로 해야 할 것이다.

 

설계도를 바탕으로 롯데 타워를 짓는 행동 자체를 "인스턴스화"라고 한다.

설계만 되어 있던 것을 실제로 만들어낸다는 의미이다.

이러한 인스턴스화를 통해 만들어진 "실물"인 롯데타워를 "인스턴스"라고 한다.

 

 

 

 

2. 객체와 인스턴스의 구분

그러면 빌딩에 롯데타워가 속하듯이, 객체에 인스턴스가 포함되는 것인가?

 

그렇다고 볼 수 있다.

 

다만 둘의 관점이 차이가 있다.

 

객체는 "구현하고자 하는 것"에 초점이 잡혀 있다.

반면 인스턴스는 "구현해놓은 대상"에 초점이 잡혀 있다.

 

내가 구현하고 싶은 대상을 객체라고 한다면 그 객체를 실제로 만들어 놓은 것이 인스턴스라는 것이다.

 

따라서 객체는 인간이 생각한 대상일 뿐, 고유한 메모리 주소(=현실세계에 실존)를 갖지 아니한다.

반면 인스턴스는 객체를 실제로 구현해놓은 대상이기 때문에 고유한 메모리 주소를 가진다.

 

인스턴스(Instance)는 한국어로 번역하면 "사례"라는 뜻이다. 

영어 정의로부터 어느정도 역할을 추측해볼수도 있겠다.

 

 

 

 

3. 참고자료

아래는 내가 공부하면서 참고한 블로그 포스팅들이다. 

좋은 비유들이 있고, 깔끔한 설명들이니 같이 보면 좋을 듯 하다.

 

① 객체와 클래스의 관계에 대해 깔끔하게 잘 설명해둔 글

https://devheat.tistory.com/14

 

[Java] 클래스와 객체의 관계는 붕어빵 틀과 붕어빵이 아니다.

클래스와 객체는 붕어빵 틀과 붕어빵이 아니다. 처음 객체지향 프로그래밍을 접하는 사람들은 이런 말을 한 번 쯤 듣는다. 아마 안들어본 사람이 없을 것 같다. 붕어빵 틀에서 붕어빵을 찍어내

devheat.tistory.com

 

② 객체와 인스터스를 명료하게 구분해주는 글

https://cerulean85.tistory.com/149

 

객체와 인스턴스의 차이

* 자의적인 해석이므로 논란의 여지가 있음 객체와 인스턴스의 차이를 알아보니 블로그마다 말이 다르다. 어떤 블로거는 인스턴스는 객체와 같지만, 관계적인 측면에서 이야기할 때 객체 대신

cerulean85.tistory.com

 

반응형