728x90
안녕하세요!
이번글에서는 C#에서 프로퍼티(Property)에 대한 내용과 함께 프로퍼티를 활용하여 데이터의 접근과 보호를 간편하게 관리하는 방법에 대해 알아보겠습니다.
프로퍼티(Property)
- 객체의 상태를 표현하고 관리하는데 중요한 역할을 수행하는 기능입니다.
- 클래스 내부의 필드(Field)와 외부 코드 간의 상호작용을 중개하는 접근자(Accessor)를 제공하는데 사용됩니다.
- 즉, 필드에 접근하여 값을 가져오거나 설정하는데 사용되는 특수한 메서드입니다.
- 프로퍼티를 사용하면 클래스 외부에서 필드에 직접 접근하는 것을 피하고, 필드에 대한 접근을 제어할 수 있습니다.
public class Person
{
// 필드 선언
private string name;
// 프로퍼티 선언
public string Name
{
get { return name; }
set { name = value; }
}
}
- 위의 예제에서 Name 프로퍼티는 name 필드에 접근하여 값을 가져오거나 설정하는데 사용됩니다.
프로퍼티의 접근자(Getter)와 설정자(Setter)
- 프로퍼티는 get 접근자와 set 설정자를 통해 값을 가져오고 설정할 수 있습니다.
- get 접근자는 프로퍼티를 읽을 때 사용되며, set 설정자는 프로퍼티를 설정할 때 사용됩니다.
- 필요에 따라 get 또는 set 접근자를 생략하여 읽기 전용 프로퍼티나 쓰기 전용 프로퍼티를 정의할 수도 있습니다.
public class Rectangle
{
private double width;
private double height;
// 읽기 전용 프로퍼티
public double Area
{
get { return width * height; }
}
// 쓰기 전용 프로퍼티
public double Width
{
set { width = value > 0 ? value : 0; }
}
// 읽기/쓰기 프로퍼티
public double Height
{
get { return height; }
set { height = value > 0 ? value : 0; }
}
}
- Area 프로퍼티는 읽기 전용
- Width 프로퍼티는 쓰기 전용
- Height 프로퍼티는 읽기와 쓰기가 모두 가능
프로퍼티의 자동 구현
- C# 3.0부터는 자동 구현 프로퍼티를 사용하여 프로퍼티를 간결하게 선언할 수 있습니다.
- 자동 구현 프로퍼티는 백엔드 필드를 따로 선언하지 않고, 컴파일러가 자동으로 프로퍼티에 대한 내부 필드를 생성합니다.
public class Car
{
// 자동 구현 프로퍼티
public string Model { get; set; }
public int Year { get; set; }
}
- Model과 Year 프로퍼티는 자동 구현 프로퍼티로, 컴파일러가 자동으로 내부 필드를 생성하여 값의 저장과 반환을 처리합니다.
프로퍼티 활용
- 프로퍼티를 활용하면 클래스 외부에서 필드에 접근하는 것을 제어하고, 필드의 값을 보호하여 무효한 데이터를 설정하는 것을 방지할 수 있습니다.
- 프로퍼티를 사용하여 읽기 전용, 쓰기 전용, 읽기/쓰기 모두 가능한 프로퍼티를 간편하게 정의할 수 있습니다.
public static void Main()
{
Rectangle rect = new Rectangle();
rect.Width = 10;
rect.Height = 5;
double area = rect.Area; // 읽기 전용 프로퍼티인 Area를 통해 면적을 읽어옴
Console.WriteLine($"사각형의 면적: {area}");
}
- Width와 Height 프로퍼티를 통해 사각형의 너비와 높이를 설정하고, Area 프로퍼티를 통해 사각형의 면적을 읽어옵니다.
이번 글에서는 C# 프로퍼티에 대해 알아보고, 데이터의 접근과 보호를 관리하는데 중요한 역할을 수행하는 방법을 살펴보았습니다.
프로퍼티를 활용하면 클래스의 멤버 접근을 제어하고, 유효성을 검사하여 안전한 데이터 조작을 도와주며 자동 구현 프로퍼티를 사용하면 불필요한 코드를 줄이고 간결한 프로그래밍을 할 수 있습니다.
C#에서 프로퍼티를 적절하게 활용하여 객체 지향 프로그래밍을 보다 효율적으로 구현하시기 바랍니다.
감사합니다!
728x90
'[C#] > 프로그래밍 기초' 카테고리의 다른 글
[C#] 프로그래밍 기초 : Call by value & Call by reference (29) | 2023.08.02 |
---|---|
[C#] 프로그래밍 기초 : foreach (20) | 2023.08.01 |
[C#] 프로그래밍 기초 : 병렬제어 (18) | 2023.07.20 |
[C#] 프로그래밍 기초 : 문자열(String) (22) | 2023.07.13 |
[C#] 프로그래밍 기초 : 유용한 라이브러리 (15) | 2023.06.28 |