본문 바로가기
C#

C# -프로퍼티 ( Property )

by Classic Master 2024. 5. 16.
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
반응형