언어/C#

[C#] 프로퍼티

겜도리도리 2022. 9. 24. 21:58
반응형

개요

객체 지향 프로그래밍에서, 은닉성 때문에 Get함수와 Set함수를 사용한다.

C++에는 없고, C#에는 있는 프로퍼티 기능을 사용하면 이를 간단하게 줄일 수 있다.

설명

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using System;
 
namespace CSharp
{
    class Program
    {
        class Monster
        {
            private int hp = 100;
 
            public int GetHp() { return hp; }
            public void SetHp(int value) { hp = value; }
        }
        static void Main(string[] args)
        {
            Monster monster = new Monster();
            monster.SetHp(50);
        }
    }
}
cs

Monster 클래스에서 hp를 은닉하기 위해 GetHp, SetHp 함수를 구현했다.

이를 프로퍼티를 사용하면 간단하게 바꿀 수 있다.

 

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
37
using System;
 
namespace CSharp
{
    class Program
    {
        class Monster
        {
            private int hp = 100;
            public int Hp
            {
                get { return hp; }
                set
                {
                    if (value > 100)
                    {
                        value = 100;
                    }
                    hp = value;
                }
                
            }
        }
        static void Main(string[] args)
        {
            Monster monster = new Monster();
 
            monster.Hp = 100;
            Console.WriteLine(monster.Hp);
            monster.Hp = 200;
            Console.WriteLine(monster.Hp);
            monster.Hp = 50;
            Console.WriteLine(monster.Hp);
        }
    }
}
 
cs

get으로 hp를 반환하고 set으로 hp를 설정한다.

hp가 100초과로 설정되면 hp를 100으로 맞춰준다.

set 함수로 설정할 때에는, 매개변수를 value로 사용한다.

 

정상적으로 출력되는 모습

 

get; set;을 생략할 수도 있다.

get;을 생략하면 쓰기 전용이 되고

set;을 생략하면 읽기 전용이 된다.

 

자동 구현 프로퍼티로 더 간단하게 사용할 수도 있다.

hp를 선언한 뒤에 바로 get; set;을 넣어주면 된다.

마지막의 = 100;의 초기화 문법은 C# 7.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
using System;
 
namespace CSharp
{
    class Program
    {
        class Monster
        {
            public int hp
            {
                get; set;
            } = 100;
        }
        static void Main(string[] args)
        {
            Monster monster = new Monster();
 
            Console.WriteLine(monster.hp);
            monster.hp = 50;
            Console.WriteLine(monster.hp);
        }
    }
}
 
cs

마찬가지로 정상 출력되는 모습

 

반응형

'언어 > C#' 카테고리의 다른 글

[C#] Generic  (0) 2022.03.22
[C#] delegate  (0) 2021.10.18
[C#] Static  (0) 2021.10.14