[면접대비] C# 심화(1)

muchan
muchan
∙∙조회 15

네임스페이스란

클래스, 구조체 등의 타입을 논리적으로 묶어 관리하고, 같은 이름의 타입 간 이름 충돌을 방지하기 위한 기능입니다

닷넷의 모든 타입(System, System.Collections 등)은 네임스페이스 안에 정의되어있습니다

매개변수 전달 방식에 대해 설명(값 전달, 참조 전달)

값 전달은 값의 복사본이 메서드에 전달되므로 메서드 내부에서 매개변수를 수정해도 원본 변수는 변하지 않고 참조 전달은 ref, out, in 키워드를 사용해 변수 자체에 대한 참조를 전달하는 방식입니다

매개변수 수정자 ref, out, in에 대해 설명

ref는 변수를 참조로 전달하며 메서드 안에서 읽기와 수정 모두 가능합니다. 전달 전에 초기화 되어 있어야합니다.

out은 결과를 메서드 밖으로 전달할 때 사용하며 전달 전에 초기화할 필요는 없지만 메서드 내부에서 반드시 값을 할당해야 합니다

in은 변수를 참조로 전달하지만 메서드 내부에서 매개변수를 재할당할 수 없도록 제한합니다

→ 한줄 답변: 매개변수 수정자는 매개변수의 전달 및 사용 방식을 지정하는 키워드로 ref는 참조를 통한 읽기 수정, out은 출력값 전달, in은 읽기 전용 참조 전달에 사용됩니다

프로퍼티란

클래스 필드에 대한 접근을 캡슐화하고 값을 읽거나 설정할 때 get, set 접근자를 통해 값을 읽거나 설정할 수 있도록 제공하는 멤버

객체 지향 언어에서 정보은닉과 캡슐화의 성질을 갖습니다

자동 구현 프로퍼티란

별도의 필드를 직접 선언하지 않고 get, set만 작성하면 컴파일러가 내부적으로 필드를 자동 생성해주는 프로퍼티입니다.

예시: public string Name { get; set; }

private set을 사용하여 클래스 내부에서만 값을 변경하고 외부에선 읽기만 가능하게 할 수 있습니다

데이터 클래스란

자동 프로퍼티만으로 구성된 클래스이다. 데이터를 담는 용도로 주로 사용한다

전체 프로퍼티와 자동 프로퍼티의 차이

전체 프로퍼티는 직접 백킹 필드를 선언하고 get, set에 원하는 로직을 작성하는 방식이고, 자동 프로퍼티는 백킹 필드를 컴파일러가 자동으로 생성해 간단하게 사용하는 방식입니다.

인덱서란

클래스나 구조체의 인스턴스(객체)를 인덱스([])를 사용하여 배열처럼 사용할 수 있게 해주는 멤버입니다

프로퍼티와 유사하지만 매개변수를 받아 배열 형태로 접근할 수 있다는점에서 다릅니다

  • 인덱서를 사용하는 이유
    • 객체를 배열이나 컬렉션처럼 []로 접근할 수 있게 해준다.
    • 예를 들어 인벤토리 클래스 내부의 아이템을 inventory[0]처럼 직관적으로 접근할 수 있다.
    • List<T>의 list[index], Dictionary<TKey, TValue>의 dictionary[key]도 인덱서로 구현되어 있다.
    • 직접 구현할 때는 this 키워드를 사용한다.
    csharp
    public T this[int index]
    {
        get { ... }
        set { ... }
    }
    
    
    즉, 객체 내부의 여러 데이터에 직관적이고 간편하게 접근하기 위해 사용한다.

다중인덱서

하나의 클래스 안에서 매개변수가 타입이 다르면 여러 인덱서를 가질 수 있는 특성입니다

부분 클래스란

하나의 클래스를 여러 파일 또는 여러 곳에 나눠서 정의하고 컴파일 시 하나의 클래스로 합쳐질 수 있게 해주는 기능

partial 키워드를 사용합니다

정적 클래스란

인스턴스를 생성할 수 없고 정적 멤버만 가질 수 있는 클래스

주로 유틸 기능을 모아둘 때 유용합니다

메서드 체이닝이란

여러 메서드 호출을 점(.)으로 연결하여 한줄로 작성하는 기법입니다

각 메서드가 객체 자신 또는 새 객체를 반환합니다

→ StringBuilder에서 메서드 체이닝을 사용함

불변 형식이란

한 번 생성된 후에는 내부 상태를 변경할 수 없는 형식입니다

패턴이란

값의 타입, 형태, 조건 등을 검사하고 조건에 맞는 경우 해당 값을 추출하거나 처리하기 위한 문법입니다

주로 is 연산자와 사용되며 swtich문, switch식에서 사용됩니다

타입 패턴이란

값의 타입을 확인하고 일치하면 해당 타입의 변수에 할당하는 패턴

is 연산자와 함께 사용되는 가장 기본적인 패턴입니다

스위치 문에서도 타입 패턴을 사용할 수 있습니다

상수 패턴이란

특정 상수와 직접 비교하는 패턴입니다. ==연산자 대신 is를 사용하여 비교합니다

switch 식이란

하나의 값을 여러 패턴이나 조건과 비교하여 일치하는 결과 값을 반환하는 표현식입니다

switch 문보다 간결하게 작성할 수 있습니다

관계 패턴이란

<, >, ≤, ≥ 연산자를 사용하여 값의 범위를 검사합니다

패턴 결합자란

and, or, not 키워드를 사용하여 여러 패턴을 조합합니다

var 패턴이란

값의 타입이나 조건을 검사하지 않고 해당 값을 새로운 변수에 할당하여 사용하는 패턴

프로퍼티 패턴이란

객체의 프로퍼티 값을 기반으로 매칭합니다.

is 연산자란

객체가 특정 타입이나 패턴과 일치하는지 검사하고 그 결과를 bool 값으로 반환하는 연산자

패턴에서 when 절이란

패턴이 일치한 경우 추가적인 조건을 검사하기 위해 사용하는 문법입니다.