갓똥
나는야 프로그래머
갓똥
전체 방문자
오늘
어제
  • 분류 전체보기 (186)
    • 프로그래밍 (146)
      • 자바 (9)
      • 안드로이드 (2)
      • 유니티 (20)
      • C++ (38)
      • C# (56)
      • HTML (2)
      • 파이썬 (3)
      • 자료구조 (2)
      • 알고리즘 (0)
      • 문제풀이 (4)
      • 디자인 패턴 (7)
      • 카카오톡 봇 (1)
      • 엑셀 (1)
      • 기타 (1)
    • 게임 (21)
      • 테일즈위버 (0)
      • 카이로소프트 (1)
      • 순위 (19)
      • 기타 (1)
    • 일상 (13)
      • 카페 (1)
      • 방탈출 (12)
    • 기타 (6)
      • 웃긴자료 (5)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

태그

  • 알고리즘
  • C++ virtual
  • 롤 골드그래프
  • 자바
  • 전세계게임매출순위
  • 게임 디자인 패턴
  • 강남 방탈출
  • pc게임 순위
  • Unity Graph
  • 글로벌게임매출
  • pc 게임 순위
  • C++ 상속
  • C# 예외 처리
  • 2020년 게임 매출
  • 유니티 그래프
  • c# 코루틴
  • 게임 매출 순위
  • 유니티 그래프 그리기
  • c# unboxing
  • C++ 소멸자
  • 모바일 게임 순위
  • 유니티 골드그래프
  • c# Thread
  • c# collection
  • c# coroutine
  • 게임매출순위
  • C++
  • C# boxing
  • 전세계 게임 매출
  • c# delegate

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
갓똥
프로그래밍/C#

[C#] 속성 (Property) (2)

[C#] 속성 (Property) (2)
프로그래밍/C#

[C#] 속성 (Property) (2)

2020. 3. 13. 12:25
728x90
반응형

1. 핵심 정리

using System;

class People {
    private int age = 0;
    
    public int Age {
        get { return age; }
        // protected set { age = value; } - 생략 가능
    }
}

class Program {
    static void Main() {
        People p = new People();
        
        // p.Age = 10; - error
        Console.WriteLine(p.Age);
    }
}

 ① setter / getter 의 접근 권한을 변경할 수 있다.

 

 ② 읽기 전용 또는 쓰기 전용 속성을 만들 수도 있다.

 

 ③ Backing 필드가 없는 속성을 만들 수 도 있다.

 

Backing 필드란?

위의 코드에서 Age는 결국 age필드에 접근하기 위해 만들어진 것이다.
이 때 이런 필드들을 지원필드라고 하며 원어로 Backing field라고 한다.
예를 들어 위의 코드에서 성인인지를 판단하는 부분을 추가한다고 했을 때
아래와 같이 사용할 수 있다.
using System;

class People {
    private int age = 0;
    
    public int Age {
    	get { return age; }
        // protected set { age = value; } - 생략 가능
    }
    
    public bool IsAdult {
    	get { return age > 18; }
    }
}

class Program {
    static void Main() {
    	People p = new People();
        
        // p.Age = 10; - error
        Console.WriteLine(p.Age);
        
        if (p.IsAdult) { }
    }
}

 


2. 자동 속성

using System;

class People {
    private int age = 0;
    
    public int Age {
    	get { return age; }
        set { age = value; }
    }
}

class Program {
    static void Main() {
    	People p = new People();
        
        p.Age = 10;
        Console.WriteLine(p.Age);
    }
}

 

위와 같이 get은 필드를 리턴만 해주고 set이 value를 필드에 넣기만 하는 간단한 코드라면
코드를 더욱 간결하게 할 수 있다.
using System;

class People {
    public int Age { get; set; } = 0; // 자동 속성
}

class Program {
    static void Main() {
    	People p = new People();
        
        p.Age = 10;
        Console.WriteLine(p.Age);
    }
}

 ① 자동 속성 (automatic property)

    => Backing field, set get의 구현을 자동으로 제공하는 property

 

 ② public 필드 vs 자동 속성

사실 위의 코드만 보면 public으로 backing field를 만드는 것과 속성으로 만드는 것과 차이는 없다.
하지만 public으로 필드를 만들어 쓰는것이 시간이 지나 실수가 많으니 
속성으로 바꾸기로 했을 때 이는 사용하는 부분의 모든 코드도 바꾸어야 하는 문제가 있다.
(ex. p.age = 10 -> p.set(10))
따라서 미리 속성으로 만들어 두고 나중에 유효성 검사 부분을 추가하는게 편할 수 있다.

 


3. 속성을 이용한 초기화

using System;

class Point {
    public int X { get; set; } = 0;
    public int Y { get; set; } = 0;
}

class Program {
    static void Main() {
        Point p1 = new Point();
        
        Point p2 = new Point() { X = 10, Y = 20 };
        
        Point p3 = new Point   { X = 10, Y = 20 };
        
        Point p4 = new Point { Y = 20 };
        
    }
}

 ① 객체 생성 시 프라퍼티 값을 초기화 하는 표기법

 

using System;

class Program {
    static void Main() {
        var p = new { Name = "kim", Age = 20 };
        
        Console.WriteLine(p.Name); // "kim"
        p.Name = "lee" // error
    }
}

 ② 무명 형식 (Anonymous type)

    => 읽기 전용 Property로 생성

    => LINQ 등에서 많이 사용

728x90
반응형

'프로그래밍 > C#' 카테고리의 다른 글

[C#] 제너릭 (Generic)  (0) 2020.03.23
[C#] 인덱서 (Indexer)  (0) 2020.03.19
[C#] 속성 (property) (1)  (0) 2020.03.12
[C#] Extension Method  (0) 2020.03.09
[C#] Named, Optional Parameter  (0) 2020.02.28
  • 1. 핵심 정리
  • 2. 자동 속성
  • 3. 속성을 이용한 초기화
'프로그래밍/C#' 카테고리의 다른 글
  • [C#] 제너릭 (Generic)
  • [C#] 인덱서 (Indexer)
  • [C#] 속성 (property) (1)
  • [C#] Extension Method
갓똥
갓똥
공부하며 알아가는 내용을 정리해 봅니다.

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.