백업 필드를 사용하는 전체 속성
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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.