C#의 고급 기능에는 여러 가지가 있습니다. 여기 몇 가지 중요한 것들을 간략하게 설명하겠습니다:
상속: C#에서 한 클래스는 다른 클래스의 멤버들을 상속받을 수 있습니다. 이를 통해 코드의 재사용성이 향상됩니다.
class Person
{
public string name;
public int age;
}
class Student : Person
{
public int grade;
}
Student student = new Student();
student.name = "John";
student.age = 20;
student.grade = 3;
다형성: 다형성은 여러 형태를 가지는 것을 의미합니다. C#에서는 오버로딩과 오버라이딩을 통해 다형성을 구현할 수 있습니다.
- 오버로딩: 같은 이름의 메소드를 여러 개 선언하지만, 매개변수의 타입이나 개수가 다르게 하는 것입니다.
- 오버라이딩: 부모 클래스의 메소드를 자식 클래스에서 재정의하는 것입니다.
class Calculator
{
public int Add(int a, int b)
{
return a + b;
}
public double Add(double a, double b)
{
return a + b;
}
}
class AdvancedCalculator : Calculator
{
public int Multiply(int a, int b)
{
return a * b;
}
}
인터페이스: 인터페이스는 메소드, 프로퍼티, 이벤트 등의 선언만 포함하며, 구현 내용은 포함하지 않습니다. 클래스는 인터페이스를 구현하여 인터페이스에 선언된 멤버들을 정의해야 합니다.
interface IPerson
{
string Name { get; set; }
int Age { get; set; }
void SayHello();
}
class Person : IPerson
{
public string Name { get; set; }
public int Age { get; set; }
public void SayHello()
{
Console.WriteLine("Hello, " + Name);
}
}
제네릭: 제네릭은 타입을 매개변수로 가지는 클래스, 메소드, 인터페이스 등을 선언할 수 있게 해줍니다
class GenericList<T>
{
public void Add(T item)
{
// ...
}
}
GenericList<int> list = new GenericList<int>();
list.Add(10);
예외 처리: C#에서는 try-catch-finally 블록을 사용하여 예외를 처리합니다.
try
{
int a = 10;
int b = 0;
int c = a / b;
}
catch (DivideByZeroException ex)
{
Console.WriteLine("Cannot divide by zero");
}
finally
{
Console.WriteLine("This block is always executed");
}
람다 식: 람다 식은 익명 함수를 선언하는 데 사용됩니다.
Func<int, int, int> add = (a, b) => a + b;
int result = add(10, 20);
Console.WriteLine(result);
LINQ (Language Integrated Query): LINQ는 데이터를 쿼리하고 변형하는 데 사용됩니다.
int[] numbers = { 1, 2, 3, 4, 5 };
var evenNumbers = from num in numbers
where num % 2 == 0
select num;
foreach (var num in evenNumbers)
{
Console.WriteLine(num);
}
이러한 고급 기능들은 C# 프로그래밍의 핵심 부분입니다. C#은 강력하고 유연한 언어이므로, 이러한 기능들을 잘 이해하고 활용하면 매우 효율적인 코드를 작성할 수 있습니다.