인스턴스와 개체의 차이점은 무엇입니까?


94

인스턴스와 개체의 차이점은 무엇입니까? 차이가 있습니까?


10
아마도 잘 알려진 오류 메시지 "개체 참조 가 개체인스턴스로 설정되지 않았습니다 ." 에서 추론 할 수 있습니다 . :->
herzmeister

JVM 스펙에서 "개체는 동적으로 할당 된 클래스 인스턴스 또는 배열 중 하나입니다." docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html
yfklon

유래 난 그냥 도움이 개체 및 인스턴스의 차이에 대한 간략한 설명을 나는 희망을 준
Pushkarraj Pujari

1
객체는 클래스의 인스턴스입니다. 그게 전부입니다.
Marquis of Lorne

답변:


58

인스턴스와 객체는 객체 지향 프로그래밍 에서 가져온 것 입니다.

Java, C ++ 및 Smalltalk와 같은 일부 프로그래밍 언어의 경우 코드를 설명하고 이해하는 것이 중요합니다. 구조적 프로그래밍에서 사용되는 다른 언어에서는이 개념이 존재하지 않습니다.

이것은 Structural Programming의 관점입니다. 너무 많은 시간을 소비해야하는 실질적인 차이는 없습니다. 어떤 사람들은 글을 쓰는 데 많은 공간을 차지할 수있는 멋진 언어가있을 수 있지만, 결국에는 코더, 개발자, 프로그래머, 아키텍트에 관한 한 클래스의 인스턴스와 객체는 같은 것을 의미하며 종종 서로 바꿔서 사용할 수 있습니다 . 나는 내 경력에서 까다로울 사람을 만난 적이 없으며 실제로는 없기 때문에 차이점을 지적하려고 30 분을 소비합니다. 다른 개발 노력에 더 많은 시간을 할애 할 수 있습니다.

업데이트 Swift와 관련하여 Swift를 발명 한 Apple이 선호하는 것은 다음과 같습니다.

클래스의 인스턴스는 전통적으로 객체로 알려져 있습니다. 그러나 Swift 클래스와 구조는 다른 언어보다 기능면에서 훨씬 더 가깝고이 장의 대부분은 클래스 또는 구조 유형의 인스턴스에 적용 할 수있는 기능을 설명합니다. 이 때문에 좀 더 일반적인 용어 인 인스턴스가 사용됩니다.


20

훌륭한 질문입니다.

가능한 가장 간단한 방법으로 설명하겠습니다. 바구니에 사과 5 개가 있다고 가정 해 보겠습니다. 각각의 사과는 Apple 유형의 개체로, 몇 가지 특성 (즉, 크고 둥글고 나무에서 자랍니다)이 있습니다.

프로그래밍 측면에서 크기 : big, 모양 : 원형, 서식지 : 나무에서 자라는 변수를 가진 Apple이라는 클래스를 가질 수 있습니다. 바구니에 사과 5 개를 넣으려면 인스턴스화. Apple apple1, Apple apple2, Apple apple3 etc....

대안으로 : 객체는 무언가의 정의이고 인스턴스는 물리적 인 것입니다.

이게 말이 되요?


61
그렇지 않습니다. :) "객체는 무언가의 정의입니다"여기서 객체라고 부르는 것은 클래스입니다.
T-Gergely

11

인스턴스 : 인스턴스는 참조 (사본)를 만드는 것입니다.

object : new 연산자를 사용하여 메모리 위치가 개체 (클래스의 런타임 엔터티 임)와 연결된 경우를 의미합니다.

간단히 말해서 Instance는 특정 시간에 개체의 복사본을 나타내는 반면 개체는 클래스의 메모리 주소를 나타냅니다.


1
인스턴스가 객체에 대한 참조라고 말하면 정말 일을 정리했습니다.
John C

3
@JohnC 올바르지 않습니다. 객체는 클래스의 인스턴스입니다. 그게 전부입니다.
Marquis of Lorne

8

의자를 몇 개 만들고 있다고 가정 해 보겠습니다.

의자를 만들고 조립하는 방법을 보여주는 다이어그램은 소프트웨어 클래스에 해당합니다.

그 다이어그램의 패턴에 따라 5 개의 의자를 만들었다 고 가정 해 보겠습니다. 마찬가지로 클래스의 패턴에 따라 5 개의 소프트웨어 객체를 구성 할 수 있습니다.

