0Pricing
C# Academy · 강의

백업 필드를 사용하는 전체 속성

getter와 setter에 논리를 추가합니다.

백업 필드를 사용하는 전체 속성은(는) CoddyKit의 무료 C# Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C# Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C# Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

자동 속성 그 이상

get 또는 set 내부에 논리가 필요하면 명시적인 백킹 필드를 사용하는 완전한 속성을 작성합니다. 필드는 데이터를 저장하고 접근자는 접근을 제어합니다.

using System;

class Temperature
{
    private double _celsius;

    public double Celsius
    {
        get { return _celsius; }
        set { _celsius = value; }
    }
}

class Program
{
    static void Main()
    {
        var t = new Temperature();
        t.Celsius = 21.5;
        Console.WriteLine(t.Celsius);
    }
}

뒷받침 필드 규칙

관례상 뒷받침 필드는 private이며 _name처럼 앞에 밑줄을 붙여 이름을 지정합니다. 공개 속성이 이 필드를 노출합니다.

using System;

class Person
{
    private string _name;

    public string Name
    {
        get { return _name; }
        set { _name = value; }
    }
}

class Program
{
    static void Main()
    {
        var p = new Person();
        p.Name = "Grace";
        Console.WriteLine(p.Name);
    }
}

value 키워드

set 접근자 내부에서 암시적 매개 변수 value는 할당되는 값을 담습니다. 이 값을 어떻게 처리할지는 직접 결정합니다.

using System;

class Box
{
    private int _size;

    public int Size
    {
        get { return _size; }
        set { _size = value * 2; }
    }
}

class Program
{
    static void Main()
    {
        var box = new Box();
        box.Size = 10;
        Console.WriteLine("Stored size: " + box.Size);
    }
}

설정자에서 유효성 검사하기

완전한 속성은 저장하기 전에 입력을 검증하는 데 자주 사용되며, 값이 유효하지 않으면 예외를 발생시킬 수 있습니다.

using System;

class Account
{
    private decimal _balance;

    public decimal Balance
    {
        get { return _balance; }
        set
        {
            if (value < 0)
                throw new ArgumentException("Balance cannot be negative");
            _balance = value;
        }
    }
}

class Program
{
    static void Main()
    {
        var a = new Account();
        a.Balance = 500m;
        Console.WriteLine("Balance: " + a.Balance);
    }
}

계산된 읽기 전용 속성

get만 있는 속성은 다른 필드에서 값을 계산할 수 있습니다. 저장되는 값이 없으므로 뒷받침 필드도 필요하지 않습니다.

using System;

class Rectangle
{
    private double _width;
    private double _height;

    public Rectangle(double w, double h)
    {
        _width = w;
        _height = h;
    }

    public double Area
    {
        get { return _width * _height; }
    }
}

class Program
{
    static void Main()
    {
        var r = new Rectangle(4, 5);
        Console.WriteLine("Area: " + r.Area);
    }
}

설정자의 부수 효과

설정자는 값을 저장하는 일 외에도 입력을 정규화하거나 관련 상태를 업데이트하거나 변경 사항을 기록할 수 있습니다.

using System;

class User
{
    private string _email;

    public string Email
    {
        get { return _email; }
        set { _email = value.Trim().ToLower(); }
    }
}

class Program
{
    static void Main()
    {
        var u = new User();
        u.Email = "  Hello@Example.COM  ";
        Console.WriteLine("Normalized: " + u.Email);
    }
}

가져오기에서 지연 계산하기

가져오기 접근자는 처음 요청될 때 비용이 큰 결과를 뒷받침 필드에 저장해 둘 수 있습니다.

using System;

class Report
{
    private string _cached;

    public string Content
    {
        get
        {
            if (_cached == null)
                _cached = "Generated at runtime";
            return _cached;
        }
    }
}

class Program
{
    static void Main()
    {
        var r = new Report();
        Console.WriteLine(r.Content);
        Console.WriteLine(r.Content);
    }
}

잘못된 상태 방지하기

