C# 기초 정리: 프로퍼티

Table of Content

프로퍼티(Property)

  • 프로퍼티: 객체 내의 데이터에 접급할 수 있도록 하는 통로
  • 은닉성(캡슐화)을 위해 필드는 private로, ​필드에 접근하는 메소드는 public으로 선언
  • 이 경우 get/set 메소드를 일일이 구현해야 함​
  • 프로퍼티를 사용하면 get/set 메소드를 구현할 필요가 없음
class NameCard
{
    private string name;
 
    /* name에 접근하기 위한 프로퍼티 */
    public string Name
    {
        /* get: 필드 값 읽기 접근자​ */
        get
        {
            return name;
        }
 
        /* set: 필드 값 설정 접근자. set 접근자 미 구현시 읽기전용이 됨.​ */
        set
        {
            name = value; // value: set 접근자의 암묵적 매개변수​
        }
    }
}
 
class Program
{
    static void Main(string[] args)
    {
        NameCard nc = new NameCard();
        nc.Name = "김씨샵";
        Console.WriteLine(nc.Name);
    }
}

 

자동 구현 프로퍼티

class NameCard
{
    public string Name { get; set; }
    public string PhoneNumber { get; set; }
}
 
class Program
{
    static void Main(string[] args)
    {
        NameCard nc = new NameCard();
        nc.Name = "김씨샵";
        nc.PhoneNumber = "010-1234-5678";
        Console.WriteLine("{0}: {1}", nc.Name, nc.PhoneNumber);
    }
}

 

프로퍼와 생성자

class NameCard
{
    public string Name { get; set; }
    public string PhoneNumber { get; set; }
}
 
class Program
{
    static void Main(string[] args)
    {
        /* 생성자를 이용한 프로퍼티 값 할당 */
        NameCard nc = new NameCard()
        {
            Name = "김씨샵",
            PhoneNumber = "010-1234-5678"
        };
        Console.WriteLine("{0}: {1}", nc.Name, nc.PhoneNumber);
    }
}

 

무명 형식

  • 인스턴스를 만들고 다시는 사용하지 ​않을 때 유용​
  • 무명 형식의 프로퍼티에 할당된 값은​ 변경 불가​
class Program
{
    static void Main(string[] args)
    {
        /* 무명 형식 */
        var v = new
        {
            Name = "김씨샵",
            PhoneNumber = "010-1234-5678",
            Scores = new int[] { 80, 90, 100 }
        };
 
        Console.WriteLine("Name: {0}", v.Name);
        Console.WriteLine("PhoneNumber: {0}", v.PhoneNumber);
        Console.Write("Scores: ");
        foreach (var scores in v.Scores)
            Console.Write("{0} ", scores);
        Console.WriteLine();
    }
}

 

인터페이스의 프로퍼티

interface IProduct
{
    string ProductName { get; set; }
}
 
class Product : IProduct
{
    /* 프로퍼티나 인덱서를 가진 인터페이스를 상속하는 클래스는 
     * 반드시 해당 프로퍼티와​ 인덱서를 구현해야 함 */
    public string ProductName { get; set; }
}

 

추상 클래스의 프로퍼티

abstract class Product
{
    /* 추상 프로퍼티는 abstract 키워드로 선언 */
    abstract public string ProductName { get; set; }
 
    /* 추상 클래스는 구현된 프로퍼티도 가질 수 있음 */
    public int serialID
    {
        get { return serialID; }
        set { serialID = value; }
    }
}
 
class MyProduct : Product
{
    public override string ProductName { get; set; }
}

 

댓글 남기기