Unity 개발일지

[C#] 심화 문법 실습하기 본문

C#

[C#] 심화 문법 실습하기

아머르 2024. 7. 9. 14:31

[확인문제]

 

1. 다음 코드에서 제네릭을 사용한 부분을 식별하고, 해당 코드가 제네릭을 사용하지 않았을 때 발생할 수 있는 문제점에 대해 설명하세요.

더보기

제네릭을 사용한 부분

public class Box<T>
{
    public T Value { get; set; }

    public void DisplayValue()
    {
        Console.WriteLine($"Value: {Value}");
    }
}

 

제네릭을 사용하지 않으면 각 데이터 타입에 대해 별도의 클래스를 작성해야한다.

제네릭을 사용하면 코드 재사용성을 높이고, 타입 안전성을 보장할 수 있다.

제네릭을 사용하지 않으면 런타임에 잘못된 타입이 사용될 수 있어 오류가 발생할 수 있다.

 

2. 아래 코드가 어떤 기능을 하는지, 어떤 방식으로 동작하는지 간단하게 설명해주세요.

public static T Max<T>(T a, T b) where T : IComparable<T> { return a.CompareTo(b) > 0 ? a : b; }
더보기

IComparable<T> 인터페이스를 구현한 타입에 대해서만 사용할 수 있으며,

CompareTo 메서드를 사용해 두 값을 비교하고, a가 b보다 크면 a, 그렇지 않으면 b를 반환(더 큰값 반환)

 

[설명문제]

 

1. 제네릭이란 무엇인가요?

더보기

제네릭은 클래스나 메서드를 정의할 때 특정 타입에 의존하지 않고 다양한 타입을 지원할 수 있도록 하는 기능이다.

타입 안전성을 보장하면서 코드 재사용성을 높일 수 있다.

 

2. 람다식(Lambda Expression)이 무엇인지 설명해주세요.

더보기

람다식은 익명 함수를 간결하게 표현한다.

코드의 가독성을 높이고, 간결하게 작성할 수 있다.

 

3. LINQ란 무엇인가요?

더보기

Language Integrated Query의 약자로 C#과 같은 .NET 언어에서 데이터 소스에 대해 쿼리를 수행할 수 있도록 하는 기능으로, SQL쿼리와 유사한 구문을 사용해 배열, 컬렉션, XML, 데이터베이스 등의 데이터를 처리할 수 있다.

 

4. 리플렉션(Reflection)이 뭔지, 사용을 해봤다면 어떤 이유에서 사용했는지 설명해주세요.

  • 리플렉션의 단점에 대해 설명해주세요.
더보기

리플렉션은 런타임에 어셈블리의 메타데이터를 검사하고, 객체를 동적으로 생성하거나 메서드를 호출할 수 있는 기능으로 라이브러리나 프레임워크에서 사용된다.

 

<단점>

성능 저하 : 런타임에 메타데이터를 검사하고, 동적으로 객체를 생성하는 과정에서 성능 저하를 일으킬 수 있다.

타입 안전성 : 컴파일 타임에 타입을 확인하지 않기 때문에 런타임 오류가 발생할 수 있다.

복잡성 : 코드의 가독성과 유지보수성이 떨어질 수 있다.

 

 

[실습문제]

리플렉션을 사용하여 string을 사용하지 않고 클래스의 이름을 출력해보는 함수를 만들어봅시다.

 

더보기
using System;
using System.Reflection;

public class Character
{
    public int Level { get; set; }
    public void PrintClassName()
    {
        // 리플렉션을 사용하여 클래스의 이름을 출력하는 코드
        Type type = this.GetType();
        Console.WriteLine($"Class Name: {type.Name}");
    }
}

public class Warrior : Character
{
}

public class Mage : Character
{
}

public class Archer : Character
{
}

class Program
{
    static void Main(string[] args)
    {
        Warrior warrior = new Warrior();
        Mage mage = new Mage();
        Archer archer = new Archer();

        // 리플렉션을 사용하여 클래스 이름 출력
        warrior.PrintClassName();
        mage.PrintClassName();
        archer.PrintClassName();
    }
}

 

리플렉션으로 this.GetType 메서드를 통해 런타임에 객체의 타입 정보를 얻었고,

얻은 타입 정보를 Console.WriteLine으로 출력해주었다.

반응형