클래스는 C#의 필수 유형 중 하나입니다. 우리는 클래스를 문제 영역과 관련된 객체에 대한 청사진으로 생각할 수 있습니다. 이것은 우리가 객체를 생성하는 템플릿으로, 이 클래스에서 생성된 객체 집합이 공유할 구조와 동작을 정의합니다. 간단히 말해서 클래스는 쿠키 커터이고 객체는 쿠키 자체입니다.
클래스는 또한 객체 지향 프로그래밍에서 중요한 개념인 캡슐화를 가능하게 합니다. 데이터와 데이터에 대한 작업을 한 곳에서 결합하고 해당 개체의 사용자에게 간단한 API를 제공하는 것을 의미합니다. 클래스를 사용하면 데이터를 캡슐화하고 다른 클래스에서 관련 없는 세부 정보를 숨길 수 있습니다.
class 키워드 뒤에 클래스 이름을 사용하여 클래스를 만들 수 있습니다.
// User.cs public class User{ private string name; private int salary; public void Promote(){ salary += 1000; } }
위의 예에서 User는 사용자를 나타내는 클래스입니다. 클래스는 이름이라는 두 가지 데이터 조각을 캡슐화합니다. 및 급여 . 이를 클래스 필드라고 하며 사용자의 이름과 급여를 보유합니다. Promote()라는 메서드도 있습니다. , 사용자의 급여를 인상합니다.
각 클래스에는 해당 클래스가 다른 클래스에 표시되는지 여부를 제어하는 연결된 액세스 한정자가 있습니다. 다음은 액세스 한정자에 제공할 수 있는 다섯 가지 값입니다.
액세스 수정자 | 설명 |
---|---|
공개 | 무제한 액세스 |
보호됨 | 파생 클래스에 대한 제한된 액세스 |
내부 | 어셈블리에 대한 제한된 액세스 |
내부 보호 | 어셈블리 또는 파생 클래스에 대한 제한된 액세스 |
비공개 | 외부 접근 금지 |
클래스의 인스턴스를 생성하기 위해 new 예어. 신규 연산자는 개체의 데이터에 필요한 바이트 수를 계산하고 개체에 메모리를 할당합니다. 그런 다음 새로 생성된 개체에 대한 포인터(참조라고도 함)를 반환합니다.
var alice = new User(); var bob = new User();
이 참조는 =기호의 왼쪽에 있는 변수에 저장됩니다. 위의 예에서 Alice와 Bob은 새로 생성된 객체에 대한 참조 또는 포인터를 보유하고 있습니다.
C#에서 클래스에 대한 명명 규칙은 복합어에서 각 단어의 첫 글자를 대문자로 표시하는 PascalCase를 따릅니다. StringBuilder, UserController 등. 이름이 클래스 이름과 일치하는 파일에 클래스를 만들 필요는 없습니다. 그러나 대부분의 C# 프로젝트에서 사용하는 규칙입니다.
생성자
위의 예에서 User 클래스의 인스턴스, 즉 alice와 bob을 생성할 때 초기 이름과 급여를 제공하지 않았습니다. 종종 새로 생성된 객체는 작업을 수행하기 위해 약간의 정보가 필요하고 생성자는 클래스 데이터를 초기화하는 데 사용됩니다.
다음과 같이 생성자를 추가하여 사용자에게 이름과 급여를 제공할 수 있습니다. -
public class User{ private string name; private int salary; public User(string name, int salary){ this.name = name; this.salary = salary; } public void Promote(){ salary += 1000; } }
생성자가 있으면 새 인스턴스를 생성할 때 사용자의 이름과 급여를 전달할 수 있습니다.
var alice = new User("Alice", 50000); var bob = new User("Bob", 45000);
한 클래스에 둘 이상의 생성자가 있을 수 있습니다. 여러 생성자를 사용하면 다양한 방식으로 클래스를 초기화할 수 있습니다. 예를 들어 사용자 이름만 사용하고 기본 급여를 할당하는 다른 생성자를 추가할 수 있습니다.
public User(string name){ this.name = name; this.salary = 50000; }
예시
using System; class Program{ static void Main(){ var alice = new User(); alice.Print(); var bob = new User(); bob.Print(); var chris = new User("Chris", 50000); chris.Print(); var debs = new User("Debs", 45000); debs.Print(); var scott = new User("Scott"); scott.Print(); } } public class User{ private string name; private int salary; public User(){ } public User(string name){ this.name = name; this.salary = 50000; } public User(string name, int salary){ this.name = name; this.salary = salary; } public void Promote(){ salary += 1000; } public void Print(){ Console.WriteLine($"{name}: {salary}"); } }
출력
: 0 : 0 Chris: 50000 Debs: 45000 Scott: 50000