728x90
프로퍼티 ( Property )
개요
- 프로퍼티(Property)는 객체 지향 프로그래밍(OOP)에서 중요한 개념으로, 클래스의 데이터를 안전하게 관리하고 외부에서의 접근을 제어하는 방법을 제공합니다. 프로퍼티는 클래스의 필드에 간접적으로 접근할 수 있도록 하여 데이터 무결성을 유지하고 코드의 가독성을 높입니다.
정의
- C#에서 프로퍼티는 클래스의 내부 데이터를 외부에서 안전하게 접근하고 수정할 수 있는 메서드입니다. 프로퍼티는 get과 set 접근자를 사용하여 값을 읽고 쓸 수 있습니다. get 접근자는 프로퍼티의 값을 반환하고, set 접근자는 프로퍼티의 값을 설정합니다.
get과 set 접근자
- get : 프로퍼티의 값을 반환하는 메서드입니다. 프로퍼티를 읽을 때 호출됩니다.
- set : 프로퍼티의 값을 설정하는 메서드입니다. 프로퍼티에 값을 쓸 때 호출됩니다.
표현방식
C#에서 프로퍼티를 정의하고 사용하는 방법은 다음과 같습니다.
- 기본적인 프로퍼티 사용
public class MyClass
{
private int _value; // 비공개 필드
public int Value // 프로퍼티
{
get { return _value; } // 값을 읽기 위한 get 접근자
set { _value = value; } // 값을 설정하기 위한 set 접근자
}
}
- 자동 구현 프로퍼티
public class MyClass
{
public int Value { get; set; }
}
- 읽기 및 쓰기 전용 프로퍼티
public class MyClass
{
private int _value;
// 읽기 전용 프로퍼티
public int Value
{
get { return _value; }
}
// 쓰기 전용 프로퍼티
public int WriteOnlyValue
{
set { _value = value; }
}
}
프로퍼티 장점 및 단점
장점
- 데이터 캡슐화 : 프로퍼티를 통해 클래스 내부의 필드에 대한 접근을 제어하여 데이터를 보호할 수 있습니다.
- 유연성 : 프로퍼티의 get과 set 접근자에 로직을 추가하여 데이터 접근 방식을 쉽게 변경할 수 있습니다.
- 유지보수성 향상: 코드를 더 읽기 쉽게 만들고, 특정 필드에 대한 접근 방식을 통일함으로써 유지보수가 용이해집니다.
단점
- 추가 코드 작성 필요 : 프로퍼티를 사용하면 get과 set 접근자를 정의해야 하므로 코드가 다소 길어질 수 있습니다.
- 성능 저하 : 필드에 직접 접근하는 것보다 메서드를 호출하는 방식이기 때문에, 많은 경우 성능에 영향을 미칠 수 있습니다.
- 복잡성 증가 : 간단한 클래스나 프로젝트에서는 불필요하게 복잡성을 높일 수 있습니다.
반응형
예시
계산식 프로퍼티
public class Temperature
{
private double _celsius;
public double Celsius
{
get { return _celsius; }
set
{
if (value < -273.15)
{
throw new ArgumentException("Temperature cannot be below absolute zero.");
}
_celsius = value;
}
}
public double Fahrenheit
{
get { return (_celsius * 9 / 5) + 32; }
set { _celsius = (value - 32) * 5 / 9; }
}
}
자동차 클래스
다음은 간단한 자동차 클래스입니다. 이 클래스는 속도와 연료량을 관리하는 프로퍼티를 가지고 있습니다.
using System;
public class Car
{
private int _speed;
private double _fuel;
// 속도 프로퍼티
public int Speed
{
get { return _speed; }
set
{
if (value < 0)
{
throw new ArgumentException("Speed cannot be negative.");
}
_speed = value;
}
}
// 연료 프로퍼티
public double Fuel
{
get { return _fuel; }
set
{
if (value < 0)
{
throw new ArgumentException("Fuel cannot be negative.");
}
_fuel = value;
}
}
}
public class Program
{
public static void Main()
{
Car myCar = new Car();
myCar.Speed = 60;
myCar.Fuel = 50.5;
Console.WriteLine("Speed: " + myCar.Speed); // 60
Console.WriteLine("Fuel: " + myCar.Fuel); // 50.5
}
}
이 예제에서 Car 클래스는 Speed와 Fuel 프로퍼티를 통해 속도와 연료량을 관리합니다. 값을 설정할 때 유효성 검사를 통해 잘못된 값을 방지합니다.
직사각형 클래스
다음은 간단한 직사각형 클래스입니다. 이 클래스는 너비와 높이를 관리하고, 면적을 계산하는 프로퍼티를 가지고 있습니다.
public class Rectangle
{
private double _width;
private double _height;
// 너비 프로퍼티
public double Width
{
get { return _width; }
set
{
if (value < 0)
{
throw new ArgumentException("Width cannot be negative.");
}
_width = value;
}
}
// 높이 프로퍼티
public double Height
{
get { return _height; }
set
{
if (value < 0)
{
throw new ArgumentException("Height cannot be negative.");
}
_height = value;
}
}
// 면적 프로퍼티 (읽기 전용)
public double Area
{
get { return _width * _height; }
}
}
public class Program
{
public static void Main()
{
Rectangle myRect = new Rectangle();
myRect.Width = 5;
myRect.Height = 10;
Console.WriteLine("Width: " + myRect.Width); // 5
Console.WriteLine("Height: " + myRect.Height); // 10
Console.WriteLine("Area: " + myRect.Area); // 50
}
}
이 예제에서 Rectangle 클래스는 Width와 Height 프로퍼티를 통해 너비와 높이를 관리합니다. Area 프로퍼티는 읽기 전용으로, 너비와 높이를 곱하여 면적을 계산합니다. 값을 설정할 때 유효성 검사를 통해 잘못된 값을 방지합니다.
결론
프로퍼티는 C#에서 데이터를 안전하게 관리하고, 클래스의 인터페이스를 유연하게 설계할 수 있게 해주는 중요한 도구입니다. 적절하게 사용하면 코드의 가독성과 유지보수성을 크게 향상시킬 수 있습니다. 그러나 불필요하게 사용하면 오히려 코드의 복잡성을 높일 수 있으므로, 상황에 맞게 신중하게 사용하는 것이 중요합니다.
728x90
반응형
'C#' 카테고리의 다른 글
C# - 연결 리스트(Linked List) (0) | 2024.05.18 |
---|---|
C# - 캐스팅 |업캐스팅(UpCasting), 다운캐스팅(DownCasting) (0) | 2024.05.16 |
C# - 상속 ( Inheritance ) (0) | 2024.05.16 |
C# - 이벤트헨들러 ( EventHandler ) (0) | 2024.05.15 |
C# - 델리게이트 함수 ( Delegate ) (0) | 2024.05.15 |
C# - 람다식 ( Lambda ) (0) | 2024.05.15 |