Field vs Properties

blimeyoops·2023년 8월 4일
0

c#

목록 보기
2/6
post-custom-banner

Field vs Properties

Field

객체지향 프로그래밍에서 클래스가 가장 큰 단위이고 클래스는 그 내부에 많은 것들을 쓸어 담고 있습니다. 그 중에 하나가 필드입니다.

  • 클래스 안에서 선언된 변수(Variable)를 필드
  • 필드는 일반적으로 클래스의 부품 역할을 하며 대부분 private 한정자가 붙음
  • 필드는 클래스가 가지는 속성이며 변수 또는 상수(const)가 위치

필드는 읽기전용 필드와 상수가 있습니다.

상수 필드읽기전용 필드
컴파일 시 데이터 저장런타임 시 데이터 저장
선언과 동시에 초기화선언과 동시에 초기화 또는 생성자에 의해 초기화
static으로 호출static 선언 가능, 인스턴스로 호출

필드는 대부분 private로 선언하고 외부 공개가 필요할 경우 property(속성)으로 사용합니다.

public class Person
{
    //[1] 변수 형식의 필드
    public static string name = "강감찬";

    //[2] 상수 형식의 필드
    public const int m_age = 21;

    //[3] 읽기전용 형식의 필드
    public static readonly object _NickName = "RedPlus";

    //[4] 배열 형식의 필드
    public static string[] _websites = { "dotnet", "ms" };

    //[!] 필드 내용 출력 메서드
    public static void ShowProfile()
    {
        // 로컬변수(Local Variable)
        string strWrite = String.Format("이름: {0}\n나이: {1}\n별명: {2}\n", name, m_age, _NickName);
        strWrite += "홈페이지: ";
        foreach (string s in _websites)
        {
            strWrite += s + '\t';
        }
        strWrite += '\n';
        Console.WriteLine(strWrite);
    }
}

public class Field
{
    public static void Main(string[] args)
    {
        // 지역 변수(LocalVariable): 특정 메서드내에서 선언된 변수
        string name = "유관순";
        Console.WriteLine(name);

        //[!] private으로 선언된 필드는 접근이 안되므로 필드를 public으로 선언했다.  
        Person.name = "홍길동";
        // Person.m_age = 22; // 이 코드는 실행 안됨
        // Person._NickName = "WhitePlus"; // 이 코드는 실행 안됨
        Person._websites[0] = "dotnetkorea";
        Person.ShowProfile();
    }
}

Properties(속성)

속성은 필드의 값을 읽거나 쓰거나 계산하는 방법을 제공하는 클래스의 속성을 나타내는 멤버입니다.

  • 클래스 안에 선언된 필드의 내용을 설정(set)하거나 참조(get)할 때 사용하는 코드 블록을 속성이라 함
  • 개체의 필드 중에서 외부에 공개하고자 할 때 public 속성을 사용
public class Car
{
    // 필드
    private string color;

    // 생성자
    public Car()
    {
        this.color = "Black";
    }

    // 메서드로 외부에 공개
    public void SetColor(string color)
    {
        this.color = color; // this.필드 = 매개변수;
    }

    public string GetColor()
    {
        return color;
    }

    // 속성(프로퍼티;Property)
    public string Color
    {
        get
        {
            return color;
        }
        set
        {
            color = value;
        }
    }

    // 읽기전용 속성
    public string Make
    {
        get
        {
            return "한국자동차";
        }
    }

    // 쓰기전용 속성
    private string _Type;
    public string Type
    {
        set
        {
            _Type = value;
        }
    }

    // 축약형 속성
    public string Name { get; set; }
}

class PropertyAll
{
    static void Main()
    {
        //[1] Set과 Get 메서드 사용
        Car car1 = new Car();
        car1.SetColor("Red");
        Console.WriteLine(car1.GetColor()); // Red

        //[2] 속성을 사용
        Car whiteCar = new Car();
        whiteCar.Color = "White"; // set {}
        Console.WriteLine(whiteCar.Color); // get {}

        //[3] 읽기전용 속성
        Car k = new Car();
        // k.Make = ""; // <- 이 코드는 에러
        Console.WriteLine(k.Make); // 읽기만 가능

        //[4] 쓰기전용 속성
        Car car = new Car();
        car.Type = "중형"; // 쓰기만 가능
        // Console.WriteLine(car.Type); // <- 이 코드는 에러: 읽기는 불가

        //[5] 축약형 속성
        Car myCar = new Car();
        myCar.Name = "좋은차";
        Console.WriteLine(myCar.Name);
    }
}
post-custom-banner

0개의 댓글