-
제네릭 이란??
-
델리게이트의 개념
-
‘delegate’, ‘event’, ‘action’, ‘func’ 간의 차이
기술 면접 예상 질문 - 제네릭이란 무엇인가요?
제네릭이란 타입을 매개변수화 하여 코드의 재사용성과 유연성을 향상시키는 방법입니다.
여러가지 타입에 대응할 수 있는 클래스나 메서드를 작성할 수 있으며 컴파일 시점에서 타입이 결정되기 떄문에
타입 안정성을 검사할 수 있고, 제약 조건을 통해 사용할 수 있는 타입을 제한할 수도 있습니다,
박싱 언박싱은 런타임 시점에서 동작하기 때문에 잘못된 언박싱은 타입 안정성에 문제가 생길 수 있음
제네릭을 어떤 타입으로 사용하게 되면 컴파일 시점에서 해당 타입으로 클래스나 메서드가 정의 됩니다.
값 타입의 경우 각 타입마다 따로 클래스나 메서드가 정의됩니다. 이것으로 박싱 언박싱을 회피할 수 있습니다.
참조 타입의 경우 모든 참조 타입에 대해 하나의 클래스나 메서드가 정의됩니다.
참조 타입의 경우 제네릭 인스턴스가 데이터가 아니라 메모리 주소를 저장하게 되기 때문임
Summary
제네릭이란 타입을 매개변수화 하여 코드의 재사용성과 유연성을 향상시키는 방법입니다.
제네릭을 사용하게 되면 컴파일 시점에서 해당 타입에 대한 클래스나 메서드가 정의되어 여러가지 타입에 대응할 수 있고
컴파일 시점에서 타입이 결정되어 타입 안정성을 검사할 수 있으며, 박싱 언박싱을 피해 성능을 향상 시킬 수 있습니다.
기술 면접 예상 질문 - 델리게이트의 개념에 대해 설명해주세요.
델리게이트란 메서드를 참조하는 변수로 특정 시그니처를 가진 메서드를 참조할 수 있습니다.
콜백 메서드나 이벤트 핸들러를 구현할 때 유용하게 사용할 수 있습니다.
메서드 시그니처란? 메서드의 이름, 매개변수의 타입 및 순서로 메서드를 구분할 수 있게 해줍니다. 반환 타입만으로는 메서드를 구분할 수 없기 떄문에 포함되지 않고 반환 타입만 다른 오버 로드는 만들 수 없다.
기술 면접 예상 질문 - ‘delegate’, ‘event’, ‘action’, ‘func’ 간의 차이를 설명해주세요.
delegate와 event의 차이점은 event는 delegate에 캡슐화가 추가된 형태로 어디서든 Invoke 할 수 있는 delegate와는 반대로
event를 가진 클래스의 외부에서는 event를 구독만 할 수 있고 클래스 내부에서만 Invoke 할 수 있다는 특징이 있습니다.
이런 특징 때문에 event는 옵저버 패턴을 구현할 때 유용하게 사용할 수 있습니다.
C#에서는 delegate를 action과 func으로 바로 사용할 수 있도록 구현하여 제공하고 있는데
action은 리턴 값이 없고 func은 리턴 값이 있기 때문에 리턴 타입을 정해주어야 한다는 특징이 있습니다.