갓똥
나는야 프로그래머
갓똥
전체 방문자
오늘
어제
  • 분류 전체보기 (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# 코루틴
  • C++ 상속
  • 유니티 그래프 그리기
  • 자바
  • 모바일 게임 순위
  • 유니티 골드그래프
  • C++ virtual
  • 게임 디자인 패턴
  • c# collection
  • 롤 골드그래프
  • 글로벌게임매출
  • Unity Graph
  • C++
  • 전세계게임매출순위
  • C# 예외 처리
  • c# delegate
  • 알고리즘
  • C# boxing
  • 유니티 그래프
  • 게임매출순위
  • c# coroutine
  • c# unboxing
  • C++ 소멸자
  • pc게임 순위
  • c# Thread
  • 전세계 게임 매출
  • 게임 매출 순위
  • pc 게임 순위
  • 2020년 게임 매출
  • 강남 방탈출

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
갓똥

나는야 프로그래머

[C#] 속성 (property) (1)
프로그래밍/C#

[C#] 속성 (property) (1)

2020. 3. 12. 00:29
728x90
반응형

1. 핵심 정리

using System;

class People {
    public int age = 0;
}

class Program {
    static void Main() {
        People p = new People();
        
        p.age = 10;
        p.age = -5; // 실수 ?
    }
}

 ① public 필드의 문제점

    => 외부에 잘못된 사용으로 객체의 상태가 잘못될 수 있다.

    => 필드 접근 시 추가적인 기능(스레드 동기화, logging등)을 수행할 수 없다.

 

using System;

class People {
    private int age = 0;
    
    public int  get_age() { return age; }
    public void set_age(int value) { 
        if ( value <= 0 ) {
            // 예외 처리
        }
        else
       	    age = value;
    }
}

class Program {
    static void Main() {
        People p = new People();
        
        // p.age = 10;
        // p.age = -5; // 실수 ?
        
        p.set_age(10);
        p.set_age(-5); // 실수 방지
    }
}

 ② 캡슐화 (Encapsulation)

    => 필드는 private로 놓고, setter와 getter 메소드를 사용해서 접근

 

 ③ C# Property 문법

    => setter와 getter 메소드를 자동으로 생성하는 문법

 


2. Property

using System;

class People {
    private int age = 0;
    
    public int  get_age() { return age; }
    public void set_age(int value) { age = value; }
}

class Program {
    static void Main() {
        People p = new People();
        
        p.set_age(10);
        int n = p.get_age();
    }
}

 ① Property 만드는 방법

 ② Property 사용방법

    => 필드와 동일한 방법으로 접근

    => 문맥에 따라 set/get 부분이 실행

 

using System;

class People {
    private int age = 0;
    
    public int Age { 
    	get { return age; }
        set { age = value; }
    }
    
    // public int  get_age() { return age; }
    // public void set_age(int value) { age = value; }
}

class Program {
    static void Main() {
        People p = new People();
        
        p.Age = 10; // set {}
        int n = p.Age; // get {}
        
        // p.set_age(10);
        // int n = p.get_age();
    }
}

 ③ Property 특징

    => 실제로는 메소드 이지만 사용시에는 필드 처럼 보이게 된다.

 


3. Property 문법의 원리

using System;

class People {
    private int age = 0;
    
    public int Age { 
    	get { return age; }
        set { age = value; }
    }
    
    // public int get_Age() { return age; } - error 중복
}

class Program {
    static void Main() {
        People p = new People();
        
        p.Age = 10; // set {}
        int n = p.Age; // get {}
    }
}

 ① Property 원리

    => 컴파일러가 setter와 getter 메소드를 자동으로 생성

    => 메소드 이름 : set_Age / get_Age

    => ILdasm.exe 로 확인 (cl컴파일러로 ildasm practice.exe)

728x90
반응형

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

[C#] 인덱서 (Indexer)  (0) 2020.03.19
[C#] 속성 (Property) (2)  (0) 2020.03.13
[C#] Extension Method  (0) 2020.03.09
[C#] Named, Optional Parameter  (0) 2020.02.28
[C#] 가변 길이 매개 변수 (params)  (0) 2020.02.26
    '프로그래밍/C#' 카테고리의 다른 글
    • [C#] 인덱서 (Indexer)
    • [C#] 속성 (Property) (2)
    • [C#] Extension Method
    • [C#] Named, Optional Parameter
    갓똥
    갓똥
    공부하며 알아가는 내용을 정리해 봅니다.

    티스토리툴바