객체와 인스턴스의 차이

Programming/Extractions 2016. 6. 21. 11:55

* 자의적인 해석이므로 논란의 여지가 있음

객체와 인스턴스의 차이를 알아보니 블로그마다 말이 다르다.

어떤 블로거는 인스턴스는 객체와 같지만, 관계적인 측면에서 이야기할 때 객체 대신 인스턴스라는 말을 쓴다고 하고, 또 어떤 블로거는 메모리 상에 할당되어야만 객체가 인스턴스가 된다고 한다.

이해 가는 내용이지만, 정확하지는 않다고 본다.

 

결국에는 영어 사이트를 검색했고, 가장 납득이 가는 설명이 담긴 블로그를 찾았다.

https://alfredjava.wordpress.com/2008/07/08/class-vs-object-vs-instance/

In OO Programming, we often hear of terms like “Class”, “Object” and “Instance”; but what actually is a Class / Object / Instance?
 In short, An object is a software bundle of related state and behavior. A class is a blueprint or prototype from which objects are created. An instance is a single and unique unit of a class.
 Example, we have a blueprint (class) represents student (object) with fields like name, age, course (class member). And we have 2 students here, Foo and Bob. So, Foo and Bob is 2 different instances of the class (Student class) that represent object (Student people). 
Let me go into details 
Object
Real world objects shares 2 main characteristics, state and behavior. Human have state (name, age) and behavior (running, sleeping). Car have state (current speed, current gear) and state (applying brake, changing gear). Software objects are conceptually similar to real-world objects: they too consist of state and related behavior. An object stores its state in fields and exposes its behavior through methods.
 Class
Class is a “template” / “blueprint” that is used to create objects. Basically, a class will consists of field, static field, method, static method and constructor. Field is used to hold the state of the class (eg: name of Student object). Method is used to represent the behavior of the class (eg: how a Student object going to stand-up). Constructor is used to create a new Instance of the Class.
 Instance
An instance is a unique copy of a Class that representing an Object. When a new instance of a class is created, the JVM will allocate a room of memory for that class instance.

 이 블로그의 설명에 따르면 객체(Object)소프트웨어 세계에 구현할 대상이고, 이를 구현하기 위한 설계도클래스(Class)이며, 이 설계도에 따라 소프트웨어 세계에 구현된 실체인스턴스(Instance)이다. 

객체(Object)는 현실의 대상(Object)과 비슷하여, 상태나 행동 등을 가지지만, 소프트웨어 관점에서는 그저 콘셉(concept), 즉 사유의 결과일 뿐이다. 소프트웨어에서 객체를 구현하기 위해서는 콘셉 이상으로 많은 것들을 사고하여 구현해야 하므로, 이를 위한 설계도로 클래스를 작성한다. 설계도를 바탕으로 객체를 소프트웨어에 실체화 하면 그것이 인스턴스(Instance)가 되고, 이 과정을 인스턴스화(instantiation)라고 한다. 실체화된 인스턴스는 메모리에 할당된다. 

코딩을 할 때, 클래스 생성에 따라 메모리에 할당된 객체인 인스턴스를 객체라고 부르는데, 틀린 말이 아니다.

인스턴스라고 부르면 더 정확하지만, 개념적으로 인스턴스는 객체에 포함된다고 볼 수 있다. 물론 어디가 소프트웨어 세계에 더 가깝냐를 따지면 당연히 인스턴스이다. 잘 구분해서 쓴다면 프로빼쌰날(?) 하다는 소리를 들을 수 있을지도.

그러나 객체나 인스턴스를 클래스로, 혹은 클래스를 객체나 인스턴스라고 해선 안 된다. 건물의 설계도를 보고 건물이라고 하지 않고, 반대로 건물을 설계도라고 하지 않으니까~

 

 

 

'Programming > Extractions' 카테고리의 다른 글

Call by Reference, Call by Value에 대한 고찰  (0) 2021.02.11
CNN 용어 정리  (0) 2021.01.28
RNN 학습에 필요한 데이터 분할  (0) 2021.01.25
써드 파티(3rd party) 개발자  (0) 2021.01.20
gRPC 정리  (0) 2021.01.09
객체와 인스턴스의 차이  (12) 2016.06.21
  1. 2016.07.03 16:34 고치기 댓글

    비밀댓글입니다

    • 2016.07.04 20:39 고치기

      비밀댓글입니다

  2. 지나가는 행인 2018.07.01 16:03 고치기 댓글

    감사합니다 나름 명확히 이해가 잘 되는군요

  3. zero 2018.08.08 18:21 고치기 댓글

    잘 읽었습니다 ㅎㅎ

  4. 이글보고나서 2018.09.12 16:01 고치기 댓글

    궁금점이 해결되었어요 명쾌한 설명 굿굿 입니다

  5. sa 2020.02.27 23:14 고치기 댓글

    nice

  6. 박준호 2020.03.31 19:15 고치기 댓글

    조금만 딴거 하면 까먹지만 볼떄마다 이해가 80%됩니다 그런 것들 이구나 하고

  7. 웅톨 2020.04.14 18:42 고치기 댓글

    구분을 잘 해주셔서 이해가 잘 되네요~
    좋은글 감사합니다

  8. ㅇㅇ 2020.06.13 01:23 고치기 댓글

    명쾌하네요. 감사합니다!

  9. 22 2021.04.21 12:54 고치기 댓글

    요리재료를 객체라 하고 요리 레시피를 클래스 만들어진 요리를 인스턴스라 생각하면 되겠네요

  10. b 2021.05.18 17:58 고치기 댓글

    좋은 글 감사합니다 ㅎㅎ

  11. ㅇㅇ 2021.05.20 10:59 고치기 댓글

    와 정말 객체와 인스턴스 때문에 고민이 많았는데 덕분에 생각을 정리 할 수 있었습니다. 정말 감사합니다!



admin