[면접대비] C# 심화(4)
댓글 0
댓글을 작성하려면 로그인이 필요합니다.
아직 댓글이 없습니다. 첫 번째 댓글을 작성해보세요.
프로그램 실행 중 예상하지 못한 오류나 비정상적인 상황이 발생하는 것 입니다
예로는 0으로 나누기, null객체 접근, 잘못된 형식 반환 등이 있습니다
파일, 네트워크 연결 같은 비관리 리소스를 명시적으로 해제하기 위한 인터페이스이며 Dispose() 메서드를 제공합니다
IDisposable을 구현한 객체를 사용한 뒤 Dispose가 자동으로 호출되도록 보장해주는 구문입니다
GC는 관리 객체의 메모리를 회수하지만 파일이나 소켓 같은 비관리 리소스를 즉시 해제해주지 않기 때문에 Dispose를 호출해줘야합니다.
관리 객체: new 로 생성한 일반 클래스 객체, 배열, 문자열 등 비관리 리소스: 파일 핸들, 소켓, DB 연결, OS 핸들 등
컴파일러는 using문을 try-finally 블록으로 변환합니다
// using 문 작성
using (Resource res = new Resource())
{
res.DoWork();
}
// 컴파일러가 변환한 코드
Resource res = new Resource();
try
{
res.DoWork();
}
finally
{
if (res != null)
{
res.Dispose();
}
}
참조형 변수가 어떤 객체도 참조하고 있지 않은 상태입니다
값 형식은 변수에 실제 값이 저장되므로 기본적으로 null을 가질 수 없고
참조 형식은 객체에 대한 참조를 저장하기 때문에 null은 참조하는 객체가 없음을 의미합니다
:값 형식에 null을 할당하면 컴파일 에러가 난다
기본적으로 null을 가질 수 없는 값 형식이 null을 가질 수 있도록 해주는 형식입니다
Nullable로 표현하며 ?를 사용해 간단히 작성할 수 있습니다
기존 클래스의 코드를 수정하거나 상속하지 않고도 새로운 메서드를 추가한 것처럼 사용할 수 있게 해주는 기능입니다.
정적 클래스 안에 정의해야하며, 정적 메서드로 선언하고, 첫 번째 매개변수에 this 키워드를 붙여아합니다
여러 메서드를 연속으로 호출하는 패턴입니다. 확장 메서드가 자기 자신의 타입을 반환하면 체이닝이 가능합니다
여러 개의 데이터를 하나의 자료구조로 저장하고 관리할 수 있도록 제공하는 클래스들의 집합입니다. 리스트, 딕셔너리, 큐, 스택 등이 있습니다
(리스트, 딕셔너리, 스택 등은 나중에 자료구조에서 정리하겠습니다)
컬렉션의 요소를 하나씩 순차적으로 접근할 수 있도록 해주는 기능입니다. C#에서는 yield return을 사용하여 구현할 수 있습니다.
이터레이터에서 값을 하나씩 반환하면서 현재 실행 상태를 저장하고 다음 호출 시 그 지점부터 실행을 이어갈 수 있게 해주는 키워드입니다
연산을 즉시 수행하지 않고 실제로 결과가 필요한 시점에 연산을 수행하는 방식입니다.
while 무한 루프가 있어도 프로그래머가 원하는 횟수 만큼 호출이 가능하며 메모리 공간 활용에 효율적이라는 장점이 있습니다
IEnumerable은 순회할 수 있는 컬렉션을 나타내며 GetEnumerator() 메서드를 통해 IEnumerator를 반환합니다.
IEnumerator는 실제로 컬렉션을 순회하면서 MoveNext()로 다음 요소로 이동하고 Current로 현재 요소에 접근합니다
IEnumerable: 순회 가능한 대상 IEnumerator: 실제로 순회하는 객체
yield return을 사용하여 컬렉션 요소를 하나씩 순차적으로 반환하는 함수입니다. 호출 시 모든 결과를 한 번에 만들지 않고 필요한 시점에 값을 하나씩 생성합니다
== 연산자는 두 값이 같은지를 비교하는 연산자이고 Equals()는 객체의 동등성을 비교하는 메서드 입니다.
== 연산자의 기본 동작
| 형식 | 기본 동작 | 비고 |
|---|---|---|
| 참조 형식 (class) | 참조 비교 | 연산자 오버로딩으로 변경 가능 |
| 값 형식 (struct) | 컴파일 에러 | 반드시 직접 정의해야 함 |
| string | 값 비교 | 연산자가 오버로딩됨 |
| 기본 타입 (int, double 등) | 값 비교 | 언어에서 기본 제공 |
Equals() 메서드의 기본 동작
| 형식 | 기본 동작 | 비고 |
|---|---|---|
| 참조 형식 (class) | 참조 비교 | object.Equals() 상속 |
| 값 형식 (struct) | 값 비교 | ValueType.Equals() (리플렉션 사용, 느림) |
| string | 값 비교 | Equals() 오버라이드됨 |
프로그램 실행 중에 타입의 정보를 조회하고 해당 타입의 필드, 프로퍼티, 메서드 등을 동적으로 접근하거나 실행할 수 있게 해주는 기능입니다
같은 타입의 두 객체가 값 기준으로 같은지 비교하기 위한 Equals 메서드를 제공하는 인터페이스입니다
같은 타입의 객체끼리 크기나 순서를 비교할 수 있도록 CompareTo 메서드를 제공하는 인터페이스
C#에서 컬렉션이나 데이터 소스를 일관된 문법으로 조회, 필터링, 정렬, 변환할 수 있도록 제공하는 기능입니다
C심화 면접 대비 (3)
C심화 면접 대비(2)
C심화 개념 면접 대비(1)