인스턴스와 개체의 차이점은 무엇입니까? 차이가 있습니까?
인스턴스와 개체의 차이점은 무엇입니까? 차이가 있습니까?
답변:
인스턴스와 객체는 객체 지향 프로그래밍 에서 가져온 것 입니다.
Java, C ++ 및 Smalltalk와 같은 일부 프로그래밍 언어의 경우 코드를 설명하고 이해하는 것이 중요합니다. 구조적 프로그래밍에서 사용되는 다른 언어에서는이 개념이 존재하지 않습니다.
이것은 Structural Programming의 관점입니다. 너무 많은 시간을 소비해야하는 실질적인 차이는 없습니다. 어떤 사람들은 글을 쓰는 데 많은 공간을 차지할 수있는 멋진 언어가있을 수 있지만, 결국에는 코더, 개발자, 프로그래머, 아키텍트에 관한 한 클래스의 인스턴스와 객체는 같은 것을 의미하며 종종 서로 바꿔서 사용할 수 있습니다 . 나는 내 경력에서 까다로울 사람을 만난 적이 없으며 실제로는 없기 때문에 차이점을 지적하려고 30 분을 소비합니다. 다른 개발 노력에 더 많은 시간을 할애 할 수 있습니다.
업데이트 Swift와 관련하여 Swift를 발명 한 Apple이 선호하는 것은 다음과 같습니다.
클래스의 인스턴스는 전통적으로 객체로 알려져 있습니다. 그러나 Swift 클래스와 구조는 다른 언어보다 기능면에서 훨씬 더 가깝고이 장의 대부분은 클래스 또는 구조 유형의 인스턴스에 적용 할 수있는 기능을 설명합니다. 이 때문에 좀 더 일반적인 용어 인 인스턴스가 사용됩니다.
훌륭한 질문입니다.
가능한 가장 간단한 방법으로 설명하겠습니다. 바구니에 사과 5 개가 있다고 가정 해 보겠습니다. 각각의 사과는 Apple 유형의 개체로, 몇 가지 특성 (즉, 크고 둥글고 나무에서 자랍니다)이 있습니다.
프로그래밍 측면에서 크기 : big, 모양 : 원형, 서식지 : 나무에서 자라는 변수를 가진 Apple이라는 클래스를 가질 수 있습니다. 바구니에 사과 5 개를 넣으려면 인스턴스화. Apple apple1, Apple apple2, Apple apple3 etc...
.
대안으로 : 객체는 무언가의 정의이고 인스턴스는 물리적 인 것입니다.
이게 말이 되요?
인스턴스 : 인스턴스는 참조 (사본)를 만드는 것입니다.
object : new 연산자를 사용하여 메모리 위치가 개체 (클래스의 런타임 엔터티 임)와 연결된 경우를 의미합니다.
간단히 말해서 Instance는 특정 시간에 개체의 복사본을 나타내는 반면 개체는 클래스의 메모리 주소를 나타냅니다.
의자를 몇 개 만들고 있다고 가정 해 보겠습니다.
의자를 만들고 조립하는 방법을 보여주는 다이어그램은 소프트웨어 클래스에 해당합니다.
그 다이어그램의 패턴에 따라 5 개의 의자를 만들었다 고 가정 해 보겠습니다. 마찬가지로 클래스의 패턴에 따라 5 개의 소프트웨어 객체를 구성 할 수 있습니다.
각 의자에는 각 특정 의자를 식별하기 위해 좌석 바닥에 고유 번호가 있습니다. 의자 3은 의자 패턴의 한 인스턴스입니다. 마찬가지로, 메모리 위치 3은 소프트웨어 패턴의 한 인스턴스를 포함 할 수 있습니다.
따라서 인스턴스 (의자 3)는 의자 패턴의 고유 한 특정 표현입니다.
개체 :
기본적으로 상태 (변수)와 동작 (메소드)이있는 소프트웨어 번들입니다.
클래스 :
객체 인스턴스에 대한 청사진 (템플릿)-고유 한 객체입니다. 예를 들어 객체를 두 번 생성한다는 것은 두 개의 인스턴스를 만들었다는 의미입니다.
예를 들어 보겠습니다
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는 객체에 할당 된 변수입니다.
객체와 인스턴스는 거의 동일합니다. 하지만 아주 작은 차이가 있습니다. 경우 Car
클래스이며, 3 Car
의 3 가지 개체입니다. 이러한 모든 개체는 인스턴스입니다. 따라서이 3 대의 자동차는 Car
클래스 인스턴스의 객체입니다 .
그러나 "인스턴스"라는 단어는 "구조 인스턴스"를 의미 할 수도 있습니다. 그러나 객체는 클래스 전용입니다.
모든 개체는 인스턴스입니다. 모든 인스턴스가 객체 여야하는 것은 아닙니다. 인스턴스는 "구조 인스턴스"또는 "객체"일 수 있습니다. 이것이 당신에게 차이가 분명해지기를 바랍니다.
객체는 속성 및 메서드와 같은 특정 기능과 특성을 가진 정적 인 구조이며 무엇이든 될 수 있습니다 (문자열, 사용자 컨트롤 등).
인스턴스는 사용하고 작업을 수행 할 수있는 해당 개체의 고유 한 복사본입니다.
컴퓨터와 같은 제품을 상상해보십시오.
xw6400 워크 스테이션은 개체입니다.
xw6400 워크 스테이션 (또는 Your WIFE의 xw6400 워크 스테이션)은 xw6400 워크 스테이션 개체의 인스턴스입니다.
정의 개체 및 인스턴스 개체를 보면-
런타임에 클래스 멤버에게 할당 된 메모리를 객체라고하고 객체는 Class의 인스턴스입니다.
인스턴스의 정의를 보겠습니다.
런타임시 Any For Any 에 할당 된 메모리 는 인스턴스 변수로 호출됩니다.
이제 Malloc, Calloc, Realloc을 통해 C에서 발생 하는 런타임 메모리 할당 의 의미를 이해하십시오 .
struct p
{
}
p *t1
t1=(p) malloc(sizeof(p))
따라서 여기에서도 런타임 메모리 할당을 할당하고 있지만 여기서는 인스턴스로 호출하므로 t1은 인스턴스로 여기에서는 t1을 객체로 말할 수 없으므로 모든 객체는 Class의 인스턴스이지만 모든 인스턴스는 Object가 아닙니다.
나는 이것을 설명하기 위해 아무도 코드를 사용하지 않은 한 사람을 제외하고는 믿을 수 없습니다.
// 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"는 메모리 위치를 포함합니다 (런타임에).
변수가 사용자 정의 유형 (클래스)으로 선언되면 객체라고하는 참조 만 생성됩니다. 이 단계에서는이 객체에 메모리가 할당되지 않습니다 . 포인터 역할을합니다 (향후 개체가 저장 될 위치). 이 과정을 '선언'이라고합니다.
Employee e; // e is an object
반면에 사용자 정의 유형의 변수가 new
연산자를 사용하여 선언되면 힙의 메모리를이 객체에 할당하고 할당 된 메모리에 대한 참조를 반환합니다. 이 객체는 이제 instance 라고 합니다 . 이 과정을 'Instantiation'이라고합니다.
Employee e = new Employee(); // e is an instance
반면에 Java와 같은 일부 언어에서 객체는 Java에 대한 Oracle의 설명서에 작성된 줄에서 알 수 있듯이 인스턴스와 동일합니다 .
참고 : "클래스 인스턴스화"라는 구문은 "객체 생성"과 동일한 의미입니다. 객체를 생성 할 때 클래스의 "인스턴스"를 생성하므로 클래스를 "인스턴스화"하는 것입니다.
각 객체는 해당 클래스의 인스턴스라고 말하지만 클래스의 각 인스턴스에는 각 속성에 대한 자체 값이 있습니다.
클래스를 인스턴스화하면 (new 사용) 인스턴스화 된 것은 객체가됩니다. 객체는 캡슐화, 다형성, 객체 지향 프로그래밍의 추상화 원칙 및 프로그램이 클래스에 정의 된 인스턴스 멤버를 사용하기 위해 상호 작용하는 실제 사물을 고수 할 수있는 것입니다. 개체에 인스턴스 멤버 (비 정적 멤버)가 포함됩니다.
따라서 클래스의 인스턴스는 객체입니다. '인스턴스'라는 단어는 그것이 태어난 곳에서 유래를 언급 할 때 사용되며, '클래스의 객체'에 비해 '클래스의 인스턴스'라고 말하면 더 명확합니다 (후자는 사용할 수 있음).
중첩 된 클래스 ( https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html) 에 대한이 Java 문서의 '내부 클래스'섹션도 읽을 수 있습니다.
Java는 객체 지향 프로그래밍 언어 (OOP)입니다. 즉, 기본 유형을 제외한 Java의 모든 것이 객체입니다.
이제 Java 객체는 실제 객체와 유사합니다. 예를 들어, 현재 속도 및 색상과 같은 속성을 갖는 자동차 객체를 Java로 만들 수 있습니다. 다음과 같은 행동 : 가속 및 주차.
그것은 Object 입니다.
반면에 Instance 는 다음과 같이 고유하게 초기화 된 해당 객체의 복사본입니다 Car car = new Car()
.
Java 클래스 및 객체에 대해 자세히 알아 보려면 확인하십시오.
빠르고 간단한 답변
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
반면 instance
s는 메소드를 가지고 있습니다. s가 objects
아닌 가비지 수집 instance
입니다.
그러나 내가 말했듯이, 이것은 내가 보는 방식 일 뿐이며, 그들 사이에 표준 정의를 위해 참조 할 수있는 조직이 없다고 생각하며 모든 사람이 약간 다른 이해 / 정의를 가질 것입니다 (물론 한계 내에서) .
농구라는 클래스가 있다고 가정하면 개체는 클래스가 될 수 있습니다.
하지만 여러 개의 농구 공이 필요하므로 코드에서 농구 공을 1 개 이상 만듭니다.
basketball1 및 basketball2라고 말합니다. 그런 다음 애플리케이션을 실행합니다. 이제 농구 개체의 인스턴스가 2 개 있습니다.
객체는 클래스를 의미하고 인스턴스는 객체를 의미합니다. 즉, 인스턴스는 특정 값을 가진 객체의 복사본입니다.