class 키워드
class 키워드 (C# 참조)
class 키워드를 쓰면 클래스를 선언할 수 있어요. 아래 예시처럼요.
class TestClass
{
// Methods, properties, fields, events, delegates
// and nested classes go here.
}
C#은 단일 상속(single inheritance)만 지원해요. 다시 말해, 한 클래스가 구현을 상속받을 수 있는 기반 클래스(base class)는 딱 하나라는 뜻이죠. 다만 인터페이스는 여러 개를 구현할 수 있답니다.
클래스와 인터페이스, 상속에 대해 더 자세히 알고 싶다면 fundamentals 섹션의 상속(inheritance) 문서를 살펴보세요.
클래스는 네임스페이스(namespace) 안에 직접 선언할 수 있어요. 그렇다고 다른 클래스 안에 이 클래스를 중첩해서 넣지는 마세요. 이런 클래스는 public이나 internal로 만들 수 있는데, 따로 지정하지 않으면 기본적으로 internal이에요.
클래스 멤버는 중첩 클래스(nested class)까지 포함해서 public, protected internal, protected, internal, private, private protected로 선언할 수 있어요. 멤버는 기본값이 private랍니다.
더 자세한 내용은 액세스 한정자(Access Modifiers) 문서를 확인해 보세요.
타입 매개변수(type parameter)를 갖는 제네릭 클래스(generic class)도 선언할 수 있어요. 관련 내용은 제네릭 클래스(Generic Classes) 문서를 참고하세요.
본문
클래스는 다음 멤버들의 선언을 담을 수 있어요.
- 생성자(Constructors)
- 상수(Constants)
- 필드(Fields)
- 종료자(Finalizers)
- 메서드(Methods)
- 속성(Properties)
- 인덱서(Indexers)
- 연산자(Operators)
- 이벤트(Events)
- 대리자(Delegates)
- 클래스(Classes)
- 인터페이스(Interfaces)
- 구조체 형식(Structure types)
- 열거형 형식(Enumeration types)
예시
아래 예시는 클래스의 필드와 생성자, 메서드를 어떻게 선언하는지 보여 줘요. 객체를 인스턴스화하고 인스턴스 데이터를 출력하는 방법도 함께 담겨 있죠. 이 예시에는 클래스가 두 개 선언돼 있는데, 첫 번째 클래스 Child는 private 필드 두 개(name, age)와 public 생성자 두 개, public 메서드 하나를 갖고 있어요. 두 번째 클래스 StringTest는 Main을 포함한답니다.
:::code language="csharp" source="./snippets/keywordsTypes.cs" id="5":::
주의 사항
private 필드(name, age)는 Child 클래스의 public 메서드를 통해서만 접근할 수 있어요. 예를 들어 Main 메서드에서 이런 문장으로 아이의 이름을 출력하는 건 불가능해요.
Console.Write(child1.name); // Error
Main에서 Child의 private 멤버에 접근할 수 있는 경우는 Main이 그 클래스의 멤버일 때뿐이에요. 클래스 안에 액세스 한정자 없이 선언된 형식은 기본적으로 private으로 처리되기 때문에, 이 예시의 데이터 멤버들은 키워드를 지워도 여전히 private랍니다. 마지막으로, 매개변수 없는 생성자(parameterless constructor)로 만든 객체(child3)의 경우 age 필드는 기본값인 0으로 초기화돼요.