다음을 통해 공유


C의 개체 지향 기술 개요#

C#에서 클래스, 구조체 또는 레코드 형식의 정의는 형식이 수행할 수 있는 작업을 지정하는 청사진과 같습니다. 개체는 기본적으로 청사진에 따라 할당되고 구성된 메모리 블록입니다. 이 문서에서는 이러한 청사진 및 해당 기능에 대한 개요를 제공합니다. 이 시리즈의 다음 문서에서는 개체를 소개합니다.

캡슐화

캡슐화를 개체 지향 프로그래밍의 첫 번째 핵심 요소 또는 원칙이라고도 합니다. 클래스 또는 구조체는 각 멤버가 클래스 또는 구조체 외부의 코드에 액세스할 수 있는 방법을 지정할 수 있습니다. 클래스 또는 어셈블리 외부의 사용자가 의도하지 않은 멤버는 코딩 오류나 악의적인 악용 가능성을 줄이기 위해 숨겨집니다. 자세한 내용은 개체 지향 프로그래밍 자습서를 참조하세요.

구성원

형식의 멤버 에는 모든 메서드, 필드, 상수, 속성 및 이벤트가 포함됩니다. C#에는 다른 언어에 있는 것처럼 전역 변수 또는 메서드가 없습니다. 프로그램의 진입점인 Main 메서드도 클래스 또는 구조체 내에서 선언되어야 합니다( 최상위 문을 사용하는 경우 암시적으로).

다음 목록에는 클래스, 구조체 또는 레코드에서 선언할 수 있는 다양한 종류의 멤버가 모두 포함됩니다.

  • 분야
  • 상수
  • 속성
  • 메서드
  • 생성자
  • 이벤트
  • 파이널라이저
  • 인덱서
  • 운영자
  • 중첩된 유형

자세한 내용은 멤버를 참조 하세요.

접근성

일부 메서드 및 속성은 클라이언트 코드라고 하는 클래스 또는 구조체 외부의 코드에서 호출되거나 액세스되어야 합니다. 다른 메서드 및 속성은 클래스 또는 구조체 자체에서만 사용할 수 있습니다. 의도한 클라이언트 코드만 연결할 수 있도록 코드의 접근성을 제한하는 것이 중요합니다. 다음 액세스 한정자를 사용하여 형식 및 해당 멤버가 클라이언트 코드에 액세스할 수 있는 방법을 지정합니다.

기본 접근성은 .입니다 private.

상속

클래스(구조체는 아님)는 상속 개념을 지원합니다. 기본 클래스라고 하는 다른 클래스에서 파생되는 클래스는 생성자 및 종료자를 제외한 기본 클래스의 모든 public, protected 및 내부 멤버를 자동으로 포함합니다.

클래스를 추상으로 선언할 수 있습니다. 즉, 하나 이상의 메서드에 구현이 없습니다. 추상 클래스를 직접 인스턴스화할 수는 없지만 누락된 구현을 제공하는 다른 클래스의 기본 클래스로 사용할 수 있습니다. 다른 클래스가 상속되지 않도록 클래스를 sealed 로 선언할 수도 있습니다.

자세한 내용은 상속다형성을 참조하세요.

인터페이스

클래스, 구조체 및 레코드는 여러 인터페이스를 구현할 수 있습니다. 인터페이스에서 구현하려면 형식이 인터페이스에 정의된 모든 메서드를 구현한다는 것을 의미합니다. 자세한 내용은 인터페이스를 참조하세요.

제네릭 형식

하나 이상의 형식 매개 변수를 사용하여 클래스, 구조체 및 레코드를 정의할 수 있습니다. 클라이언트 코드는 형식의 인스턴스를 만들 때 형식을 제공합니다. 예를 들어 네임스페이 List<T> 스의 클래스 System.Collections.Generic 는 하나의 형식 매개 변수로 정의됩니다. 클라이언트 코드는 리스트가 보유하는 형식을 지정하기 위해 List<string> 또는 List<int>의 인스턴스를 만듭니다. 자세한 내용은 제네릭을 참조하세요.

정적 형식

클래스(구조체 또는 레코드는 아님)를 로 static선언할 수 있습니다. 정적 클래스는 정적 멤버만 포함할 수 있으며 키워드를 사용하여 new 인스턴스화할 수 없습니다. 프로그램이 로드될 때 클래스의 복사본 하나가 메모리에 로드되고 해당 멤버는 클래스 이름을 통해 액세스됩니다. 클래스, 구조체 및 레코드에는 정적 멤버가 포함될 수 있습니다. 자세한 내용은 정적 클래스 및 정적 클래스 멤버를 참조하세요.

Nested Types

클래스, 구조체 또는 레코드는 다른 클래스, 구조체 또는 레코드 내에 중첩될 수 있습니다. 자세한 내용은 중첩 형식을 참조하세요.

부분 형식

한 코드 파일에서 클래스, 구조체 또는 메서드의 일부를 정의하고 다른 부분은 별도의 코드 파일에서 정의할 수 있습니다. 자세한 내용은 Partial 클래스 및 메서드를 참조하세요.

개체 이니셜라이저

속성에 값을 할당하여 클래스 또는 구조체 개체와 개체 컬렉션을 인스턴스화하고 초기화할 수 있습니다. 자세한 내용은 개체 이니셜라이저를 사용하여 개체를 초기화하는 방법을 참조하세요.

Anonymous Types

명명된 클래스를 만드는 것이 편리하지 않거나 필요하지 않은 경우 익명 형식을 사용합니다. 명명된 데이터 멤버는 익명 형식을 정의합니다. 자세한 내용은 익명 형식을 참조하세요.

확장 멤버

별도의 형식을 만들어 파생 클래스를 만들지 않고 클래스를 "확장"할 수 있습니다. 해당 형식에는 원래 형식에 속한 것처럼 호출할 수 있는 메서드가 포함되어 있습니다. 자세한 내용은 Extension 메서드를 참조하세요.

암시적으로 형식이 지정된 로컬 변수

클래스 또는 구조체 메서드 내에서 암시적 입력을 사용하여 컴파일러에 컴파일 시간에 변수의 형식을 결정하도록 지시할 수 있습니다. 자세한 내용은 var(C# 참조)을 참조하세요.

레코드

클래스 또는 구조체에 한정자를 추가할 record 수 있습니다. 레코드는 값 기반 같음의 기본 제공 동작이 있는 형식입니다. 레코드(또는 record classrecord struct)는 다음과 같은 기능을 제공합니다.

  • 변경할 수 없는 속성을 사용하여 참조 형식을 만들기 위한 간결한 구문입니다.
  • 가치의 평등 레코드 형식의 두 변수는 형식이 같고 모든 필드에 대해 두 레코드의 값이 같으면 같습니다. 클래스는 참조 같음을 사용합니다. 클래스 형식의 두 변수는 동일한 개체를 참조하는 경우 같습니다.
  • 비결정적 돌연변이에 대한 간결한 구문입니다. with 식을 사용하면 기존 인스턴스의 복사본이지만 지정된 속성 값이 변경된 새 레코드 인스턴스를 만들 수 있습니다.
  • 표시를 위한 기본 제공 서식입니다. 이 메서드는 ToString 레코드 형식 이름과 public 속성의 이름과 값을 출력합니다.
  • 레코드 클래스의 상속 계층 구조 지원 레코드 클래스는 상속을 지원합니다. 레코드 구조체는 상속을 지원하지 않습니다.

자세한 내용은 레코드를 참조하세요.

C# 언어 사양

자세한 내용은 C# 언어 사양을 참조하세요. 언어 사양은 C# 구문 및 사용의 최종 소스입니다.