일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- UI
- FSM
- LINQ
- ObjectPool
- 배열
- BGM
- soundmanager
- 장애물달리기
- 스택
- 메서드
- c#
- Generic
- 코루틴
- 효과음
- inputsystem
- 유니티
- InputManager
- 유한상태머신
- 자료구조
- 스파르타내일배움캠프
- script
- 직렬화
- 프로그래머스
- skybox
- unity
- invokec#events
- 람다식
- delegate
- 비선형자료구조
- 인터페이스
- Today
- Total
Unity 개발일지
[C#] 심화 문법 실습하기 본문
[확인문제]
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으로 출력해주었다.
'C#' 카테고리의 다른 글
[C#] 선형자료구조 실습하기 2 - Stack (0) | 2024.07.15 |
---|---|
[C#] 선형자료구조 실습하기 1 - LinkedList (0) | 2024.07.10 |
[C#] Garbage Collector(가비지컬렉터) 실습하기 (0) | 2024.07.08 |
[C#] 상속과 인터페이스 실습하기 (0) | 2024.07.05 |
[C#] Struct(Stack 메모리) vs Class(Heap 메모리) 실습하기 (0) | 2024.07.04 |