각 의자에는 각 특정 의자를 식별하기 위해 좌석 바닥에 고유 번호가 있습니다. 의자 3은 의자 패턴의 한 인스턴스입니다. 마찬가지로, 메모리 위치 3은 소프트웨어 패턴의 한 인스턴스를 포함 할 수 있습니다.

따라서 인스턴스 (의자 3)는 의자 패턴의 고유 한 특정 표현입니다.


2
객체는 클래스의 인스턴스입니다. 인스턴스는 개체의 인스턴스가 아닙니다. 대답은 의미가 없습니다.
Marquis of Lorne

1
와, 9 년 후 누군가가 마침내 내 설명의 결함을 지적했습니다. 감사! 더 나은 지금?
Brian Showalter 19

7

개체 :

기본적으로 상태 (변수)와 동작 (메소드)이있는 소프트웨어 번들입니다.

클래스 :

객체 인스턴스에 대한 청사진 (템플릿)-고유 한 객체입니다. 예를 들어 객체를 두 번 생성한다는 것은 두 개의 인스턴스를 만들었다는 의미입니다.

예를 들어 보겠습니다

Class student()
{
   private string firstName;
  public student(string fname)
  {
    firstName=fname;
  }
  Public string GetFirstName()
  {
    return firstName;
  }
}

개체 예 :

Student s1 = new student ( "Martin"); Student s2 = new student ( "Kumar");

s1, s2는 Student 클래스의 객체를 가지고 있습니다.

인스턴스 :

s1과 s2는 학생 객체의 인스턴스이며 두 개는 고유 합니다.

참조로 도 부를 수 있습니다 .

기본적으로 s1과 s2는 객체에 할당 된 변수입니다.


1
객체는 클래스의 인스턴스입니다.
Marquis of Lorne

7

객체와 인스턴스는 거의 동일합니다. 하지만 아주 작은 차이가 있습니다. 경우 Car클래스이며, 3 Car의 3 가지 개체입니다. 이러한 모든 개체는 인스턴스입니다. 따라서이 3 대의 자동차는 Car클래스 인스턴스의 객체입니다 .

그러나 "인스턴스"라는 단어는 "구조 인스턴스"를 의미 할 수도 있습니다. 그러나 객체는 클래스 전용입니다.

모든 개체는 인스턴스입니다. 모든 인스턴스가 객체 여야하는 것은 아닙니다. 인스턴스는 "구조 인스턴스"또는 "객체"일 수 있습니다. 이것이 당신에게 차이가 분명해지기를 바랍니다.


3

객체는 속성 및 메서드와 같은 특정 기능과 특성을 가진 정적 인 구조이며 무엇이든 될 수 있습니다 (문자열, 사용자 컨트롤 등).

인스턴스는 사용하고 작업을 수행 할 수있는 해당 개체의 고유 한 복사본입니다.

컴퓨터와 같은 제품을 상상해보십시오.

xw6400 워크 스테이션은 개체입니다.

xw6400 워크 스테이션 (또는 Your WIFE의 xw6400 워크 스테이션)은 xw6400 워크 스테이션 개체의 인스턴스입니다.


1
첫 번째와 두 번째 단락은 객체가 아닌 클래스를 설명합니다.
Marquis of Lorne

2

이 대답은 진부한 것으로 보일 수 있지만 인스턴스와 객체의 차이에 대해 걱정하는 것은 이미 진부한 도시입니다.

나는 자바 스크립트에서 가장 잘 묘사되었다고 생각합니다.

let obj= {"poo":1} 
// "obj" is an object

구절

Class Trash {
    constructor(){this.poo = 1;}
}

let i = new Trash();
// "i" is an instance

1

인스턴스는 객체의 특정 표현입니다. 객체는 일반적인 것이며 인스턴스는 메모리에 생성 된 단일 객체입니다. 일반적으로 인스턴스에는 개체 유형의 다른 인스턴스와 구별되는 속성에 할당 된 값이 있습니다.


1

정의 개체 및 인스턴스 개체를 보면-

런타임에 클래스 멤버에게 할당 된 메모리를 객체라고하고 객체는 Class의 인스턴스입니다.

인스턴스의 정의를 보겠습니다.

런타임시 Any For Any 에 할당 된 메모리 는 인스턴스 변수로 호출됩니다.

이제 Malloc, Calloc, Realloc을 통해 C에서 발생 하는 런타임 메모리 할당 의 의미를 이해하십시오 .

struct p
{

}
p *t1
t1=(p) malloc(sizeof(p))

