"instantiated"와 "initialized"의 차이는 무엇입니까?
Microsoft의 VB 튜토리얼에서 사용되는 이 두 단어를 들었습니다.NET. 변수와 관련하여 사용될 때 이 두 단어의 차이점은 무엇입니까?
기준 유형에 대한 값
C#의 변수는 두 그룹 중 하나에 있습니다.값 유형 또는 참조 유형입니다.다음과 같은 유형int
그리고.DateTime
값 유형입니다.반대로 작성한 클래스는 참조 유형입니다.C# 문자열도 참조 유형입니다.에 있는 대부분의 것들.NET 프레임워크는 참조 유형입니다.
변수의 부분
변수 이름과 값이 있습니다.두 파트.
변수의 이름은 사용자가 선언하는 이름입니다.값은 사용자가 할당하는 값입니다.
변수가 초기화됨
모든 변수에는 항상 변수가 선언된 시점에 초기 값이 지정됩니다.따라서 모든 변수가 초기화됩니다.
값 유형의 경우 다음과 같습니다.int
당신이 명시적으로 그렇게 하지 않으면 컴파일러는 유효한 값을 줄 것을 줄 것입니다. int
기본적으로 0으로 초기화됩니다.DateTime
으로 초기화DateTime.MinValue
결석으로
참조 유형 변수는 지정한 개체로 초기화됩니다.그렇지 않은 경우 컴파일러는 개체(즉, 유효한 값)를 할당하지 않습니다.이 경우 값은 다음과 같습니다.null
아무 것도 아닌따라서 참조가 null로 초기화됩니다.
개체가 인스턴스화됩니다.
인간은 태어납니다.개체가 인스턴스화됩니다.아기는 인간의 인스턴스이고, 개체는 클래스의 인스턴스입니다.
클래스의 인스턴스를 만드는 작업을 인스턴스화(Ta-Da!)라고 합니다.
선언, 초기화 및 인스턴스화는 다음과 같이 함께 수행됩니다.
MyClass myClassyReference = new MyClass();
위에서 "... 객체의 인스턴스를 생성합니다."라고 말하는 것은 잘못된 것입니다.."
편집 - 댓글 토론에서 영감을 받았습니다.
다른 용어를 사용하여 (위의) 세 가지 다른 사항이 진행되고 있으며, 해당 용어는 상호 교환할 수 없습니다.
- 는 - 기준변다같이선언됩니다과음는수▁-▁is▁declared다로 선언됩니다.
MyClass myClassyReference
- 객체는 인스턴스화됩니다(... 주어진 클래스에서 암시됨) -
new MyClass()
- 개체가 변수에 할당됩니다.
=
.
사실을 다시 설명하는 중:
참조 유형 변수는 단순히 "참조"라고도 합니다."값 유형 변수"는 참조가 아닙니다.
이것: "객체 A는 물체의 인스턴스이다"는 것은 매우 잘못된 것입니다.개체 A가 "개체의 인스턴스"인 경우B" 그렇다면 객체 A는 객체 B의 유형 - 현재 상태 - 무엇이든 - 무엇이든 - 생명을 시작하는 것이어야 합니다.객체 B가 변경되면 객체 D, E, F를 생성하면 어떨까요?아니, 아니!이것은 개념적이고 기술적인 경우인 "객체 A는 클래스의 인스턴스입니다."인스턴스"와 "인스턴스 오브"는 정확한 의미를 가집니다. 개체는 클래스에서 유형, 정의 및 값을 가져옵니다.
MyClass myClassyReference = null
으로 "null에 "null을 하고 있습니다"라고 "아니오" "을 참조하고 "가 아무것도 않습니다"null입니다"라고 . "변수가 아무것도 참조하지 않음" 또는 "참조가 null입니다"라고 말합니다.
실용적 적용:
저는 당신의 코드에 손가락을 대고 "이 인스턴스에 잘못된 속성이 있습니다.그래서 루프가 고장난 것일 수도 있습니다.인스턴스화하는 동안 매개 변수의 유효성을 검사해야 합니다."(즉, 생성자 인수).
당신의 코드에서 이것을 봅니다.
MyClass myClassyReference; myClassyReference.DoSomething();
"변수를 선언했지만 할당하지 않았습니다. 변수는 null이므로 아무것도 참조하지 않습니다.메소드 호출이 예외를 던지는 이유입니다."
편집 종료
참을 수 없는 존재의 가벼움
참조 유형 변수의 이름과 값이 독립적으로 존재합니다.그리고 저는 독립을 의미합니다.
인스턴스화된 개체는 참조를 가질 수도 있고 가지지 않을 수도 있습니다.
인스턴스화된 개체에는 많은 참조가 있을 수 있습니다.
선언된 참조는 개체를 가리킬 수도 있고 가리키지 않을 수도 있습니다.
변수는 값으로 초기화됩니다.개체에 메모리가 할당되고 생성자가 실행되면 개체가 인스턴스화됩니다.
예를 들어 다음과 같은 변수가 있습니다.
Dim obj as Object
이 변수는 초기화되지 않았습니다.값을 할당하면obj
변수입니다. 변수가 초기화됩니다.다음은 초기화의 예입니다.
obj = 1
obj = "foo"
인스턴스화는 매우 다르지만 일반적으로 초기화가 뒤따르기 때문에 관련이 있습니다.
Dim obj As New Object()
에, 의앞줄에서코드,,obj
변수가 새 항목에 대한 참조로 초기화됩니다.Object
그것은 인스턴스화되었습니다.우리는 새로운 것을 말합니다.Object
인스턴스의 새 인스턴스를 생성했기 때문에 인스턴스화되었습니다.
이제 저는 그 VB를 믿습니다.NET은 위의 코드에서 할당이 발생하고 있는지 명확하지 않기 때문에 C#보다 훨씬 더 혼란스럽게 만듭니다.C#에서 변수의 인스턴스화와 초기화가 모두 있다는 것이 훨씬 더 명확합니다.
Object obj = new Object();
무언가를 초기화하는 것은 그것을 초기 값으로 설정하는 것입니다.어떤 것을 인스턴스화하는 것은 그것의 인스턴스를 만드는 것입니다.
종종 이것은 다소 같은 것입니다.다음 항목:
SqlConnection conn = new SqlConnection();
예를 들어 설명합니다.SqlConnection
객체, 그리고 초기화합니다.conn
변수를 해당 인스턴스로 설정합니다.
개체의 생성자도 개체의 속성을 기본값으로 설정하기 때문에 개체를 인스턴스화하면 초기화된다고 말하는 것이 옳습니다. (오류, 개체가 인스턴스화된 후 초기화하기 위해 명시적으로 호출해야 하는 메서드를 노출하는 경우가 종종 있습니다.)
*인스턴스는 클래스 또는 객체의 인스턴스를 만드는 것을 의미합니다.초기화는 어떤 목적으로든 동일한 개체 또는 클래스를 *초기화하는 것을 의미합니다.**
인스턴스화는 개체의 인스턴스가 생성되었음을 의미합니다.시작됨은 동일한 개체가 일부 초기화를 수행했음을 의미합니다.
클래스 또는 개체를 인스턴스화할 때 클래스 또는 개체의 새 인스턴스를 만들거나 메모리를 할당하여 "보유"합니다.이 개체를 초기화하면 인스턴스화 중에 수행되는 지침이 됩니다.
인스턴스화는 클래스의 인스턴스를 만드는 것입니다.그런 다음 해당 인스턴스가 개체이므로 속성을 설정하거나 해당 인스턴스에 메서드를 호출할 수 있습니다(작업을 수행하도록 지시합니다.
시작은 어떤 것에 대한 초기 조건 집합을 설정하는 것입니다.어떤 것은 객체일 수도 있고, 어떤 것을 시작하라고 지시할 수도 있고, 어떤 것이 값을 할당하는 변수일 수도 있습니다.
개체는 다른 항목을 초기화하거나 시작의 일부로 다른 개체를 인스턴스화할 수 있습니다.
차이점은 인스턴스화는 무언가를 할 수 있는 것을 창조하는 것이고, 시작은 성취되는 것이라는 것입니다.
Java 문서 참조: https://docs.oracle.com/javase/tutorial/java/javaOO/objectcreation.html
"점 원점One = 새로운 점(23, 94);
Declaration: The code set in bold are all variable declarations that associate a variable name with an object type.
Instantiation: The new keyword is a Java operator that creates the object.
Initialization: The new operator is followed by a call to a constructor, which initializes the new object."
이렇게 볼 수 있습니다.아래 코드 라인의 경우:
var p = new Person();
위의 행은 다음 두 가지 방법으로 읽을 수 있습니다.
- 변수 p가 사용자 클래스로 초기화되었습니다.
- 사용자 클래스가 변수 p로 인스턴스화되었습니다.
참조의 주제 또는 맥락 문제.변수로 대화할 때는 이니셜라이즈라는 단어를 사용합니다.클래스/유형의 관점에서 대화할 때, 우리는 인스턴트라는 단어를 사용합니다.
인스턴스화는 클래스의 인스턴스를 만들기 위해 메모리를 할당하는 것을 의미하는 반면 초기화는 변수 이름을 해당 인스턴스에 할당하여 해당 인스턴스의 이름을 지정하는 것을 의미합니다.
예:SqlConnection conn = new SqlConnection();
여기서new
하는 키워드이며, 인턴스메할키당워입니다드는하모리스를에▁which▁is▁a▁keyword다니▁allocates키입니다.conn
는 해당 인스턴스에 할당된 변수 이름입니다.
다른 분들이 차이점을 설명해 주셨으니 자세히 말씀드리지 않겠습니다.그러나 인스턴스화가 개체를 제대로 초기화하지 못하는 경우가 있습니다.개체를 인스턴스화할 때는 일부 데이터로도 초기화합니다.로직을 , 으로 ""/" "" "" ""에 의해 수행됩니다.new
키워드(메모리 할당 제한, 참조 복사 등).그러나 인스턴스화로 인해 개체가 초기화되지 않았다고 말할 수 있는 개체에 대한 유효한 상태가 반드시 발생할 필요는 없습니다.다음은 개체를 인스턴스화할 수 있지만 초기화할 수 없는 실제 예입니다(예: C#).
class P { string name = "Ralf"; }
WriteLine(new P().name); // "Ralf";
WriteLine((FormatterServices.GetUninitializedObject(typeof(P)) as P).name); // null
GetUninitializedObject
생성자를 호출하여 개체를 인스턴스화하지 않습니다(단, 내부 마법).
값할 수 있습니다. 값 유형은 인스턴스화될 때 때문입니다.new..
하지만 그것은 인스턴스화의 정의에 달려 있습니다.
객체 지향적인 용어:
인스턴스화는 초기 상태가 정의되지 않은 클래스의 개체를 만드는 것을 의미합니다.
클래스는 프로그램에서 개체를 생성하는 데 사용되는 Blueprint입니다.생성된 개체는 Blueprint와 호환되며 프로그램에서 조작할 수 있습니다.예를 들어 변수
current_client
그리고.previous_client
할 수 있습니다.Customer
클래스 X의 인스턴스는 클래스 X에서 인스턴스화된 개체입니다.코드에서 클래스는 개체가 수행할 수 있는 작업에 대한 영구적인 정적 설명이지만 개체 자체는 일시적이고 동적입니다.변경할 수 있는 개별 상태(예: 고객 이름, 관련 주문)가 있습니다.인스턴스화는 다음과 같이 수행할 수 있습니다.
dim current_client as new Customer
(VB)
Customer* current_client = new Customer()
(C++)
current_client = Customer()
(이썬파))new Customer
,new Customer()
그리고.Customer()
인스턴스화를 트리거하기 위해 서로 다른 언어로 된 동등한 형식입니다.결국 객체는 존재와 작동에 필요한 메모리와 기타 자원을 방출하기 위해 파괴됩니다.
초기화는 사용하기 전에 개체에 초기 상태를 할당하는 것을 의미합니다.
이 초기화는 인스턴스화 프로세스의 일부가 될 수 있습니다. 이 경우 값은 개체의 생성자에 있는 개체 속성에 명시적으로 할당됩니다.또는 필요 여부를 결정할 수 있는 사용자에게 맡길 수 있습니다.후자의 방법은 더 빠른 인스턴스화를 허용하지만 이 코드가 이 속성에 값을 명시적으로 할당하기 전에 사용자의 코드가 어떤 속성의 값도 읽지 않아야 합니다.예: 이 코드:
current_client.count = current_client.count + 1
특성 앞에는 허용되지 않습니다.
count
실행 오류를 트리거할 수 있는 잘못된 값을 포함하여 초기 값을 포함할 수 있으므로 사용자가 설정했습니다.
언급URL : https://stackoverflow.com/questions/2330767/what-is-the-difference-between-instantiated-and-initialized
'programing' 카테고리의 다른 글
에서 구조체의 기본 생성자를 정의할 수 없는 이유는 무엇입니까?NET? (0) | 2023.05.14 |
---|---|
Git Cherry-pick vs 병합 워크플로우 (0) | 2023.05.14 |
git 디렉터리에 없는 동안 git pull (0) | 2023.05.14 |
지난 10일의 날짜가 포함된 기록을 나열하는 방법은 무엇입니까? (0) | 2023.05.14 |
절인 개체를 로드할 수 없습니다. (0) | 2023.05.14 |