개발은 개념싸움이야🫠

객체란 무엇인가 - 객체(object), 클래스(class) , 인스턴스(instance)

hyunki.Dev 2023. 2. 2. 18:59

📌 들어가며

개발과 관련된 업무를 하다보면 '객체'라는 용어를 자주 사용하게 됩니다. 

"객체를 생성해서...",  "객체를 넘겨서..." 등등 이러한 객체의 정의에 대해 한번쯤은 짚고 넘어가야 할 필요가 있을 것 같아 이번  포스팅을 통해 정리해보고자 합니다.


 

📌 객체의 정의

객체에 대한 정의는 어떠한 관점에서 정의하느냐에 따라 다르게 정리할 수 있습니다.

  • 사전적 의미
    : 먼저 사전적 의미로서의 객체는 '실제 존재하는 것'을 말합니다.

  • 컴퓨터 과학
    : 컴퓨터 과학에서의 객체 또는 오브젝트(object)는 클래스에서 정의한 것을 토대로 메모리(실제 저장공간)에 할당된 것을 의미합니다. 프로그램에서 사용되는 데이터 또는 식별자에 의해 참조되는 공간을 의미하며 변수, 자료구조, 함수 또는 메소드가 이에 해당할 수 있습니다.

  • 객체지향 프로그래밍
    : 객체지향 프로그래밍에서의 객체는 클래스의 인스턴스 입니다. 절차적 프로그래밍과 달리 객체 지향 프로그래밍에서는 하나의 객체가 데이터와 동작을 모두 포함하며 객체의 데이터 부분은 속성으로 나타내고 객체의 동작부분은 메소드를 사용하여 구현합니다.

  • JAVA
    : 대표적인 객체지향 프로그래밍을 구현하기 위한 언어 중 하나인 자바에서는 제임스 고슬링이 작성한 자바 언어 설명서(The java Language Specification)에는 객체 란 클래스의 인스턴스나 배열을 말한다고 정의되어 있습니다.

이렇듯 어떠한 관점에서 바라보느냐에 따라 '객체'는 서로 비슷한듯 다른 다양한 정의를 가지고 있다고 볼 수 있습니다. 아주 넓은 의미로는 '실세계에 존재하거나 생각할 수 있는 것' 또는 '물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중 각각 개별로 식별이 가능한 것' 으로 볼 수 있습니다.

 

Java 에서의 이러한 객체의 구성은 속성과 동작으로 구성되어 있습니다. '사람' 이라는 객체를 예로 들면 사람의 속성은 이름, 나이 가 될 수 있고 동작은 밥을 먹다, 잠을 자다 등이 될 수 있습니다. 자바에서는 이러한 객체의 속성을 필드(field), 동작을 메소드(method) 라고 합니다.


 

📌 클래스의 정의

위의 정의들을 보다 보면 '클래스' , '인스턴스' 라는 단어들이 자주 등장합니다. 이 또한 개발자라면 누구나 자주 사용하는 용어 이지만 명확한 정의를 위해 정리하도록 하겠습니다.

 

클래스는 객체를 찍어내기 위한 틀, 설계도 라고 생각하면 됩니다. 흔히 쉬운 예를 들기 위해 붕어빵의 반죽을 붓고 팟을 넣는 붕어빵 틀을 예시로 많이 듭니다.  연관되어 있는 멤버 변수와 메서드를 가지고 있는 객체를 만들기 위한 확장 가능한 코드 양식이라고 생각하면 되겠습니다.

 

이러한 클래스에는 객체에 들어갈 속성기능에 대한 것을 포함하고 있습니다.

 


 

📌 인스턴스의 정의

인스턴스는 이러한 설계도, 클래스를 바탕으로 소프트웨어 세계에서 구현한 구체적인 실체라고 보시면 되겠습니다. 실체화된 인스턴스는 메모리가 할당 되게 됩니다. 인스턴스는 객체에 포함된다고 볼 수 있습니다. OOP(객체 지향 프로그래밍) 관점에서 메모리에 할당되어 실제 사용될 때 '인스턴스'라고 부르게 됩니다. 

 

객체와 굉장히 유사하다고 생각할 수 있으며 둘의 차이점은 

객체는 소프트웨어 세계에서 우리가 구현할 대상이고, 설계도와 틀에 따라 소프트웨어 세계에 구현된 실체가 인스턴스 입니다.

 

붕어빵 예시를 다시 들자면 붕어빵틀- 클래스,
그 틀로 만들어질 붕어빵 - 객체,
그 틀에 실제 반죽, 팥, 슈크림을 부어만든 팥붕어빵, 슈크림붕어빵 - 인스턴스

 

이 외에도 인스턴스는 다양한 상황에서 쓰일 수 있습니다. 

ex) 실행 프로세스는 프로그램의 인스턴스이다. 객체 간의 링크는 클래스 간의 연관 관계의 인스턴스이다.  

 

즉, 인스턴스 라는 용어는 반드시 클래스와 객체 사이의 관계로 한정지어 사용되는 것은 아니며 어떠한 원본(추상적인 개념)으로부터 '생성된 복제본' (구체화한 실체)을 의미합니다. 

 

 

 

 

 

참고: 

http://wiki.hash.kr/index.php/%EA%B0%9D%EC%B2%B4

 

객체 - 해시넷

객체(客體) 또는 오브젝트(object)란 객체 지향 프로그래밍(OOP)에서 클래스(class)가 실제로 구현된 인스턴스(instance)를 말한다. 즉, 객체란 클래스를 인스턴스화한 것이다. 절차적 프로그래밍과 달

wiki.hash.kr

https://ko.wikipedia.org/wiki/%EA%B0%9D%EC%B2%B4_(%EC%BB%B4%ED%93%A8%ED%84%B0_%EA%B3%BC%ED%95%99) 

 

객체 (컴퓨터 과학) - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. -->

ko.wikipedia.org

https://computer-science-student.tistory.com/288

 

[자바, Java] 객체(Obejct)란?

객체(Obejct)란? 자바는 객체지향 프로그래밍(OOP; Object Oriented Programming) 언어 중 대표적인 언어이다. 객체지향 프로그래밍이라는 단어에서 객체란 무엇일까? 객체(Object)란 물리적으로 존재하거나

computer-science-student.tistory.com

https://upcake.tistory.com/418

 

[Java] 도대체 객체가 뭔데? : 객체, 클래스, 인스턴스

1. 개요 개발을 하다 보면 정말 자주 듣고 보고 말하고 쓰게 될 말이 객체입니다. 도대체 객체란 무엇일까요? 오늘 포스트에서는 객체, 클래스, 인스턴스에 대해서 제가 공부한 것을 바탕으로 아

upcake.tistory.com