*์ด ๊ธ์ <์ ๋ํฐ C# ์คํฌ๋ฆฝํ ๋ง์คํฐํ๊ธฐ> ์ฑ ์ ๋ฐํ์ผ๋ก ๊ณต๋ถํ ๊ธ์ ๋๋ค. ๋ฌธ์ ์, ์ญ์ ํ๊ฒ ์ต๋๋ค.
1. ํ๋กํผํฐ(Property)
์ธ๋ถ์์ ์ด๋ค ํด๋์ค ๋ด๋ถ์ ๋ณ์๋ฅผ ์ฌ์ฉํ ๋, ํด๋น ๋ณ์๋ฅผ ์ด๊ณณ ์ ๊ณณ์์ ๊ฐ์ ธ๊ฐ ์ฌ์ฉํ๋ ๊ณณ์์๋ง๋ค ์กฐ๊ฑด์ ๋ณด๋ ๊ฒ์ ๋นํจ์จ์ ์ผ ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก๋ ๋ค์๊ณผ ๊ฐ์ด ์ํ ๊ฒ๋๋ค.
- ๋ณ์์ ๊ฐ์ด ํญ์ ์ฌ๋ฐ๋ฅด๋๋ก ๊ฐ์ ํ์ฌ, ํ ๋น๋ ๊ฐ์ ํ์คํ ํ๊ธธ ๋ฐ๋ ๊ฒฝ์ฐ
- ์๋ฅผ ๋ค์ด, ํ๋ ์ด์ด ์ฒด๋ ฅ์ 0 ~ 100์๋ง ๊ฐ ํ ๋นํ๊ธฐ, ์ ํด์ง ์กฐํฉ๋ง์ ํ์ฉํ๋ ๋ฌธ์์ด ๋ณ์ ๋ง๋ค๊ธฐ ๋ฑ
- ๋ณ์์ ๊ฐ์ด ๋ณ๊ฒฝ๋์์ ๋๋ฅผ ๊ฐ์งํ์ฌ, ์ด ๊ฐ์ ์ํฅ์ ๋ฐ๋ ๋ค๋ฅธ ํจ์๋ ๋์์ ์คํํ๊ธธ ์ํ ๊ฒฝ์ฐ
์ด์ ํ์ฉํ ์ ์๋ ๊ฒ์ด ๋ฐ๋ก ํ๋กํผํฐ(Property)์ ๋๋ค.
2. ํ๋กํผํฐ์ ์ฌ์ฉ ์์
1) ์ ํด์ง ๋ฒ์ ๋ด์ ๊ฐ๋ง ํ ๋นํ๊ธฐ
๋๋ต์ ์ธ ์ฌ์ฉ ์์ ํํ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
public class Example : MonoBehaviour
{
public float HP // '_hp' ๋ณ์์ ๋ํ ํ๋กํผํฐ
{
get
{
return _hp;
}
set
{
if(_hp >= 0f && _hp <= 100f)
{
_hp = value;
}
}
}
private float _hp; // ์ค์ ๋ด๋ถ ํด๋์ค ๋ณ์
}
- ๋ณ์์ฒ๋ผ ์ ์ธ๋์ง๋ง, ํจ์์ฒ๋ผ ์ค๊ดํธ๋ก ๋ฌถ์ด๋ ๊ฒ์ด ํน์ง
- get : ์ธ๋ถ์์ ํด๋น ํ๋กํผํฐ์ ์ ๊ทผํ์ฌ ์ฝ์ด์ผ ํ๋ ์ํฉ์์ ํธ์ถ๋จ
- set : ์ธ๋ถ์์ ํด๋น ํ๋กํผํฐ์ ์ ๊ทผํ์ฌ ๊ฐ์ ํ ๋นํ๋ ์ํฉ์์ ํธ์ถ๋จ
์์ ๊ฐ์ด ํ๋กํผํฐ์ set ํจ์์ ์กฐ๊ฑด๋ถ๋ก ๊ฐ์ ํ ๋น๋ฐ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด, ์ธ๋ถ์์ ํด๋น ํ๋กํผํฐ๋ฅผ ํตํด ๋ณ์์ ๊ฐ์ ํ ๋นํ ๋ ๋ณ๋์ ์กฐ๊ฑด๋ฌธ์ด ํ์์๊ฒ ๋ฉ๋๋ค.
Example example = new Example();
example.HP = 10f; // ์ฌ๋ฐ๋ฅธ ๊ฐ ํ ๋น
// example.HP = 5000f; ๊ฐ์ด ํ ๋น๋๊ธด ํ๋, ํ๋กํผํฐ ๋ด๋ถ์์ ํํฐ๋ง๋๋ค.
2) ํน์ ์ด๋ฒคํธ ๋ฐ์์ํค๊ธฐ
๋ณ์์ ๊ฐ ๋ณ๊ฒฝ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํค๊ธธ ์ํ๋ค๋ฉด ํ๋กํผํฐ๋ฅผ ํตํด์๋ ๊ตฌํ์ด ๊ฐ๋ฅํฉ๋๋ค.
public float HP
{
get
{
return _hp;
}
set
{
if(_hp >= 0f && _hp <= 100f)
{
float preHp = _hp;
_hp = value;
if (!Mathf.Approximately(_hp, preHp))
OnChangeValue();
}
}
}
3. ํ๋กํผํฐ์ ์ข ๋ฅ
์ฝ๊ธฐ ์ ์ฉ ํ๋กํผํฐ
public class Example : MonoBehaviour
{
private float _hp;
public float HP // ์ฝ๊ธฐ ์ ์ฉ
{
get
{
return _hp;
}
}
}
์ฐ๊ธฐ ์ ์ฉ ํ๋กํผํฐ
public class Example : MonoBehaviour
{
private float _hp;
public float HP // ์ฐ๊ธฐ ์ ์ฉ
{
set
{
_hp = value;
}
}
}
์๋ ๊ตฌํ ํ๋กํผํฐ
- ์กฐ๊ฑด์ด ์๋ ๊ฒ์ด ์๋, ๋จ์ํ ๋ณ์ ๊ฐ ํ ๋น๊ณผ ๋ฐํ๋ง ํ ๊ฒ์ด๋ผ๋ฉด ์๋ ๊ตฌํ ํ๋กํผํฐ ์ฌ์ฉ์ด ํธํจ.
- get, set ์ ๊ทผ์ ์์ ์๋ฌด๊ฒ๋ ์ฐ์ง ์์ผ๋ฉด ๋จ.
- ํด๋์ค ๋ด๋ถ ๋ณ์์ ๋ํ ํ ๋น, ๋ฐํ์ด ์๋ ํ๋กํผํฐ ๊ทธ ์์ฒด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ.
public class Example : MonoBehaviour
{
public float HP { get; set; } // ์๋ ๊ตฌํ ํ๋กํผํฐ
}
class ExternalClass
{
public void Function()
{
Example example = new Example();
example.HP = 50f; // ํ๋กํผํฐ ๊ทธ ์์ฒด๋ฅผ ๋ณ์๋ก ์ฌ์ฉํ๋ค.
}
}
ํ๋กํผํฐ ์ฌ์ฉ ํ
// 1. ํ๋กํผํฐ๋ ์ ์ธ๊ณผ ๋์์ ํ๋์ ๋ํ ์ด๊ธฐํ ๊ฐ๋ฅ
public float HP { get; set; } = 100f;
// 2. ํด๋์ค ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋๋ ์ด๊ธฐํ ๊ฐ๋ฅ
Example example = new Example() { HP = 100f };
// 3. ๋ฌด๋ช
ํ์ ์ง์
var example = new { HP = 100f }; // ๋จ, ํ๋ฒ ๊ฐ ํ ๋นํ๋ฉด ๋ณ๊ฒฝ ๋ถ๊ฐ
์ด๊ธฐํ ์ ์ฉ ์๋ ๊ตฌํ ํ๋กํผํฐ
C# 9.0์ ๋์ ๋ ๊ธฐ๋ฅ์ผ๋ก, ๊ธฐ์กด์๋ ํ๋กํผํฐ๋ฅผ ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ์ ์ธํ๋ ๋ฐฉ๋ฒ์ด ๋ถํธํ์์ต๋๋ค.
์์ฑ์๋ฅผ ํตํด ํ๋๋ฅผ ์ด๊ธฐํํ๊ณ , ๊ทธ ํ๋์ ์ ๊ทผํ๋ ํ๋กํผํฐ๋ get ์ ๊ทผ์๋ง ๊ฐ๋๋ก ํด์ผ ํ์ฃ .
// ๊ธฐ์กด ๋ฐฉ์
class Monster
{
private string name;
private int hp;
private int damage;
public Monster(string name, int hp, int damage)
{
this.name = name;
this.hp = hp;
this.damage = damage;
}
public string Name { get {return name;} }
public int HP { get {return hp;} }
public int Damage { get {return damage;} }
}
์ด๋ฐ ๋ถํธํจ์ ์๋ ๊ตฌํ ํ๋กํผํฐ์ init ์ ๊ทผ์๋ฅผ ์ฌ์ฉํ๋ฉด์ ํด๊ฒฐํ ์ ์์ต๋๋ค. set ์ ๊ทผ์์ฒ๋ผ ์ธ๋ถ์์ ํ๋กํผํฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์์ง๋ง, ๊ฐ์ฒด ์ด๊ธฐํ๋ฅผ ํ ๋๋ง ๊ฐ๋ฅํ๋ค๋ ์ ์ด set ์ ๊ทผ์์์ ์ฐจ์ด์ ์ ๋๋ค.
// ์ด๊ธฐํ ์ ์ฉ ์๋ ๊ตฌํ ํ๋กํผํฐ
class Monster
{
public string Name { get; init; }
public int HP { get; init; }
public int Damage { get; init; }
}
๊ฐ์ฒด ์์ฑ ํ, ํด๋น ํ๋กํผํฐ ๋ด์ฉ์ ์์ ํ๋ ค๊ณ ํ๋ฉด ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค.
Monster monster = new Monster
{
Name = "Slime",
HP = 500,
Damage = 10
};
// monster.HP = 1000; ์ปดํ์ผ ์ค๋ฅ. ์ด๊ธฐํ ํ ์์ ๋ถ๊ฐ
// ์ค๋ฅ ๋ฉ์์ง
"์ด๊น๊ฐ ์ ์ฉ ์์ฑ ๋๋ ์ธ๋ฑ์ "Monster.HP"์(๋)
๊ฐ์ฒด ์ด๋์
๋ผ์ด์ ๋๋ ์ธ์คํด์ค ์์ฑ์๋
'init' ์ ๊ทผ์์ 'this' ๋๋ 'base'์๋ง ํ ๋นํ ์ ์์ต๋๋ค."
4. ์ธํฐํ์ด์ค์ ์ถ์ ํด๋์ค์ ํ๋กํผํฐ
์ธํฐํ์ด์ค ํ๋กํผํฐ
์ธํฐํ์ด์ค์ด๋ฏ๋ก ๊ตฌํ๋ถ๋ ๊ฐ์ง ์๊ณ , ์ธํฐํ์ด์ค๋ฅผ ์์๋ฐ๋ ํด๋์ค์์ ๋ฐ๋์ ํด๋น ํ๋กํผํฐ๋ฅผ ๊ตฌํํด์ผ ํฉ๋๋ค.
interface IMonster
{
string Name // ์๋ ๊ตฌํ ํ๋กํผํฐ์ ๋๊ฐ์ด ์๊ฒผ์ง๋ง ์ปดํ์ผ๋ฌ๊ฐ ์๋์ผ๋ก ๊ตฌํํด์ฃผ์ง ์์
{
get;
set;
}
}
class Monster : IMonster
{
private string name;
public string Name // ์์ ํด๋์ค๋ ๊ธฐ๋ฐ ์ธํฐํ์ด์ค์ ์ ์ธ๋ ๋ชจ๋ ํ๋กํผํฐ๋ฅผ ๊ตฌํํด์ผ ํจ
{
get {return name;}
set {name = value;}
}
}
์ถ์ ํด๋์ค์ ์ถ์ ํ๋กํผํฐ
์ถ์ ํด๋์ค๋ ํด๋์ค์ฒ๋ผ ๊ตฌํ๋ ํ๋กํผํฐ๋ฅผ ๊ฐ์ง ์๋ ์์ง๋ง, ์ธํฐํ์ด์ค์ฒ๋ผ ๊ตฌํ๋์ง ์์ ํ๋กํผํฐ๋ ๊ฐ์ง ์ ์์ต๋๋ค. ์ด๊ฒ์ ์ถ์ ํ๋กํผํฐ(Abstract Property)๋ผ๊ณ ํฉ๋๋ค.
abstract class AbstractMonster
{
public int HP { get; set;} // ์๋ ๊ตฌํ ํ๋กํผํฐ
abstract string Name // ์ถ์ ํ๋กํผํฐ
{
get;
set;
}
}
class Monster : AbstractMonster
{
public override string Name // ์ถ์ ํ๋กํผํฐ ์ฌ์ ์ ๊ฐ์
{
get;
set;
}
}
'๐ฏ๏ธLanguage > C#' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C#] TryParse() VS Parse() (0) | 2022.03.13 |
---|---|
[C#] Null๊ณผ ๊ด๋ จ๋ ์ฐ์ฐ์๋ค(?, [ ]?, ??) (0) | 2022.03.13 |
[C#] ๋ฌธ์์ด ์์ ๋ง์ถ๊ธฐ (string.Format(), ๋ฌธ์์ด ๋ณด๊ฐ) (0) | 2022.03.09 |
[C#] Nullable (0) | 2022.03.09 |
[C#] CLR(Common Language Runtime)๊ณผ ๋ค์ดํฐ๋ธ ์ฝ๋(Native Code) (0) | 2022.03.09 |