1. Different btween Object and Instance

출처

1.https://www.ijemin.com

정확한 차이

  • 클래스는 집의 설계도다.
  • 오브젝트는 설계도로 지은 모든 집이다.
  • 인스턴스는 “주어진” 집이다

결론

  • 오브젝트는 실체, 인스턴스는 (원본과의) 관계에 집중한 용어

오브젝트와 인스턴스는 같은 단어로 취급될 때가 있고, 다른 단어로 취급될때도 있다

오브젝트와 인스턴스의 중심 의미를 구분할 수 있는 문장의 예

  • “준이는 지구상의 오브젝트다” (실체)
  • “준이는 어머니의 인스턴스다” (복제 - 생성, 원본과의 관계)
  • “객체는 클래스의 인스턴스다” (객체는 클래스를 원본으로 생성한 복제본)

오브젝트와 인스턴스를 같은 의미로 사용할때는 둘다 실체를 가리키는 의미로 사용한다

오브젝트와 인스턴스를 구분하여 사용할때는 강조하는 의미다 다르다

오브젝트와 인스턴스를 구분할때의 의미

  • 인스턴스는 어떤 원본으로부터 생성되었다는 의미가 내포된다

~의 인스턴스라고 하면, 그것으로 부터 만들어진 것, 사람(원본)

예를 들어, 단순히 ‘사람의 인스턴스’라고 하는 것만으로도, 사람(원본)으로 부터 생성된 복제본이란 의미가 내포된다

  • 나는 사람의 인스턴스다

또다른 예로는 유니티의 Instantiate()함수가 있다

  • 인스턴스화 그 자체를 의미하는 Instantiate() 함수
    • Instantiate() 함수는 어떤 원본을 넘겨주면, 해당 게임 오브젝트를 복제한 클론을 생성해준다
    • 참고로 이 함수에 원본을 넘져줄때, 대부분의 경우에서 클래스가 아닌 특정 오브젝트를 원본으로 사용한다
  • 물론 인스턴스 자체가 ‘생성된 실체’이기 때문에 인스턴스는 오브젝트이다

오브젝트는 클래스의 복제본이라는 의미보다, 실체라는 의미에 집중한다

  • 나는 사람 오브젝트다
    • 이때는 사람 타입으로서, 실제로 존재하는 사물(실체)가 하나 있다는 의미가 된다
    • 사람 클래스를 원본으로 생성되었다는 것은 당연히 추측 가능하다. 그러나 인스턴스화를 명시적으로 알리고 싶다면, 생성이라는 단어를 따로 명시해야 한다
      • 나는 사람 클래스를 바탕으로 만든 사람 오브젝트다.

부가 설명

  • 일단 인스턴스는 실체이므로 오브젝트가 맞다
  • 대부분의 경우, 오브젝트도 무언가로부터 생성을 해야 하므로 인스턴스가 맞다

오브젝트

사실 오브젝트라는 것은 클래스라는 개념이 없어도 존재가능하다

프로그래밍의 과정을 생각하지 않고, 현실에서의 물건들이 그냥 처음부터 있었다는 것을 생각해 보자

  • 오브젝트는 클래스와 관련 있지만, 클래스를 배제해도 성립가능한 개념이다
  • 이때 오브젝트는 실제로 존재하는 물건이라는 의미로서 사용 된다
    • 즉, 오브젝트의 원본 타입에 관한 내용이 배제되어도 오브젝트 개념은 성립한다

다시 말해, 아래 문장은 제대로 성립한다

준이는 오브젝트다. 단일 사물로서 현실에 존재하니까

인스턴스

일단, 인스턴스 또한 실체라서 인스턴스는 오브젝트가 맞다

그런데 인스턴스는 어떤 것으로부터 생성되었다는 의미에 집중한다

일단 인스턴스를, 인스턴스의 원형(클래스)를 언급하지 않고 같은 문장을 말해보자

  • 준이는 인스턴스다. 단일 사물로서 현실에 존재하니까

어색한 것을 알 수 있다. 이번에는 이렇게 바꿔 보자

  • 준이는 사람의 인스턴스다. 사람으로부터 만든 것이니까.

즉 인스턴스를 언급할때는, 객체의 추상을 같이 언급하는 것이 어색하지 않게 들린다

이번에는 같은 내용을 반대 예로 다시 생각해보자

일단 프로그래밍의 세상에서 오브젝트는 클래스로 부터 파생되는 것이 맞기에 아래 형식은 성립한다

  • 사람을 인스턴스화 한것은 사람 오브젝트다

하지만 아래 표현은 어색하다

  • 준이는 사람의 오브젝트다

정리

결국 인스턴스와 오브젝트 둘다 아래 의미를 내포한다

1. 실체다
2. 무언가로부터 생성되었다. (관계)

하지만 오브젝트는 1번에, 인스턴스는 2번에 무게가 실려있다