C#에는 코드의 구조와 동작을 제어하는 여러 중요한 키워드가 있습니다. 그중에서도 실무에서 자주 사용되는 대표적인 키워드는 다음과 같습니다.
- sealed
- params
- internal
- this
- abstract
sealed
C#에서 메서드에 sealed 한정자를 사용하면 해당 메서드는 더 이상 재정의(override)할 수 없게 됩니다. 단, sealed 메서드는 반드시 파생 클래스의 일부여야 하며, 이미 override된 메서드에만 적용할 수 있습니다.
class Base
{
public virtual void Print() { }
}
class Derived : Base
{
public sealed override void Print() { } // 더 이상 재정의 불가
}
params
메서드를 선언할 때 매개변수로 전달될 인자의 개수를 미리 알 수 없는 경우 params 키워드를 사용하면 유용합니다. params 배열을 활용하면 호출 시점에 가변 개수의 인수를 하나의 배열로 전달받을 수 있습니다.
public int Sum(params int[] numbers)
{
return numbers.Sum();
}
// Sum(1, 2), Sum(1, 2, 3, 4) 처럼 다양한 개수의 인자 전달 가능
internal
internal 접근 한정자는 클래스의 멤버 변수와 멤버 함수를 현재 어셈블리 내의 다른 함수와 객체에 공개할 수 있도록 합니다. internal로 선언된 멤버는 해당 멤버가 정의된 응용 프로그램(어셈블리) 내부의 어떤 클래스나 메서드에서든 자유롭게 접근할 수 있지만, 외부 어셈블리에서는 접근이 제한됩니다.
this
C#의 this 키워드는 클래스의 현재 인스턴스를 참조할 때 사용됩니다. 특히 메서드의 매개변수 이름과 클래스 필드 이름이 서로 같을 때, 두 대상을 명확하게 구분하는 용도로도 널리 활용됩니다.
class Person
{
private string name;
public Person(string name)
{
this.name = name; // this로 필드와 매개변수를 구분
}
}
abstract
C#의 abstract 키워드는 추상 클래스를 정의할 때 사용됩니다. 추상 클래스에는 구현이 없는 추상 메서드와 일반(비추상) 메서드가 함께 포함될 수 있으며, 추상 클래스 자체는 직접 인스턴스화할 수 없습니다. 따라서 반드시 파생 클래스에서 상속받아 추상 멤버를 구현해야 합니다.
abstract class Animal
{
public abstract void Speak(); // 추상 메서드
public void Sleep() // 일반 메서드
{
Console.WriteLine("잠을 잡니다.");
}
}