2023. 10. 24. 12:39ㆍCS, 기술면접
값형식 vs 참조형식
값 형식 : 스택 메모리 영역에 할당 되는 데이터
참조 형식 : 힙 메모리 영역에 할당 되는 값의 주소, 단수히 값 자체가 아닌 값이 가르키는 주소이다.
Call By Value vs Call By Reference
Call By Value : 인자로 받은 값을 복사하여 처리, 원본은 보존된다.
Call By Reference : 인자로 받은 값의 주소를 참조하여 직접 값(원본)에 영향을 주는 방식, 복사하지 않음
얕은 복사 vs 깊은 복사
얕은 복사 : 객체의 참조만 복사하는 것, 즉 값을 복사하는 것이 아닌 값이 가르키는 주소를 복사 (스택 영역에 새로운 메모리가 생성되고, 두 인스턴스의 스택 메모리가 가르키는 힙 영역의 메모리가 같다는 것)
깊은 복사 : 얕은 복사와 반대로 참조를 복사하지 않고 값을 복사하는 것이다. 참조 값의 복사가 아닌 참조된 객체 자체가 복사 되는 것 (할당된 메모리가 복사되어 두 인스턴스가 완전히 다름을 의미)
* 얕은복사 : 참조만(원), 깊은 복사 : 참조에 있는 값 복사(원본에 있는 값)
구조체 vs 클래스
구조체 : 데이터와 기능을 캡슐화 할 수 있는 값 형식, 스택 메모리 영역에 할당
클래스 : 데이터와 기능을 캡슐화 할 수 있는 참조 형식, 힙 메모리 영역에 할당하는 값의 주소
* 예시로 구조체 변수와 클래스 객체가 하나씩 있을 떄, 같은 값을 가지는 복사본을 만든다고 가정하면
구조체 변수는 값 형식으로 스택 메모리 영역에 복사본 구조체 변수 메모리 공간이 할당되고 원본과 같은 값을 가지는데 복사본은 메모리를 새로 할당 받았으므로 원본과 주소가 다르고 값을 바꾸어도 원본과 복사본의 값은 서로 영향을 주지 않는다.
클래스 인스턴스는 참조 형식으로 같은 값이 아닌 같은 값의 주소를 복사하고, 원본값과 복사본의 값이 가르키는 주소는 동일한 주소를 가르키게 된다 따라서 값을 변경하는 경우 두 객체는 주소를 서로 공유하기 때문에 같은 값으로 변경된다.
결국 클래스는 원본과 복사본의 주소가 같아 값이 변경되면 서로 영향을 준다.
'CS, 기술면접' 카테고리의 다른 글
오버로딩 vs 오버라이딩 / 가상함수 테이블 (0) | 2023.10.27 |
---|---|
객체 지향 프로그래밍(OOP)과 4특징 (0) | 2023.10.26 |
박싱(Boxing), 언박싱(UnBoxing) (0) | 2023.10.24 |
메모리 구조 (프로세스 메모리 영역) (0) | 2023.10.16 |
가비지 컬렉터 (Garbage Collector) (0) | 2023.10.13 |