따라서 여기에서도 런타임 메모리 할당을 할당하고 있지만 여기서는 인스턴스로 호출하므로 t1은 인스턴스로 여기에서는 t1을 객체로 말할 수 없으므로 모든 객체는 Class의 인스턴스이지만 모든 인스턴스는 Object가 아닙니다.


여기 어딘가에 정답이 숨어 있지만 언어는 정리하고 단순화해야합니다.
Marquis of Lorne

1

Object-자신의 상태를 갖고 클래스에서 정의한 모든 동작에 액세스 할 수있는 클래스의 인스턴스입니다.

인스턴스-특정 클래스의 메모리 영역에 대한 참조입니다.


1

나는 이것을 설명하기 위해 아무도 코드를 사용하지 않은 한 사람을 제외하고는 믿을 수 없습니다.

// Design Class
class HumanClass {
    var name:String
    init(name:String) {
        self.name = name
    }
}

var humanClassObject1 = HumanClass(name: "Rehan") 

이제 왼쪽 즉 : "humanClassObject1"이 개체이고 오른쪽이 즉 : HumanClass (name : "Rehan")이이 개체의 인스턴스입니다.

var humanClassObject2 = HumanClass(name: "Ahmad") // again object on left and it's instance on the right.

따라서 기본적으로 인스턴스에는 해당 개체에 대한 특정 값이 포함되고 개체에는 런타임에 메모리 위치가 포함됩니다.

"객체 참조가 객체의 인스턴스로 설정되지 않음"이라는 유명한 문장을 기억하십시오. 이것은 초기화되지 않은 객체에는 인스턴스가 없음을 의미합니다. swift와 같은 일부 프로그래밍 언어에서는 컴파일러가 모든 멤버 (예 : 이름, 나이 등)를 초기화 할 방법이없는 클래스를 디자인하는 것을 허용하지 않지만 일부 언어에서는 이렇게 할 수 있습니다.

// Design Class
class HumanClass {
    var name:String // See we don't have any way to initialise name property.
}

그리고 오류는 다음과 같은 작업을 시도 할 때만 런타임에 표시됩니다.

var myClass = HumanClass()
print(myClass.name) // will give, object reference not set to an instance of the object.

이 오류는 위에서 설명한 것처럼 특정 값 (변수 \ 속성에 대한)이 "INSTANCE" 임을 나타냅니다 ! 그리고 객체 즉 : "myClass"는 메모리 위치를 포함합니다 (런타임에).


1

변수가 사용자 정의 유형 (클래스)으로 선언되면 객체라고하는 참조 만 생성됩니다. 이 단계에서는이 객체에 메모리가 할당되지 않습니다 . 포인터 역할을합니다 (향후 개체가 저장 될 위치). 이 과정을 '선언'이라고합니다.

Employee e; // e is an object

반면에 사용자 정의 유형의 변수가 new연산자를 사용하여 선언되면 힙의 메모리를이 객체에 할당하고 할당 된 메모리에 대한 참조를 반환합니다. 이 객체는 이제 instance 라고 합니다 . 이 과정을 'Instantiation'이라고합니다.

Employee e = new Employee(); // e is an instance

반면에 Java와 같은 일부 언어에서 객체는 Java에 대한 Oracle의 설명서에 작성된 줄에서 알 수 있듯이 인스턴스와 동일합니다 .

참고 : "클래스 인스턴스화"라는 구문은 "객체 생성"과 동일한 의미입니다. 객체를 생성 할 때 클래스의 "인스턴스"를 생성하므로 클래스를 "인스턴스화"하는 것입니다.


0

각 객체는 해당 클래스의 인스턴스라고 말하지만 클래스의 각 인스턴스에는 각 속성에 대한 자체 값이 있습니다.


0

클래스 : 클래스는 청사진입니다. Object : 클래스의 사본입니다. 인스턴스 : 객체의 메모리 주소를 저장하는 데 사용되는 변수입니다.

매우 기본적인 분석 예

Class House-> 집의 청사진. 그러나 당신은 청사진 속에 살 수 없습니다. 거주 할 클래스의 인스턴스 인 물리적 House가 필요합니다. 즉, 객체의 실제 주소는 인스턴스입니다. 인스턴스는 객체를 나타냅니다.


인스턴스는 변수가 아닌 개체를 참조합니다.
론의 후작

0

