your programing

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

lovepro 2020. 10. 13. 08:19
반응형

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


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의 개체에 대한 참조입니다.


자동차를 모델링하는 프로그램이 있다면 자동차를 나타내는 클래스가 있으므로 코드에서 다음과 같이 말할 수 있습니다.

Car someCar = new Car();

someCar는 이제 Car 클래스의 인스턴스입니다. 프로그램이 수리점에서 사용되고 someCar가 시스템에서 귀하의 자동차를 나타내는 경우 귀하의 자동차가 대상입니다.

따라서 Car는 모든 실제 자동차를 나타낼 수있는 클래스입니다. someCar는 Car 클래스의 인스턴스이고 someCare는 하나의 실제 개체 (당신의 자동차)를 나타냅니다.

그러나 인스턴스와 객체는 코딩을 논의 할 때 매우 자주 사용됩니다.


컴퓨터가 저장하고 처리하는 모든 종류의 데이터는 가장 기본적인 형태의 비트 행입니다. 이러한 비트가 해석되는 방식은 데이터 유형을 통해 수행됩니다. 데이터 유형은 원시적이거나 복잡 할 수 있습니다. 기본 데이터 유형은-예를 들어-int 또는 double입니다. 그것들은 특정한 길이와 특정한 해석 방법을 가지고 있습니다. 정수의 경우 일반적으로 첫 번째 비트가 부호에 사용되고 나머지 비트는 값에 사용됩니다.

복합 데이터 유형은 기본 및 기타 복합 데이터 유형의 조합 일 수 있으며 Java에서는 "클래스"라고합니다.

성과 이름이라는 두 개의 문자열로 구성된 복잡한 데이터 유형 PeopleName을 정의 할 수 있습니다. Java의 각 문자열은 또 다른 복잡한 데이터 유형입니다. 반환되는 문자열은 (아마도) Java가 저장하는 데 필요한 비트 수와 해석 방법을 알고있는 원시 데이터 유형 char을 사용하여 구현됩니다.

데이터 유형의 인스턴스를 생성하면 객체가 생성되고 컴퓨터는이를 위해 일부 메모리를 예약하고 위치와 해당 인스턴스의 이름을 기억합니다. 메모리에있는 PeopleName의 인스턴스는 두 개의 String 변수의 공간과 부기 관리를 위해 더 많은 공간을 차지합니다. 정수는 Java에서 32 비트를 차지합니다.

복잡한 데이터 유형에는 메소드가 할당 될 수 있습니다. 메서드는 해당 인수 또는이 메서드를 호출하는 데이터 형식의 인스턴스에 대해 작업을 수행 할 수 있습니다. p1과 p2라는 두 개의 PeopleName 인스턴스가 있고 p1.getFirstName () 메서드를 호출하면 일반적으로 첫 번째 사람의 이름을 반환하지만 두 번째 사람의 이름은 반환하지 않습니다.


클래스와 객체의 개념은 논리를 단일 프로그래밍 단위로 캡슐화하는 것입니다. 클래스 는 객체가 생성되는 청사진입니다.

다음은 Car를 나타내는 클래스의 예입니다.

public class Car {

    int currentSpeed;
    String name;

    public void accelerate() {  
    }

    public void park() {
    }

    public void printCurrentSpeed() {
    }
}

다음 과 같이 Car 개체의 인스턴스만들 수 있습니다 .

Car audi = new Car();
Car toyota = new Car();

이 튜토리얼 에서 예제를 가져 왔습니다.


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

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

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

인스턴스 : 인스턴스는 객체를 나타내는 클래스의 고유 한 복사본입니다. 클래스의 새 인스턴스가 생성되면 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 클래스의 인스턴스가 두 개 있지만 각 인스턴스는 다른 개체를 나타냅니다.

So class, object and instance are different things. Object and instance are not synonyms as is suggested in the answer selected as right answer.


Class

  • It has logical existence, i.e. no memory space is allocated when it is created.

  • It is a set of objects.

  • A class may be regarded as a blueprint to create objects.

    • It is created using class keyword

    • A class defines the methods and data members that will be possessed by Objects.


Object

  • It has physical existence, i.e. memory space is allocated when it is created.

  • It is an instance of a class.

  • An object is a unique entity which contains data members and member functions together in OOP language.

    • It is created using new keyword

    • An object specifies the implementations of the methods and the values that will be possessed by the data members in the class.


Class : Structure

Object : Physical Manifestation

Instance : each object created from class

Reference : Address of Object


A class is a blueprint that is needed to make an object(= instance).

The difference between an object and an instance is, an object is a thing and an instance is a relation.

In other words, instance describes the relation of an object to the class that the object was made from.


The definition "Object is an instance of a class", is conceptually wrong, but correct as per implementation. Actually the object oriented features are taken from the real life, for focusing the mind of programmer from more to less. In real life classes are designed to manage the object.For eg- we human beings have a caste, religion,nationality and much more. These casts, religion, nationality are the classes and have no existence without human beings. But in implementation there is no existence of objects without classes. Object- Object is an discrete entity having some well defined attribute. Here discrete mean something that makes it unique from other. Well defined attribute make sense in some context. Class- Classification of object having some common behaviour or objects of some common type.


While the above answers are correct, another way of thinking about Classes and Objects would be to use real world examples: A class named Animal might contain objects like Cat, Dog or Fish. An object with a title of Bible would be of class Book, etc. Classes are general, objects are specific. This thought example helped me when I was learning Java.


Class is a template or type. An object is an instance of the class.

For example:

public class Tweet {

}

Tweet newTweet = new Tweet();

Tweet is a class and newTweet is an object of the class.

참고URL : https://stackoverflow.com/questions/1215881/the-difference-between-classes-objects-and-instances

반응형