[java] 클래스, 객체 및 인스턴스의 차이점

Java에서 클래스, 객체 및 인스턴스는 무엇입니까?



답변

Java (및 기타 프로그래밍 언어)는 유형 측면에서 모델링 됩니다 . 이론적 수준에서 은 정보의 일부 양자에 대한 표현이고 유형 은 값의 집합입니다. 값 X Y 유형 의 인스턴스 라고 말할 때 , 우리는 X가 Y 유형 인 값 세트의 구성원이라는 것을 의미합니다.

이것이 “인스턴스”라는 용어가 실제로 의미하는 것입니다. 그것은 사물이 아닌 관계를 설명합니다.

Java 프로그래밍 언어의 유형 시스템은 기본 유형참조 유형 의 두 가지 유형을 지원합니다 . 참조 유형은 클래스배열 유형 으로 더 나뉩니다 . Java 객체 는 참조 유형의 인스턴스입니다.

객체는 클래스 인스턴스 또는 배열입니다. ( JLS 4.3.1 )

그것이 유형 이론적 관점입니다.

실제로 대부분의 Java 개발자는 “인스턴스”와 “객체”라는 단어를 동의어로 취급합니다. (그리고 여기에 저도 포함됩니다. 저는 무언가를 빨리 설명하려고합니다.) 그리고 대부분의 개발자는 원시 유형의 인스턴스를 참조하기 위해 “인스턴스”보다는 “가치”라는 단어를 사용합니다.


답변

클래스를 생성하는 데 사용하는 청사진 객체 . 객체는 클래스 의 인스턴스 입니다. 특정 클래스를 사용하여 만든 구체적인 ‘사물’입니다. 따라서 ‘객체’와 ‘인스턴스’는 동일하지만 ‘인스턴스’라는 단어는 객체와 클래스의 관계를 나타냅니다.

예를 보면 이해하기 쉽습니다. 예를 들어 클래스가 있다고 가정합니다 House. 자신의 집은 객체이며 클래스의 인스턴스입니다 House. 여동생의 집은 또 다른 객체입니다 (class의 또 다른 인스턴스 House).

// Class House describes what a house is
class House {
    // ...
}

// You can use class House to create objects (instances of class House)
House myHouse = new House();
House sistersHouse = new House();

이 클래스 House는 집이 무엇인지에 대한 개념을 설명하고 클래스의 객체이자 인스턴스 인 구체적인 구체적인 집이 있습니다 House.

참고 : 이는 모든 객체 지향 프로그래밍 언어에서와 마찬가지로 Java에서도 정확히 동일합니다.


답변

클래스는 기본적으로 정의이며 객체의 코드를 포함합니다. 객체는 클래스의 인스턴스입니다.

예를 들어

String word = new String();

클래스는 객체 (인스턴스) 단어를 설명하는 String 클래스입니다.

클래스가 선언되면 메모리가 할당되지 않으므로 클래스는 템플릿 일뿐입니다.

클래스의 객체가 선언되면 메모리가 할당됩니다.


답변

나는 평신도 용어로 Jesper의 설명을 좋아합니다

Jesper의 답변에서 예를 즉석에서

class House {
// blue print for House Objects
}

class Car {
// blue print for Instances of Class Car 
}

House myHouse = new House();
Car myCar = new Car();

myHouse와 myCar는 객체입니다.

myHouse는 House의 인스턴스입니다 (Object-myHouse와 Class-House와 관련됨) myCar는 Car의 인스턴스입니다.

간단히 말해서

“myHouse는 Class House 의 인스턴스 입니다. “라는 말은 “myHouse는 House 유형객체 입니다 “라고 말하는 것과 같습니다.


답변