클래스를 인스턴스화하면 (new 사용) 인스턴스화 된 것은 객체가됩니다. 객체는 캡슐화, 다형성, 객체 지향 프로그래밍의 추상화 원칙 및 프로그램이 클래스에 정의 된 인스턴스 멤버를 사용하기 위해 상호 작용하는 실제 사물을 고수 할 수있는 것입니다. 개체에 인스턴스 멤버 (비 정적 멤버)가 포함됩니다.

따라서 클래스의 인스턴스는 객체입니다. '인스턴스'라는 단어는 그것이 태어난 곳에서 유래를 언급 할 때 사용되며, '클래스의 객체'에 비해 '클래스의 인스턴스'라고 말하면 더 명확합니다 (후자는 사용할 수 있음).

중첩 된 클래스 ( https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html) 에 대한이 Java 문서의 '내부 클래스'섹션도 읽을 수 있습니다.


0

Java는 객체 지향 프로그래밍 언어 (OOP)입니다. 즉, 기본 유형을 제외한 Java의 모든 것이 객체입니다.

이제 Java 객체는 실제 객체와 유사합니다. 예를 들어, 현재 속도 및 색상과 같은 속성을 갖는 자동차 객체를 Java로 만들 수 있습니다. 다음과 같은 행동 : 가속 및 주차.

그것은 Object 입니다.

여기에 이미지 설명 입력

반면에 Instance 는 다음과 같이 고유하게 초기화 된 해당 객체의 복사본입니다 Car car = new Car().

Java 클래스 및 객체에 대해 자세히 알아 보려면 확인하십시오.


객체는 클래스의 인스턴스입니다.
Marquis of Lorne

0

빠르고 간단한 답변

  • 클래스 : 객체에 대한 사양, 청사진
  • 개체 : 메모리에 클래스의 물리적 존재
  • 인스턴스 : 개체의 고유 한 복사본 (동일한 구조, 다른 데이터)

-1

an object과 an 의 차이점에 대해instance , 나는 어떤 합의가 있다고 생각하지 않습니다.

사람들이 논문, 블로그 게시물, 책 또는 대화에서 거의 같은 의미로 바꾸는 것처럼 보입니다.

저의 경우, 제가 보는 방식은 객체가 사용되는 언어에 의해 지정된 메모리의 일반적이고 살아있는 엔티티 Object입니다 Java.. 컨테이너에 의해 관리되는지 여부에 관계없이 그 유형 또는 이와 관련된 다른 어떤 것도 신경 쓰지 않습니다.

instance되는 object같이 형식과 관련된하지만 this method accepts Foo instances, 또는 you can not put Animal instances in an instance of a List of Vehicles.

object예를 들어 s는 s가 locks아닌 그들과 연관되어있는 instance반면 instances는 메소드를 가지고 있습니다. s가 objects아닌 가비지 수집 instance입니다.

그러나 내가 말했듯이, 이것은 내가 보는 방식 일 뿐이며, 그들 사이에 표준 정의를 위해 참조 할 수있는 조직이 없다고 생각하며 모든 사람이 약간 다른 이해 / 정의를 가질 것입니다 (물론 한계 내에서) .


-1

객체는 일반적인 것입니다. 예를 들어 수학에서 선형 함수를 사용합니다.

ax + b는 객체이고 3x + 2는 해당 객체의 인스턴스입니다.

개체 <<< 인스턴스

일반 <<< 특정

이것에 더 이상 아무것도 없습니다


-2

농구라는 클래스가 있다고 가정하면 개체는 클래스가 될 수 있습니다.

하지만 여러 개의 농구 공이 필요하므로 코드에서 농구 공을 1 개 이상 만듭니다.

basketball1 및 basketball2라고 말합니다. 그런 다음 애플리케이션을 실행합니다. 이제 농구 개체의 인스턴스가 2 개 있습니다.


그것은 객체가 클래스 생성자의 인스턴스라는 것을 의미합니까?
streetparade

물체를 청사진처럼 생각하십시오. 농구에 대한 청사진이 있다고합시다. 그게 바로 수업입니다. 농구 공이 만들어지고 이제 존재하게되면 농구 공 개체의 인스턴스가 1 개 있음을 의미합니다. 객체 (청사진)에서 다른 농구 공을 만들면 이제 농구의 인스턴스가 2 개 있습니다. 항상 하나의 개체 만 있지만 해당 개체의 많은 인스턴스를 만들 수 있습니다.
Darxval

@Darxval는 클래스 무엇인가
Chyanit 싱

-3

객체는 클래스를 의미하고 인스턴스는 객체를 의미합니다. 즉, 인스턴스는 특정 값을 가진 객체의 복사본입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.