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 |