15. 1번과 2번 질문의 답안을 기반으로 struct와 class의 차이점에 대해 설명해주세요.
다음과 같이 표로 설명하겠습니다.
struct | class | |
형식 | 값형 (Value) | 참조형 (Reference) |
메모리 할당 | 스택 | 힙 |
변수 할당시 | 실제 데이터의 복사본이 생성 | 객체의 주소값을 저장 |
다른 변수나 인자로 전달할 때 | 데이터가 복사되어 전달 | 참조값이 전달 |
예외 | 클래스의 필드로 사용하면 힙에 할당 | 무조건 힙에 할당 |
상속 | 미지원 | 지워 |
인터페이스 | 지원 | 지원 |
할당과 해제 속도 |
빠름 |
느림 (해제하면 가비지컬렉터가 생긴다) |
생성자 | 자동으로 제공 매개변수가 없는 생성자는 정의불가 필드초기화 필요 없음 |
기본으로 정의 없는 매개변수도 여러 생성자 정의가능 필드는 명시적이나 생성자에서 초기 |
16. 얕은 복사와 깊은 복사의 차이점은 무엇인가요?
얕은 복사 : 얕은 복사는 객체의 최상위 수준만 복사하며, 객체가 참조하는 하위들(즉, 중첩된 객체들)은 원본 객체와 동일한 참조를 갖게 된다. 이는 객체의 복사본이 원본 객체와 동일한 하위 객체들을 참조하게 됨을 말합니다.
깊은 복사 : 깊은 복사는 객체와 그 객체가 참조하는 모든 하위 객체들을 재귀적으로 복사한다. 이는 원본 객체와 복사본 객체가 서로 독립적인 구조를 가지게 됨을 말합니다.
17. 박싱과 언박싱이 일어나는 과정을 메모리 관점에서 설명해주세요.
박싱(Boxing) : 박싱은 값 형식을 참조 형식으로 변환하는 과정이다. 값 형식을 객체(Object)로 감싸서 힙(Heap) 메모리에 저장하고, 이 객체의 참조를 반환합니다.
언박싱(Unboxing) : 언박싱은 박싱방법과 반대로 참조 형식을 값 형식으로 변환하는 과정이다. 힙에 저장된 객체의 값을 스택에 있는 값 형식 변수로 복사합니다.
메모리 관리 : 힙에 할당된 객체는 가비지 컬렉터에 의해 관리된다. 따라서 많은 박싱 작업은 가비지 컬렉션 부담을 증가시킬 수 있습니다.
18.클래스를 다른 클래스로 상속하기 위한 방법은 무엇인가요?
상속선언을 통해 자식클래스가 부모클래스의 모든 공용 및 보호된 멤버를 상속받아 사용할수 있게 하는 방법입니다.
[public class B : A]
19.클래스 상속에서 다이아몬드 문제(diamond problem)가 발생하는 이유와 이를 해결하는 방법에 대해 설명해주세요.
한 자식클래스가 두개 이상의 부모클래스로부터 동일한 멤버를 상속받는 형태를 말하는건데, 자식 클래스가 두개를 상속받은 부모클래스를 사용하고자 할때 자식클래스는 두개중 어디 클래스로 받았는지 모호성이 나오기 때문입니다.
이런 다이어그램의 설계를 하면 복잡해질수도 있습니다.
그래서 이를 해결하기 위하여 같은 메서드 이름이 있어도 명시적인 인터페이스 구현을 사용해 모호성을 해결하는 방법으로 다중 상속을 예방하는 이유가 나온 것입니다.
20.인터페이스란 무엇인가요?
메서드를 강제적으로 구현을 함으로 다중상속 지원, 사용하고 싶은 기능을 받아서 사용하는 것입니다.
클래스 상속이 가능하며 다중상속은 불가능합니다.
21.인터페이스와 추상클래스의 차이는 무엇인가요?
추상클래스 | 인터페이스 | |
다중상속 가능 | 단일 상속만 가능하고 한 클래스는 하나의 추상 클래스만 받을 수 있습니다. 물론 추상메서드를 사용할 때 추상 클래스만 사용할수 있습니다. |
다중 상속이 가능하고 한 클래스가 여러 인터페이스를 구현할 수 있습니다. 단 인터페이스를 상속받은 클래스는 그곳에 구현된 메서드를 반드시 정의해야 합니다. |
사용 목적 | 공통된 기본 구현을 제공하며, 관련 클래스간 코드를 공유하고 일관된 기본 동작을 제공하기 위해 사용됩니다. | 특정 행위를 규정하고 계약을 정의하는 데 사용된다. 객체가 무엇을 할 수 있는지를 명시적으로 정의합니다. |
멤버 종류 | 필드, 생성자, 소멸자, 속성, 메서드 등을 정의가 가능합니다. |
오직 메서드만 정의가 가능하고 내부 구현은 불가능합니다. |
by 스파르타 코딩클럽
'개발 TIL' 카테고리의 다른 글
스파르타 코딩클럽 유니티 4기 프로젝트 SA (1) | 2024.08.20 |
---|---|
7/24 부트캠프 개발 TIL (기술 모의 면접 5) (0) | 2024.08.08 |
7/22 부트캠프 개발 TIL (기술 모의 면접 3) (0) | 2024.08.04 |
7/19 부트캠프 개발 TIL (기술 모의 면접 2) (0) | 2024.08.03 |
7/18 부트캠프 개발 TIL (기술 모의 면접 1) (0) | 2024.08.02 |