클래스는 데이터 유형입니다.이 유형을 사용하여 개체를 만듭니다.

  • 인스턴스는 논리적이지만 객체는 물리적 인 것은 일부 메모리를 차지함을 의미합니다.

  • 우리는 인터페이스뿐만 아니라 추상 클래스에 대한 인스턴스를 만들 수 있지만이를위한
    객체를 만들 수는 없습니다 .

  • 객체는 클래스의 인스턴스이고 인스턴스는 클래스 즉 객체를 대표하는 것을 의미합니다.

  • 인스턴스는 개체의 참조를 나타냅니다.

  • 개체는 실제로 해당 인스턴스의 메모리 주소를 가리 킵니다.

  • 인스턴스를 레이어 위로 전달할 수는 없지만 개체를 ​​레이어 위로 전달할 수는 있습니다.

  • 인스턴스는 저장할 수 없지만 객체는 저장할 수 있습니다.

  • 단일 개체는 둘 이상의 인스턴스를 가질 수 있습니다.

  • 인스턴스에는 클래스 정의와 객체 정의가 모두 있으며 객체에서와 같이 객체 정의 만 있습니다.

개체 구문 :

 Classname var=new Classname();

그러나 인스턴스 생성의 경우 객체를 참조하는 포인터 만 반환합니다. 구문은 다음과 같습니다.

 Classname varname;


답변

자바에서는 객체가 힙 메모리에 생성됩니다. 이는 우리의 응용 프로그램에서 지적하고 사용하기 위해 참조가 필요합니다. 참조에는 응용 프로그램에서 개체를 사용할 수있는 개체의 메모리 위치가 있습니다. 간단히 말해서 참조는 메모리 위치에 인스턴스화 된 객체의 주소를 저장하는 변수의 이름 일뿐입니다.

An instanceobject. 참고 Object로 클래스입니다.

예를 들어

Class A{

}

A ref = new A();

위 코드 조각에서 ref는 힙에서 생성 된 클래스 A의 개체에 대한 참조입니다.


답변

솔직히 저는 Alfred 블로그 정의가 더 편합니다 .

개체 : 실제 개체는 두 가지 주요 특성, 상태 및 동작을 공유합니다. 인간은 상태 (이름, 나이)와 행동 (달리기, 수면)이 있습니다. 자동차에는 상태 (현재 속도, 현재 기어) 및 동작 (브레이크 적용, 기어 변경)이 있습니다. 소프트웨어 객체는 개념적으로 실제 객체와 유사합니다. 또한 상태 및 관련 동작으로 구성됩니다. 개체는 상태를 필드에 저장하고 메서드를 통해 동작을 노출합니다.

클래스 : 개체를 만드는 데 사용되는 “템플릿”/ “청사진”입니다. 기본적으로 클래스는 필드, 정적 필드, 메서드, 정적 메서드 및 생성자로 구성됩니다. 필드는 클래스의 상태를 저장하는 데 사용됩니다 (예 : 학생 개체의 이름). 메서드는 클래스의 동작을 나타내는 데 사용됩니다 (예 : Student 개체가 일어서는 방법). 생성자는 클래스의 새 인스턴스를 만드는 데 사용됩니다.

인스턴스 : 인스턴스는 객체를 나타내는 클래스의 고유 한 복사본입니다. 클래스의 새 인스턴스가 생성되면 JVM은 해당 클래스 인스턴스에 대한 메모리 공간을 할당합니다.

다음 예가 주어지면 :

public class Person {
    private int id;
    private String name;
    private int age;

    public Person (int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + id;
        return result;
    }

    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Person other = (Person) obj;
        if (id != other.id)
            return false;
        return true;
    }

    public static void main(String[] args) {
        //case 1
        Person p1 = new Person(1, "Carlos", 20);
        Person p2 = new Person(1, "Carlos", 20);

        //case 2
        Person p3 = new Person(2, "John", 15);
        Person p4 = new Person(3, "Mary", 17);
    }
}

사례 1의 경우 Person 클래스의 두 인스턴스가 있지만 두 인스턴스는 모두 동일한 객체를 나타냅니다.

경우 2의 경우 Person 클래스의 인스턴스가 두 개 있지만 각 인스턴스는 다른 개체를 나타냅니다.

따라서 클래스, 객체 및 인스턴스는 다른 것입니다. 정답으로 선택한 답변에서 제안 된 객체와 인스턴스는 동의어가 아닙니다.