Menu
Coddy logo textTech

필드 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이며 프로퍼티를 통해 액세스됩니다. 프로퍼티를 사용하면 로직, 유효성 검사 및 데이터 액세스 또는 수정 방식에 대한 제어를 추가할 수 있습니다. 자동 구현 프로퍼티는 추가적인 로직이 필요하지 않을 때 편리합니다.

challenge icon

챌린지

중급

필드와 속성의 차이점을 보여주는 BankAccount 클래스를 생성하세요:

  • 계좌 잔액을 저장하는 private balance 필드
  • 자동 구현 속성 AccountName
  • balance 필드를 반환하는 읽기 전용 속성 Balance
  • private 필드를 수정하는 DepositWithdraw 메서드

치트 시트

필드는 클래스 내에서 직접 선언된 변수이며, 프로퍼티는 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}");
    }
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

객체 지향 프로그래밍의 모든 레슨