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) 문서를 참고하세요.

본문

클래스는 다음 멤버들의 선언을 담을 수 있어요.

예시

아래 예시는 클래스의 필드와 생성자, 메서드를 어떻게 선언하는지 보여 줘요. 객체를 인스턴스화하고 인스턴스 데이터를 출력하는 방법도 함께 담겨 있죠. 이 예시에는 클래스가 두 개 선언돼 있는데, 첫 번째 클래스 Child는 private 필드 두 개(name, age)와 public 생성자 두 개, public 메서드 하나를 갖고 있어요. 두 번째 클래스 StringTestMain을 포함한답니다.

:::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으로 초기화돼요.

더 알아보기

출처: class keyword - C# Reference