변수, 객체 및 참조의 차이점은 무엇입니까?
이 질문에 이미 답변이 있습니다.
- 클래스, 참조 및 객체는 무엇입니까? 10 개의 답변
정확히 변수 , 객체 , 참조 의 차이점은 무엇 입니까?
예를 들어, 그것들은 모두 어떤 유형을 가리키고, 그것들은 모두 값을 보유해야합니다 (물론 임시 null 허용 유형이없는 한). 그러나 정확히 그들의 함수와 구현은 서로 어떻게 다릅니 까?
예:
Dog myDog = new Dog(); //variable myDog that holds a reference to object Dog
int x = 12; //variable x that hold a value of 12
개념은 같지만 어떻게 다릅니 까?
(명확하게 말하면, 여기서 제가 제공하는 설명은 Java 및 C #에만 해당됩니다. 다른 언어에도 적용된다고 가정하지 마십시오.
나는 누군가에게 내가 사는 곳을 말하는 비유를 사용하는 것을 좋아합니다. 종이에 내 주소를 적을 수 있습니다.
- 변수는 종이와 같습니다. 그것은 가치를 가지고 있지만 그 자체로는 가치가 아닙니다. 거기에있는 것을 지우고 대신 다른 것을 쓸 수 있습니다.
- 내가 종이에 적는 주소는 참고와 같다. 내 집은 아니지만 내 집으로 이동 하는 방법입니다 .
- 내 집 자체는 물건과 같다. 동일한 객체에 대한 여러 참조를 제공 할 수 있지만 객체는 하나뿐입니다.
도움이 되나요?
값 유형과 참조 유형의 차이점은 종이에 쓰여지는 것입니다. 예를 들면 다음과 같습니다.
int x = 12;
숫자 12가 적힌 종이를 직접 쓰는 것과 같습니다. 이므로:
Dog myDog = new Dog();
Dog 객체 내용 자체를 종이에 쓰지 않습니다. new Dog
를 만든 다음 해당 종이에 dog에 대한 참조를 씁니다.
비유 사적 용어로 :
- 변수는 메모리의 저장 위치를 나타냅니다. 컴파일 시간에 참조 할 수있는 이름이 있으며 실행 시간에는 항상 컴파일 시간 유형과 호환되는 값이 있습니다. (예를 들어,
Button
변수 가있는 경우 값은 항상 유형의 개체Button
나 일부 하위 클래스 또는null
참조에 대한 참조가됩니다.) - 개체는 일종의 별도의 개체입니다. 중요한 것은, 가변 또는 임의의 표현식의 값은 결코 목적만을 참조. 객체는 효과적으로 다음으로 구성됩니다.
- 필드 (주)
- 유형 참조 (객체의 수명 동안 절대로 변경할 수 없음)
- 모니터 (동기화 용)
- 참조는 객체에 액세스하는 데 사용되는 값입니다 (예 : 객체에 대한 메서드 호출, 필드 액세스 등). 일반적으로
.
연산자를 사용하여 참조를 탐색합니다 . 예를 들어,foo
가Person
변수이면 (참조)foo.getAddress().getLength()
의 값을 취하고 해당 참조가 참조하는 객체를foo
호출getAddress()
합니다. 결과는String
참조 가 될 수 있습니다. 그런 다음 해당 참조 가 참조getLength()
하는 객체 를 호출 합니다.
이러한 개념을 설명 할 때 종종 다음과 같은 비유를 사용합니다.
물체가 풍선이라고 상상해보십시오. 변수는 사람입니다. 모든 사람은 가치 유형 팀 또는 참조 유형 팀에 있습니다. 그리고 그들은 모두 다음 규칙에 따라 작은 게임을합니다.
값 유형에 대한 규칙 :
- 당신은 공기로 가득 찬 풍선을 팔에 안고 있습니다. (값 유형 변수는 객체를 저장합니다.)
- 항상 정확히 하나의 풍선을 들고 있어야합니다. (값 유형은 Null을 허용하지 않습니다.)
- 다른 사람이 당신의 풍선을 원할 때, 그들은 자신의 똑같은 풍선을 날려 버려 팔에 붙들 수 있습니다. (값 유형에서는 개체가 복사됩니다.)
- 두 사람이 같은 풍선을 잡을 수 없습니다. (값 유형은 공유되지 않습니다.)
- 다른 풍선을 들고 싶다면 이미 들고있는 풍선을 터 뜨리고 다른 풍선을 잡아야합니다. (값 유형 객체는 대체 될 때 소멸됩니다.)
참조 유형 에 대한 규칙 :
- 헬륨으로 채워진 풍선으로 이어지는 줄을 잡을 수 있습니다. (참조 유형 변수는 객체에 대한 참조를 저장합니다.)
- 당신은 한 줄의 줄을 잡을 수 있고, 또는 한 줄의 줄을 전혀 가질 수 없습니다. (참조 유형 변수는 null을 허용합니다.)
- 다른 사람이 당신의 풍선을 원할 때, 그들은 자신의 줄을 얻어 당신과 같은 풍선에 묶을 수 있습니다. (참조 유형에서는 참조가 복사됩니다.)
- 여러 사람이 모두 같은 풍선으로 이어지는 끈 조각을 들고있을 수 있습니다. (참조 유형 객체는 공유 할 수 있습니다.)
- 특정 풍선에 줄을 잡고있는 사람이 적어도 한 명 이상있는 한 풍선은 안전합니다. (참조 유형 객체는 도달 할 수있는 한 살아 있습니다.)
- 특정 풍선에 대해 모두가 결국 그것을 놓으면 그 풍선은 날아가고 아무도 더 이상 닿을 수 없습니다. (언젠가는 참조 유형 객체에 도달하지 못할 수 있습니다.)
- 나중에 게임이 끝나기 전에 대기압으로 인해 잃어버린 풍선이 저절로 터질 수 있습니다. (연결할 수없는 개체는 비 결정적인 가비지 수집 대상입니다.)
대답하는 질문처럼 생각할 수 있습니다.
물체는 무엇인가 ...
그것은 세상의 어떤 물리적 물체와 같으며, 스스로 인식 할 수 있고 다른 "사물"과 구별되는 중요한 속성을 가진 "사물"입니다. 개가 짖기 때문에 개라는 것을 아시다시피, 던지면 꼬리를 움직이고 공을 쫓아갑니다.
변수는 ...
당신이 직접 손을 보는 것처럼. 각각은 손 그 자체입니다. 그들은 피부 안에 손가락, 손톱 및 뼈가 있지만 하나는 왼손이고 다른 하나는 오른쪽입니다. 즉, 동일한 유형 / 종류의 두 "물건"을 가질 수 있지만 모든 것들은 그 자체로 다를 수 있고 다른 값을 가질 수 있습니다.
A reference is a where...
If you look at two houses in a street, although they're have their own facade, you can get to each one by their one unique address, meaning, if you're far away like three blocks far or in another country, you could tell the address of the house cause they'll still be there where you left them, even if you cannot point them directly.
Now for programming's sake, examples in a C++ way
class Person{...}
Person Ana = new Person(); //An object is an instance of a class(normally)
That is to say, Ana is a person, but she has unique properties that distinguishes her from another person.
&Ana //This is a reference to Ana, that is to say, a "where" does the variable
//"Ana" is stored, wether or not you know it's value(s)
Ana
itself is the variable for storing the properties of the person named "Ana"
Jon's answer is great for approaching it from analogy. If a more concrete wording is useful for you, I can pitch in.
Let's start with a variable. A variable is a [named] thing which contains a value. For instance, int x = 3
defines a variable named x, which contains the integer 3. If I then follow it up with an assignment, x=4
, x now contains the integer 4. The key thing is that we didn't replace the variable. We don't have a new "variable x whose value is now 4," we merely replaced the value of x with a new value.
Now let's move to objects. Objects are useful because often you need one "thing" to be referenced from many places. For example, if you have a document open in an editor and want to send it to the printer, it'd be nice to only have one document, referenced both by the editor and the printer. That'd save you having to copy it more times than you might want.
However, because you don't want to copy it more than once, we can't just put an object in a variable. Variables hold onto a value, so if two variables held onto an object, they'd have to make two copies, one for each variable. References are the go-between that resolves this. References are small, easily copied values which can be stored in variables.
So, in code, when you type Dog dog = new Dog()
, the new operator creates a new Dog Object, and returns a Reference to that object, so that it can be assigned to a variable. The assignment then gives dog
the value of a Reference to your newly created Object.
new Dog() will instantiate an object Dog ie) it will create a memory for the object. You need to access the variable to manipulate some operations. For that you need an reference that is Dog myDog. If you try to print the object it will print an non readable value which is nothing but the address.
myDog -------> new Dog().
'Program Tip' 카테고리의 다른 글
Owin Twitter 로그인-유효성 검사 절차에 따라 원격 인증서가 유효하지 않습니다. (0) | 2020.11.06 |
---|---|
런타임에 하위 클래스가 클래스의 인스턴스인지 확인하는 방법은 무엇입니까? (0) | 2020.11.06 |
Python의 AWS Lambda 가져 오기 모듈 오류 (0) | 2020.11.06 |
시간 명령에 대한 사용자 정의 형식 (0) | 2020.11.06 |
node.js에서 데이터베이스를 조롱합니까? (0) | 2020.11.06 |