뒷받침 필드와 논리를 결합하면 객체가 항상 유효한 상태를 유지하게 할 수 있습니다. 여기서는 설정자가 값을 특정 범위 안으로 제한합니다.

using System;

class Volume
{
    private int _level;

    public int Level
    {
        get { return _level; }
        set
        {
            if (value < 0) _level = 0;
            else if (value > 100) _level = 100;
            else _level = value;
        }
    }
}

class Program
{
    static void Main()
    {
        var v = new Volume();
        v.Level = 150;
        Console.WriteLine("Clamped: " + v.Level);
    }
}

저장된 값과 계산된 값 결합하기

클래스에서는 저장된 속성(뒷받침 필드 사용)과 그 속성에서 파생된 계산된 읽기 전용 속성을 함께 사용하는 경우가 많습니다.

using System;

class Employee
{
    private string _first;
    private string _last;

    public string First { get { return _first; } set { _first = value; } }
    public string Last { get { return _last; } set { _last = value; } }
    public string FullName { get { return _first + " " + _last; } }
}

class Program
{
    static void Main()
    {
        var e = new Employee { First = "Marie", Last = "Curie" };
        Console.WriteLine(e.FullName);
    }
}

변경 알림 발생시키기

설정자는 데이터가 변경될 때 알림을 보내기에 적합한 위치이며, 사용자 인터페이스 프레임워크에서 많이 사용하는 패턴입니다.

using System;

class Model
{
    private int _count;

    public int Count
    {
        get { return _count; }
        set
        {
            if (_count != value)
            {
                _count = value;
                Console.WriteLine("Count changed to " + _count);
            }
        }
    }
}

class Program
{
    static void Main()
    {
        var m = new Model();
        m.Count = 1;
        m.Count = 1;
        m.Count = 2;
    }
}

종합하기

완전한 속성을 사용하면 클래스가 불변 조건을 적용하고 파생 데이터를 노출하면서도 깔끔한 필드와 같은 인터페이스를 제공할 수 있습니다.

using System;

class Thermostat
{
    private double _target;

    public double Target
    {
        get { return _target; }
        set { _target = value < 10 ? 10 : value; }
    }

    public string Status { get { return _target >= 22 ? "Warm" : "Cool"; } }
}

class Program
{
    static void Main()
    {
        var th = new Thermostat();
        th.Target = 5;
        Console.WriteLine(th.Target + " -> " + th.Status);
        th.Target = 24;
        Console.WriteLine(th.Target + " -> " + th.Status);
    }
}

간단한 확인

완전한 속성에 대한 이해도를 확인해 보세요.

복습

완전한 속성은 비공개 뒷받침 필드와 명시적인 get/set 접근자를 함께 사용하므로 유효성 검사, 정규화, 캐싱 또는 변경 알림을 추가할 수 있습니다. 계산된 읽기 전용 속성에는 가져오기 접근자만 있고 뒷받침 필드는 없습니다. 설정자에서는 value 키워드가 할당되는 값을 전달합니다.

using System;

class Demo
{
    private int _n;
    public int N
    {
        get { return _n; }
        set { _n = value < 0 ? 0 : value; }
    }
    public int Doubled { get { return _n * 2; } }
}

class Program
{
    static void Main()
    {
        var d = new Demo();
        d.N = -5;
        Console.WriteLine(d.N + ", " + d.Doubled);
    }
}

자주 묻는 질문

“백업 필드를 사용하는 전체 속성” 강의는 무료인가요?

네 — “백업 필드를 사용하는 전체 속성” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C# Academy 강의 전체를 잠금 해제할 수 있습니다. C# Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“백업 필드를 사용하는 전체 속성”에서 뭘 배우나요?

getter와 setter에 논리를 추가합니다. 브라우저에서 직접 실행하는 실습 코드로 C# Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

C# Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 C# Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“백업 필드를 사용하는 전체 속성” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 C# Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 C# Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 자동 구현 속성
  2. 백업 필드를 사용하는 전체 속성
  3. 식 본문 멤버
  4. 인덱서
← C# Academy(으)로 돌아가기