-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Value / Reference semantics에 대하여 설명해주세요. #31
Comments
값 타입(value type)값 타입의 대표적인 타입은 구조체와 열거형이 있습니다. 값 타입 인스턴스를 생성하여 변수에 저장하게 되면 Data 영역에 저장된 구조체에서 인스턴스가 생성되어 스택 영역에 저장됩니다. 값 타입은 생성된 인스턴스의 실제 값을 가지고 복사본을 생성하기 때문에 원본과 별개로 독자적인 데이터 값을 가지게 됩니다. 따라서 값 타입으로 선언한 경우에는 하나의 인스턴스에 대해 여러개의 복사본이 존재할 수 있고, 복사본들은 원본에 영향을 주지 않는 자신만의 데이터를 갖게 됩니다. 참조 타입(reference type)참조 타입의 대표적인 타입은 class입니다. 참조 타입의 경우 값 타입과 달리 인스턴스의 실제 메모리는 Heap(힙) 영역에 저장되고, 스택 영역에 직접 값을 저장하는 값 타입과 달리 참조 타입은 실제 값을 저장하는 것이 아닌 인스턴스가 위치하고 있는 메모리 주소 값을 복사해서 저장하기 때문에 하나의 인스턴스에 대한 복사본이 여러개 존재하는 값타입과 달리 하나의 클래스 인스턴스가 존재하고, 그 클래스 인스턴스의 주소를 참조하는 여러 개의 참조체가 존재하게 됩니다. 따라서 참조체의 값을 변경하게 되면 원본 클래스 인스턴스의 값을 변경하게 되고 이를 참조하는 모든 참조체들에 변경이 일어납니다. |
Value Semantics는 서로 다른 변수들이 완전히 독립적인 값을 가진 것처럼 동작한다는 것을 의미합니다. Reference Semantics는 서로 다른 변수가 동일한 인스턴스를 참조하여 메모리 효율적으로 동작하는 것을 의미하는 것 같습니다. |
🙋🏻 답변값 타입과 참조 타입은 데이터를 어떤 형태로 전달하고 관리할지를 결정하는데 중요한 요소입니다. 우선 값 타입의 경우 struct, enum, tuple과 같은 타입이 대표적인 예시입니다. 값 타입은 변수나 상수에 할당될 때 복사되어 사용합니다. 그렇다보니 복사한 인스턴스에 별도의 변경을 가해도 원본에는 변경이 반영되지 않는 특성을 갖고 있습니다. 또한 값이 복사될 때 마다 스택 메모리에 새롭게 할당되고, 자동으로 관리가 됩니다. 참조 타입의 경우 class, function, closuer와 같은 타입이 대표적인 예시입니다. 참조 타입이 할당될 때는 한번만 힙에 할당되고, 이후 상수에 변수에 할당할 때 인스턴스의 참조가 복사됩니다. 이러한 특성덕분에 다른 인스턴스에 변경을 가하면 해당 인스턴스를 참조하고 있던 모든 곳에서 변경이 반영됩니다. 🏷️ 키워드
|
값 타입의 대표적인 예시는 구조체와 열거형입니다. 참조 타입의 대표적인 예시는 클래스와 클로저입니다. |
No description provided.
The text was updated successfully, but these errors were encountered: