스파르타 게임개발종합반(Unity)/기술 면접 대비 꾸준 실습

07. C# 심화 문법

테크러너 2024. 7. 11.

확인 문제

using System;
using System.Collections.Generic;

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

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

class Program
{
    static void Main(string[] args)
    {
        Box<int> intBox = new Box<int> { Value = 123 };
        Box<string> strBox = new Box<string> { Value = "Hello, World" };
        Box<DateTime> dateBox = new Box<DateTime> { Value = DateTime.Now };

        intBox.DisplayValue();
        strBox.DisplayValue();
        dateBox.DisplayValue();
    }
}

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

`class Box<T>` 와 `T Value`에서 제네릭이 사용되었다.제네릭을 사용하지 않게 되면 `int`, `string`, `DataTime`형 타입별로 클래스를 각각 만들어줘야 한다.

 

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

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

IComparable을 상속받는 클래스들은 Max를 사용할 수 있다.

Max 메서드는 a > b 이면 양수를 반환하므로 a를 반환하고, a <= b 이면 b를 반환한다.

 

 

설명 문제

제네릭이란 무엇인가요?

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

LINQ란 무엇인가요?

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

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

 

 

실습 문제

💡 [클래스 이름 출력하기]

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

using System;
using System.Reflection;

public class Character
{
    public int Level { get; set; }
    public void PrintClassName()
    {
        // TODO: 리플렉션을 사용하여 클래스의 이름을 출력하는 코드 작성
        
        //
    }
}

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();
    }
}

반응형

댓글