면접 질문 / 얕은 복사와 깊은 복사의 차이점은 무엇인가요? / 박싱과 언박싱이 일어나는 과정을 메모리 관점에서 설명해주세요. /
2024. 12. 18. 21:17ㆍ카테고리 없음
질문 : 얕은 복사와 깊은 복사의 차이점은 무엇인가요?
- 얕은 복사는 객체의 메모리 주소를 복사해 원본과 복사본이 같은 데이터를 공유하고, 깊은 복사는 객체의 내용 자체를 복사하여 원본과 복사본이 완전히 독립적인 메모리를 갖는다.
질문 : 박싱과 언박싱이 일어나는 과정을 메모리 관점에서 설명해주세요.
- 박싱은 값 타입 데이터를 힙 메모리에 새롭게 할당하여 참조 타입으로 변환하는 과정입니다. 스택에 있던 값이 힙에 복사되고 참조가 반환됩니다. 반대로 언박싱은 힙에 있는 참조 타입 데이터를 스택으로 복사하여 값 타입으로 변환합니다. 이 과정에서 힙 메모리 접근과 데이터 복사가 발생하여 성능 오버헤드가 생길 수 있습니다. 이를 최적화하기 위해 제네릭과 같은 방법을 사용하면 박싱과 언박싱을 회피할 수 있습니다. (박싱(Boxing): 값 타입 → 참조 타입 변환. 언박싱(Unboxing): 참조 타입 → 값 타입 변환.)
질문 : 클래스를 다른 클래스로 상속하기 위한 방법은 무엇인가요?
- 클래스를 다른 클래스로 상속하려면 : 연산자를 사용하여 부모 클래스를 지정하면 됩니다. 상속받는 자식 클래스는 부모 클래스의 멤버(필드, 속성, 메서드)를 사용할 수 있으며, 필요에 따라 멤버를 재정의할 수도 있습니다
질문 : 클래스 상속에서 다이아몬드 문제(diamond problem)가 발생하는 이유와 이를 해결하는 방법에 대해 설명해주세요.
- 다이아몬드 문제는 다중 상속 시 두 부모 클래스가 같은 조상 클래스를 상속받고 자식 클래스가 이를 모두 상속받으면서 조상 클래스의 멤버를 호출할 때 어떤 경로로 상속된 멤버인지 모호성이 발생하는 문제로, 이를 해결하기 위해 다중 상속을 금지하고 인터페이스를 통해 문제를 예방하면 됩니다.