클래스는 객체를 생성하기 위한 템플릿 입니다. C#에서 객체는 필드와 메소드를 정의하여 이를 기반으로 동작을 수행하는 객체를 생성합니다.
예를 들어 아래와 같이 학생을 의미하는 CStudent 클래스를 생성해보겠습니다.
public class CStudent
{
// 필드
private string strName;
private int iAge;
// 생성자
public CStudent(string strName, int iAge)
{
this.strName = strName;
this.iAge = iAge;
}
// 메소드
public void WriteStudentInfo()
{
string str = string.Format($"이름: {this.strName}, 나이: {this.iAge}");
Console.WriteLine(str);
}
}
클래스 선언
클래스는 다음과 같이 class 키워드와 고유 식별자를 사용하여 선언됩니다.
//[access modifier] - [class] - [identifier]
public class Customer
{
// Fields, properties, methods and events go here...
}
아래에서 설명하겠지만 액세스 한정자(또는 접근 한정자, 또는 접근 한정자, access modifier)는 class 키워드 앞에 적습니다.
class 형식의 기본 액세스는 internal입니다. class 키워드 뒤에는 식별자(클래스 이름)를 입력합니다.
식별자의 명명 규칙은 여기를 참고하시기 바랍니다.
필드(Field), 메소드(Method), 생성자(Constructor)
이름을 저장하는 strName과 나이를 저장하는 iAge는 필드라고 합니다. 필드는 클래스 내에서 데이터를 저장하는 변수입니다.
public class CStudent
{
// 필드
private string strName;
private int iAge;
}
또한 학생의 정보를 출력하는 WriteStudentInfo는 메소드라고 합니다. 메소드는 클래스의 동작을 정의하는 함수를 말합니다.
public class CStudent
{
// 메소드
public void WriteStudentInfo()
{
string str = string.Format($"이름: {this.strName}, 나이: {this.iAge}");
Console.WriteLine(str);
}
}
생성자는 객체가 생성 될 때 호출하는 특별한 메드로 객체 초기화를 담당합니다.
public class CStudent
{
// 생성자
public CStudent(string strName, int iAge)
{
this.strName = strName;
this.iAge = iAge;
}
}
접근 한정자
C# 클래스 멤버는 접근 한정자를 사용하여 액세스 수준을 지정합니다.
접근 지정자 | 설명 |
---|---|
public | 모든 코드에서 접근 가능 |
private | 클래스 내부에서만 접근 가능 |
protected | 클래스 및 파생 클래스에서 접근 가능 |
internal | 같은 어셈블리 내에서 접근 가능 |
protected internal | 같은 어셈블리 또는 파생 클래스에서 접근 가능 |
위와 같이 private로 설정된 필드는 클래스 내부에서만 사용 가능합니다.
public class CStudent
{
// 필드
private string strName;
private int iAge;
}
class Program
{
static void Main(string[] args)
{
CStudent student1 = new CStudent("홍길동", 10);
student1.strName = "김철수"; // 사용 불가능, error!!
}
}
속성(Property)
속성은 필드의 값을 읽거나, 쓰거나, 계산하는 유연한 메커니즘을 제공하는 멤버입니다. getter와 setter로 이루어져 있으며, private로 설정된 strName 필드 속성을 통해 접근 가능합니다.
public class CStudent
{
// 필드
private string strName;
private int iAge;
// 속
public string Name
{
get { return this.strName; }
set { this.strName = value; }
}
public int Age
{
get { return this.iAge; }
set { this.iAge = value; }
}
}
class Program
{
static void Main(string[] args)
{
CStudent student1 = new CStudent("홍길동", 10);
Console.WriteLine(student1.Name); // 속성으로 필드 Name 값 출력
Console.WriteLine(student1.Age); // 속성으로 필드 Age 값 출력
}
}
간단하게 클래스에 대해 알아보았습니다. C++이나 C#이나 클래스의 대략적인 구조는 비슷 합니다.
github : https://github.com/3001ssw/c_sharp/tree/main/class_study/class_basic