.
목 차
확인 문제
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. 다음 코드에서 제네릭을 사용한 부분을 식별하고, 해당 코드가 제네릭을 사용하지 않았을 때 발생할 수 있는 문제점에 대해 설명하세요.
제네릭을 사용한 부분: Box 클래스.
제네릭이 없을 때의 문제점: 현재 다양한 자료형을 혼용해서 그 값을 출력하는 용도로 사용되고 있는 Box는 제네릭이 없다면 다른 자료형을 사용하고 싶을 때 반드시 형변환을 한 번은 거쳐야 한다.
2. 아래 코드가 어떤 기능을 하는지, 어떤 방식으로 동작하는지 간단하게 설명해주세요.
public static T Max<T>(T a, T b) where T : IComparable<T> { return a.CompareTo(b) > 0 ? a : b; }
이 코드는 Max(3, 5), Max("apple", "banana") 와 같은 방식으로 사용되며, 반환자는 Max 안에 들어갈 인자의 자료형과 일치한다. 이처럼 제네릭을 사용해 다양한 자료형의 크기를 비교하고, 그 중 큰 값을 반환하는 코드이다.
설명 문제
1. 제네릭이란 무엇인가요?
제네릭은 프로그래밍에서 데이터 타입을 일반화하여, 다양한 데이터 타입에서 동작할 수 있도록 하는 방법입니다.
코드의 재사용성을 높이고 타입 안전성을 강화합니다.
클래스, 인터페이스, 메서드 등에서 사용될 수 있으며, 컴파일 시에 타입 체크가 이루어지므로 런타임 오류를 줄일 수 있습니다.
2. 람다식(Lambda Expression)이 무엇인지 설명해주세요.
람다식은 익명 함수를 정의하는 간결한 방법으로, 주로 함수형 프로그래밍에서 사용됩니다.
매개변수를 가지며, 화살표(=>)를 사용하여 매개변수와 함수를 구분합니다.
이를 통해 코드의 가독성을 높이고, 간결한 표현을 가능하게 합니다.
예시:
Func<int, int, int> add = (a, b) => a + b;
3. LINQ란 무엇인가요?
LINQ는 데이터 쿼리를 직접 코드에 통합하여 수행할 수 있는 기능을 제공합니다.
다양한 데이터에 대한 쿼리 구문을 사용함으로써 코드의 가독성을 높이고, 데이터 조작을 쉽게 만들어 줍니다.
예시:
var filteredAndSortedPeople = from person in people
where person.Age > 25
orderby person.Name
select person;
4. 리플렉션(Reflection)이 뭔지, 사용을 해봤다면 어떤 이유에서 사용했는지 설명해주세요. 리플렉션의 단점에 대해 설명해주세요.
리플렉션은 프로그램이 런타임에 자신의 구조를 검사하고 수정할 수 있는 기능입니다.
클래스, 메서드, 필드, 속성 등의 메타데이터에 접근하고 조작할 수 있습니다.
주로 동적 타입 검사, 객체의 속성 설정, 메서드 호출 등에 사용됩니다.
접근해야 할 클래스가 무엇인지 런타임 중에 알게 되어야 할 때 주로 사용했습니다.
단점은 다음과 같습니다:
- 성능 저하: 리플렉션은 런타임에 타입 정보를 검사하고 메서드를 호출하므로, 정적 호출보다 성능이 떨어집니다.
- 안전성 저하: 컴파일 타임에 타입 체크가 이루어지지 않으므로, 런타임 오류가 발생할 가능성이 높아집니다.
- 가독성 저하: 리플렉션을 사용한 코드는 일반적으로 복잡하고 이해하기 어려울 수 있습니다.
- 보안 문제: 잘못된 리플렉션 사용은 보안 취약점을 유발할 수 있습니다. 예를 들어, private 필드나 메서드에 부적절하게 접근할 수 있습니다.
실습 문제
namespace _07.C__심화_문법_실습
{
public class Character
{
public int Level { get; set; }
public void PrintClassName()
{
// TODO: 리플렉션을 사용하여 클래스의 이름을 출력하는 코드 작성
Type type = GetType(); // 현재 인스턴스의 타입을 가져옴
Console.WriteLine(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();
}
}
}
.
'내일배움캠프 > 꾸준CS과제' 카테고리의 다른 글
[TIL 24.07.11] 09. 선형 자료구조 - Stack (0) | 2024.07.11 |
---|---|
[TIL 24.07.10] 08.선형 자료구조 - LinkedList (0) | 2024.07.10 |
[TIL 24.07.08] 06. Garbage Collector (0) | 2024.07.08 |
[TIL 24.07.05] 05. 상속과 인터페이스 (0) | 2024.07.05 |
[TIL 24.07.03] 03. 콜백, delegate, event (0) | 2024.07.03 |