-
객체란 무엇인가요? 클래스와 어떤 연관이 있나요?
- 객체란 클래스 기반으로 메모리에 생성된 것으로, 데이터와 그 데이터를 조작할 수 있는 기능을 함께 가진 프로그램의 기본 단위입니다.
-
생성자에 대해 간단하게 설명해주세요.
- 생성자는 객체가 생성될 때 호출되는 메소드로 객체를 초기화하는 역할을 가지고 있습니다.
-
접근제한자란 무엇이며, 각각 어떤 차이가 있는지 비교해서 설명해주세요.
- 접근 제한자는 클래스나 변수, 메소드에 공개 범위를 제한하는 키워드로 public, private, protected가 있습니다. public은 모두 공개하여 어디서든 접근이 가능하고, private는 내부에서만 접근 가능하며 protected는 상속 내에서만 접근 가능합니다. 추가적으로 어셈블리 전용으로 internal 제한자가 있습니다.
-
static 한정자에 대해 설명해주세요.
- 클래스 차원에서 전역으로 접근 가능하게 만드는 한정자로 공유 자원으로 사용할 수 있게 합니다
-
SOLID 원칙에 대해 설명해주세요.
1.
원칙 |
설명 |
SRP |
단일 책임 원칙 - 클래스는 하나의 책임만 |
OCP |
개방-폐쇄 원칙 - 확장엔 열려 있고 수정엔 닫혀야 |
LSP |
리스코프 치환 원칙 - 자식 클래스는 부모 대체 가능해야 |
ISP |
인터페이스 분리 원칙 - 클라이언트에 불필요한 인터페이스 강요 금지 |
DIP |
의존성 역전 원칙 - 추상에 의존, 구체에 의존하지 않음 |
-
객체지향 프로그래밍의 속성 중 하나인 다형성과 이를 활용한 설계의 장점에 대해 설명해주세요.
- 다형성은 동일한 인터페이스/메서드명으로 다양한 동작을 수행 가능하게 합니다. 이를 통해 유연한 코드 구조와 유지보수 및 확장성을 증가할 수 있습니다.
-
override와 overload에 대해 설명해주세요.
- 오버로드는 같은 이름이지만 매개변수를 달리하여 사용하는 메소드고, 오버라이딩은 부모메소드를 재정의하여 부모 메서드를 확장하여 사용한 것을 의미합니다.
-
확장 메서드에 대해 설명하고 어떻게 활용했는지 알려주세요.
- 확장 메서드는 기존 클래스에 상속없이 기능을 확장하는 문법으로 static 클래스와 this 키워드를 사용합니다. 유니티에서 자식오브젝트의 컴포넌트를 찾기 위해 사용한 적이 있습니다.
-
콜백이란 무엇인가요? 콜백을 사용해본 경험이 있을까요?
- 콜백은 다른 함수에 인자로 전달되는 함수로, 주로 이벤트 처리에 사용합니다.
-
델리게이트(delegate; 대리자)란 무엇인가요?
- 메서드를 변수처럼 사용할 수 있게 하는 것으로 메서드 참조를 저장할 수 있는 타입 안전한 함수 포인터 입니다.
-
C#의 event란 무엇인가요?
- 델리게이트 기반의 발행 - 구독 패턴을 의미합니다.
-
Unity에서 사용하는 델리게이트 혹은 이벤트에는 어떤 것이 있나요?
- UnityEvent, Action, Func, UnityAction이 있습니다.
-
참조 형식과 값 형식에 대해 설명해주세요.
- 값 형식은 int나 float 그리고 구조체가 있으며, 저장 위치는 스택으로, 값 자체를 복사하여 독립된 복사본이고 참조 형식은 클래스나 문자열타입이 있으며 저장위치는 힙으로, 주소를 복사하여 원본 데이터에 접근합니다.
-
메모리에서 스택과 힙의 차이점에 대해 설명해주세요.
- 스택은 선입 후출, 힙은 동적 할당 방식으로 저장하며, 할당 속도는 스택이 힙보다 빠릅니다. 그리고 스택은 컴파일러가, 힙은 가비지 컬렉터가 관리 주체이며 값 형식이나 지역변수에 스택을 사용하여 참조형식이나 클래스 인스턴스에 힙을 사용합니다.
-
1번과 2번 질문의 답안을 기반으로 struct와 class의 차이점에 대해 설명해주세요.
- struct는 값 형식, class는 참조 형식으로 스택과 힙에 저장됩니다. struct는 상속이 불가하며 기본적으로 불변 객체로 사용을 권장합니다.
-
얕은 복사와 깊은 복사의 차이점은 무엇인가요?
- 얕은 복사는 참조만 복사하는 것이고, 깊은 복사는 내부 객체까지 전부 복사합니다. 앝은 복사를 통해 원본과 복사본이 데이터를 공유하고 깊은 복사는 완전히 독립적인 복사본을 가집니다.
-
박싱과 언박싱이 일어나는 과정을 메모리 관점에서 설명해주세요.
- 박싱은 값 형식을 힙에 저장하기 위해 object로 감싸는 것으로 스택에서 힙으로 복사하는 것이고
언박싱은 object를 값 형식으로 변환하는 것으로 힙에서 스택으로 복사합니다.
-
클래스를 다른 클래스로 상속하기 위한 방법은 무엇인가요?
- : 로 상속을 하며, 기본 클래스나 가상클래스나 추상 클래스로 상속합니다.
-
클래스 상속에서 다이아몬드 문제(diamond problem)가 발생하는 이유와 이를 해결하는 방법에 대해 설명해주세요.
- 다이아몬드 문제는 다중 상속에서 발생할 수 있는 모호성 문제로 A가 B와 C를 상속하고 D가 B와 C를 상속하는 구조에서 D가 A를 2번 상속받아서 발생하는 문제입니다. 일반적으로는 인터페이스를 활용하여 해결합니다.