필드 vs 프로퍼티
Coddy C# 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 70개 중 6번째.
필드는 클래스 내에서 직접 선언된 변수입니다. 프로퍼티는 get 및 set 접근자를 사용하여 필드에 대한 제어된 액세스를 제공하는 멤버입니다.
필드는 데이터를 직접 저장합니다
public class Person
{
// 필드 - 직접적인 변수 저장
private string name;
private int age;
}프로퍼티는 get과 set을 사용하여 제어된 접근을 제공합니다.
public class Person
{
private string name;
// 백킹 필드(backing field)가 있는 프로퍼티
public string Name
{
get { return name; }
set { name = value; }
}
}자동 구현 프로퍼티 (단축 표기)
public class Person
{
// 자동 구현 프로퍼티
public string Name { get; set; }
public int Age { get; set; }
}속성에는 유효성 검사 로직이 포함될 수 있습니다
public class Person
{
private int age;
public int Age
{
get { return age; }
set
{
if (value >= 0 && value <= 120)
age = value;
}
}
}읽기 전용 속성 (get 접근자만 존재)
public class Circle
{
private double radius;
public double Radius
{
get { return radius; }
}
// 읽기 전용 계산된 속성
public double Area
{
get { return Math.PI * radius * radius; }
}
}필드는 일반적으로 private이며 프로퍼티를 통해 액세스됩니다. 프로퍼티를 사용하면 로직, 유효성 검사 및 데이터 액세스 또는 수정 방식에 대한 제어를 추가할 수 있습니다. 자동 구현 프로퍼티는 추가적인 로직이 필요하지 않을 때 편리합니다.
챌린지
중급필드와 속성의 차이점을 보여주는 BankAccount 클래스를 생성하세요:
- 계좌 잔액을 저장하는 private
balance필드 - 자동 구현 속성
AccountName - balance 필드를 반환하는 읽기 전용 속성
Balance - private 필드를 수정하는
Deposit및Withdraw메서드
치트 시트
필드는 클래스 내에서 직접 선언된 변수이며, 프로퍼티는 get 및 set 접근자를 사용하여 필드에 대한 제어된 액세스를 제공합니다.
필드는 데이터를 직접 저장합니다:
public class Person
{
private string name;
private int age;
}프로퍼티는 get과 set을 통해 제어된 액세스를 제공합니다:
public class Person
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
}자동 구현 프로퍼티 (약식):
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}유효성 검사 로직이 포함된 프로퍼티:
public int Age
{
get { return age; }
set
{
if (value >= 0 && value <= 120)
age = value;
}
}읽기 전용 프로퍼티 (get 접근자만 있음):
public double Area
{
get { return Math.PI * radius * radius; }
}필드는 일반적으로 private이며 프로퍼티를 통해 액세스됩니다. 프로퍼티를 사용하면 데이터가 액세스되거나 수정되는 방식에 대해 로직, 유효성 검사 및 제어 기능을 추가할 수 있습니다.
직접 해보기
using System;
class Program
{
static void Main()
{
string accountName = Console.ReadLine();
decimal initialBalance = decimal.Parse(Console.ReadLine());
decimal depositAmount = decimal.Parse(Console.ReadLine());
BankAccount account = new BankAccount(accountName, initialBalance);
Console.WriteLine($"Account: {account.AccountName}");
Console.WriteLine($"Initial Balance: ${account.Balance}");
account.Deposit(depositAmount);
Console.WriteLine($"After Deposit: ${account.Balance}");
string result = account.Withdraw(2000);
Console.WriteLine($"Withdraw attempt: {result}");
Console.WriteLine($"Final Balance: ${account.Balance}");
}
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.