Post

C# 면접 질문

C# 면접 질문

C#

C#에 대해서 설명해주세요

C#은 자바와 비슷한 문법을 가지고 있는 객체 지향 프로그래밍 언어입니다.

C#과 C++의 차이를 설명해주세요

C#과 C++의 가장 큰 차이점은 GC입니다.
C#에서는 GC를 통해 메모리를 안전하게 관리할 수 있습니다.

Struct와 Class

C#에서 Struct와 Class의 차이를 설명해주세요

Struct의 기본 접근 제한자는 public이고 상속이 불가능합니다.
또한 값 타입으로 스택에 저장됩니다.

Class의 기본 접근 제한자는 private이고 상속이 가능합니다.
또한 참조 타입으로 힙에 저장됩니다.

namespace와 partial

namespace에 대해 설명해주세요

namespace는 프로젝트 내에서 클래스 이름이 중복되는 경우를 방지하기 위해 사용됩니다.
namespace를 사용하여 프로젝트 내에 있는 클래스를 구분할 수 있습니다.

partial에 대해 설명해주세요

partial은 하나의 클래스의 크기가 커졌을 때 가독성이 떨어지는 것을 방지하기 위해 사용됩니다.
partial을 사용하여 클래스의 파일을 분할하여 동일한 클래스를 작성하고 싶을 때
partial 키워드를 사용합니다.

박싱(Boxing)과 언박싱(Unboxing)

박싱에 대해 설명해 주세요

박싱은 값 형식의 인스턴스를 참조 형식으로 변환하는 과정을 말합니다.

1
2
int num = 1; // 값 형식
object boxObj = num; // 값 형식을 참조 형식으로 변환

언박싱에 대해 설명해주세요

언박식은 참조 형식의 인스턴스를 값 형식으로 변환하는 과정을 말합니다.

1
2
object boxObj = 1; // 박싱 된 값
int num = (int)boxObj; // 참조 형식의 값을 값 형식으로 변환

델리게이트

Delegate에 대해 설명해주세요

Delegate는 함수에 대한 참조를 저장하는 타입입니다.

Event에 대해 설명해주세요

Event는 delegate의 특별한 형태로 접근 제한자가 public이더라도 외부 클래스에서 직접 호출되는 것을 막습니다.

Action에 대해 설명해주세요

Action은 반환값이 없는 메소드를 참조하는 델리게이트입니다.

Func에 대해 설명해주세요

Func는 반환값이 있는 메소드를 참조하는 델리게이트입니다.

제너릭

제너릭에 대해 설명해주세요

제너릭은 데이터 타입을 일반화하여 코드 재사용성을 높이는 기능입니다.
컴파일 타임에 구체적인 타입으로 인스턴스화됩니다.

리플렉션

리플렉션에 대해 설명해주세요

리플렉션은 컴파일 시에 알 수 없었던 타입이나 멤버들을 찾아내고 사용할 수 있게 해주는 기능입니다.

가비지 컬렉터(GC)

GC에 대해 설명해주세요

GC는 자동으로 사용하지 않는 메모리를 해제해주는 기능입니다.
GC는 세대별로 구분할 수 있고 힙에 있는 객체를 0, 1, 2세대로 구분합니다.
GC가 객체의 세대를 구분하는 방법은 객체의 생존 시간에 따라 구분합니다.
0세대는 GC를 겪지않은 객체이고
1세대는 GC를 한번 겪고 살아남은 객체
2세대는 GC를 두 번 이상 겪고 살아남은 객체입니다.
GC는 낮은 세대일수록 더 집중적으로 처리합니다.

Small Object Heap(SOH)에 대해 설명해주세요

객체의 크기가 85KB를 넘으지 않으면 SOH영역에 할당을 합니다.
SOH는 가비지 컬렉션이 발생하면 해제된 메모리 공간들에 사용중인 메모리들로 재배치합니다.

Large Object Heap(LOH)에 대해 설명해주세요

객체의 크기가 85KB를 넘으면 LOH영역에 할당을 합니다.
LOH는 가비지 컬렉션이 발생해도 해제된 메모리 공간들에 사용중인 메모리들로 재배치하지 않습니다.

This post is licensed under CC BY 4.0 by the author.