목차
클래스
클래스 는 C#의 가장 기본적인 형식입니다. 클래스는 상태(필드)와 작업(메서드 및 기타 함수 멤버)을 하나의 단위로 결합하는 데이터 구조입니다. 클래스는 해당 클래스의 ‘인스턴스’(‘개체’라고도 함)에 대한 정의를 제공합니다. 클래스는 상속 및 다형성 과 파생된 클래스 가 기본 클래스 를 확장하고 특수화할 수 있는 메커니즘을 지원합니다.
새 클래스는 클래스 선언을 사용하여 만들어집니다. 클래스 선언은 헤더로 시작합니다. 헤더는 다음을 지정합니다.
- 클래스의 특성 및 한정자
- 클래스의 이름
- 기본 클래스(기본 클래스에서 상속하는 경우)
- 이 클래스에서 구현한 인터페이스
헤더 다음에는 구분 기호 { 및 } 간에 작성되는 멤버 선언 목록으로 구성되는 클래스 본문이 나옵니다. 다음 코드는 Point라는 간단한 클래스의 선언입니다.
public class Point { public int X { get; } public int Y { get; } public Point(int x, int y) => (X, Y) = (x, y); }
클래스의 인스턴스는 새 인스턴스에 대한 메모리를 할당하고, 인스턴스를 초기화하는 생성자를 호출하고, 인스턴스에 대한 참조를 반환하는 new 연산자를 사용하여 만들어집니다. 다음 문은 두 개의 Point 개체를 만들고 해당 개체에 대한 참조를 두 변수에 저장합니다.
var p1 = new Point(0, 0); var p2 = new Point(10, 20);
개체
개체가 차지하는 메모리는 개체에 더 이상 연결할 수 없을 때 자동으로 회수됩니다. C#에서는 개체를 명시적으로 할당 취소할 필요가 없으며 가능하지도 않습니다.
기본 클래스
클래스 선언은 기본 클래스를 지정할 수 있습니다. 클래스 이름 및 형식 매개 변수 뒤에 콜론과 기본 클래스의 이름을 사용하면 됩니다. 기본 클래스 지정을 생략하면 object 형식에서 파생되는 클래스와 같습니다. 다음 예제에서 Point3D의 기본 클래스는 Point입니다. 첫 번째 예제에서 Point의 기본 클래스는 object입니다.
public class Point3D : Point { public int Z { get; set; } public Point3D(int x, int y, int z) : base(x, y) { Z = z; } }
클래스는 기본 클래스의 멤버를 상속합니다. 상속은 클래스가 기본 클래스의 거의 모든 멤버를 암시적으로 포함함을 의미합니다. 클래스는 인스턴스 및 정적 생성자와 종결자는 상속하지 않습니다. 파생 클래스는 해당 파생된 클래스를 상속하는 멤버에 새 멤버를 추가할 수 있지만 상속된 멤버의 정의를 제거할 수 없습니다. 앞의 예제에서 Point3D는 Point에서 X 및 Y 멤버를 상속하고 모든 Point3D 인스턴스는 세 개의 속성, 즉 X, Y 및 Z를 포함합니다.
클래스 형식에서 해당 기본 클래스 형식 간에 암시적 변환이 존재합니다. 클래스 형식의 변수는 해당 클래스의 인스턴스 또는 모든 파생 클래스의 인스턴스를 참조할 수 있습니다. 예를 들어 이전 클래스 선언에서 형식 Point의 변수는 Point 또는 Point3D를 참조할 수 있습니다.
Point a = new Point(10, 20); Point b = new Point3D(10, 20, 30);