[면접대비] C# 심화(2)
댓글 2
댓글을 작성하려면 로그인이 필요합니다.
기존 클래스의 기능을 물려받아 새로운 클래스를 만드는 메커니즘입니다
코드 재사용, 유지보수 용이, 계층 구조 표현의 장점이 있습니다
모든 클래스의 최상위 부모 클래스입니다
업캐스팅은 자식 클래스의 인스턴스를 부모 클래스 타입의 변수에 할당하는 것입니다(암시적 변환)
다운 캐스팅은 부모 클래스 타입의 변수를 자식 클래스 타입으로 변환하는 것 입니다(명시적 캐스팅 필요)
부모 타입 변수가 실제로 참조하고 있는 자식 타입과 다른 자식 타입으로 형 변환을 시도하는 것입니다.
class Animal { }
class Dog : Animal { }
class Cat : Animal { }
Animal animal = new Dog(); // 실제 객체는 Dog
Dog dog = (Dog)animal; // 정상
Cat cat = (Cat)animal; // 잘못된 다운 캐스팅
객체를 지정한 참조 타입으로 형 변환하며 변환에 실패하면 예외를 발생시키지 않고 null을 반환하는 연산자입니다
하나의 부모 타입이나 인터페이스를 통해 여러 자식 타입의 객체를 동일한 방식으로 다루면서 실제 객체에 따라 서로 다른 동작을 수행할 수 있는 객체지향의 특징입니다.
→ 짧게: 하나의 타입으로 여러 형태의 객체를 다룰 수 있는 객체지향의 특징입니다.
직접 객체를 생성할 수 없으며 자식 클래스가 상속 받아 공통 기능을 사용하거나 필요한 기능을 구현하도록 하는 클래스입니다.
구현부 없이 선언만 되어 있으며 상속 받은 자식 클래스에서 반드시 오버라이드하여 구현해야하는 메서드입니다
구현 없이 정의만 해놓은 메서드입니다
다른 클래스가 더 이상 상속할 수 없도록 제한한 클래스입니다.
자식 클래스에서 new 키워드를 사용하여 부모 클래스의 멤버를 숨기는 것 입니다
object는 C#에서 모든 타입의 최상위 기본클래스입니다
값 타입과 참조 타입은 직접 또는 간접적으로 object를 상속합니다
박싱은 값 타입의 데이터를 참조 타입으로 변환하는 프로세스이고
언박싱은 박싱된 객체에서 다시 값 형식으로 변환하는 것 입니다
int num = 10;
object obj = num; // 박싱
int value = (int)obj; // 언박싱
힙 메모리에 값을 저장할 객체가 생성되고
스택에 있던 값이 힙의 객체로 복사되고
객체의 참조가 반환됩니다
값 타입을 object에 할당할때
값 타입을 인터페이스 타입에 할당할 때
object 매개변수만 있는 메서드 호출
박싱은 값 형식을 객체로 변환하는 과정에서 값 복사와 객체 할당이 발생하기 때문에 반복적으로 사용하면 성능 저하와 GC 부담이 발생할 수 있습니다. 박싱 시 값이 복사되므로 원래 값고 박싱된 값은 독립적입니다
제네릭 사용하기
값 타입 전용 메서드 오버로드 만들기
필요한 경우에만 object로 전환하기
Equals(): 두 객체가 같은 지 비교
GetHashCode(): 객체의 해시 코드를 반환
ToString(): 객체를 문자열로 표현
GetType(): 객체의 런타임 타입 정보를 반환
Equals는 두 객체의 값이 같은지 비교하고, ReferenceEquals는 두 변수가 동일한 객체를 참조하고 있는지 비교합니다
부모 클래스에서 정의된 메서드를 자식 클래스에서 재정의 하여 다른 동작을 수행하도록 하는 것
부모 클래스의 메서드를 자식 클래스에서 재정의 하여 사용하는 기법 → 다형성
부모 타입 변수에 자식 인스턴스를 담아 메서드를 호출해도, 실제 인스턴스 타입에 따라 자식 클래스에서 오버라이드된 메서드가 호출되는 것입니다.
클래스나 구조체가 반드시 구현해야할 기능의 규약을 정의하는 타입입니다.
메서드, 프로퍼티, 이벤트의 시그니처만 정의하고 구현은 없으며 필드를 가질 수 없습니다.
인터페이스 타입 변수는 해당 인터페이스를 구현한 모든 클래스의 인스턴스를 담을 수 있습니다
추상클래스는 상속 관계에서 공통 상태와 구현을 공유할 때 사용하고
인터페이스는 서로다른 클래스에 공통된 기능의 규약을 정의할 때 사용합니다
구조체는 서로 관련된 여러 데이터를 하나로 묶어서 관리하기 위한 자료형으로, 값 형식으로 동작합니다.
| 구조체 | 설명 | 예시 |
|---|---|---|
int (System.Int32) | 32비트 정수 | int num = 42; |
char (System.Char) | 단일 문자 | char c = 'A'; |
DateTime | 날짜와 시간 | DateTime now = DateTime.Now; |
TimeSpan | 시간 간격 | TimeSpan span = TimeSpan.FromHours(2); |
클래스나 구조체에 대해 +, -, *와 같은 연산자의 동작을 정의하는 기능입니다
관련된 상수들을 하나의 그룹으로 묶어서 관리하는 값 타입입니다
게임 개발에서 캐릭터 상태, 아이템 종류, 방향 등을 표현할 수 있습니다
C심화 면접 대비(4)
C심화 면접 대비 (3)
C심화 개념 면접 대비(1)
상속부터 구조체, 열거형까지 보기 쉽게 잘 정리되어 있네요. as 연산자나 잘못된 다운 캐스팅 예시 코드도 이해하기 쏙쏙 됩니다. 잘 읽고 갑니다! 👍
댓글 감사합니다. 덕분에 힘이 나네요. 열심히 면접 준비 해보겠습니다.