C#/닷넷에서 자주 사용되는 get, set 키워드에 대해서 알아보자.
아주 편리한 키워드 이다.
우선 아래 코드를 보자
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | class People { public String name; public int age; } class Program { static void Main(string[] args) { People kim = new People(); kim.name = "kim"; kim.age = 10; } } | cs |
name과 age 변수에 대해서 public으로 설정하여 어디서든 접근이 가능하다.
하지만 이렇게 하면 정보은닉 원칙에 어긋나기 때문에 private 바꾸는 것이 좋다.
그러면 아래와 같이 get과 set 함수들을 만들어 사용할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | class People { private String name; private int age; public String getName() { if (name == null) return "Error"; return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } class Program { static void Main(string[] args) { People kim = new People(); kim.setName("test"); kim.setAge(10); Console.WriteLine(kim.getName() + " " + kim.getAge()); } } | cs |
위와 같은 방식이 이전 java나 C++에서 사용하던 방식들이다.
하지만 C#에서는 좀더 편리한 get, set 키워드를 제공한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | class People { private String name; private int age; public String Name { get { if (name == null) return "Error"; return name; } set { name = value; } } public int Age { get { return age; } set { age = value; } } } class Program { static void Main(string[] args) { People kim = new People(); kim.Name = "test"; kim.Age = 10; Console.WriteLine(kim.Name + " " + kim.Age); } } | cs |
위의 코드와 같이 private으로 변수를 선언하고 get,set용 프로퍼티를 만들수도 있지만
아래의 코드와 같이 변수 선언을 생략할 수도 있다. (C# 3.0 이후부터 지원)
코드가 좀더 간결해진다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | class People { public String Name { get { if (Name == null) return "Error"; return Name; } set { Name = value; } } public int Age { get;set; } } class Program { static void Main(string[] args) { People kim = new People(); kim.Name = "test"; kim.Age = 10; Console.WriteLine(kim.Name + " " + kim.Age); } } | cs |
'닷넷,C#,.NET' 카테고리의 다른 글
C#/.NET 델리게이트(delegate)와 함수 포인터, 델리게이트 체인 (0) | 2018.05.09 |
---|---|
C#/.NET 연산자 오버로딩(operator) (0) | 2018.05.08 |
C# 7.0에서의 Out 변수 변경점 (0) | 2018.05.06 |
C#/.NET readonly vs const 예제로 보는 차이점 (0) | 2018.05.06 |
C#/.NET 가비지 컬렉션의 메모리 할당 및 해제 기본 원리 (Garbage collection) (0) | 2018.05.02 |