νλ‘νΌν°(Property)
μΈλΆμμ ν΄λμ€ λ³μμ κ°μ ν λΉν λ, μΌλ°μ μΌλ‘ λ€μκ³Ό κ°μ΄ μν κ²μ΄λ€.
- λ³μμ κ°μ΄ νμ μ¬λ°λ₯΄λλ‘ κ°μ νμ¬, ν λΉλ κ°μ νμ€ν νκΈΈ λ°λ κ²½μ°
- λ³μμ κ°μ΄ λ³κ²½λμμ λλ₯Ό κ°μ§νμ¬, μ΄ κ°μ μν₯μ λ°λ λ€λ₯Έ ν¨μλ λμμ μ€ννκΈΈ λ°λ κ²½μ°
ν΄λΉ λ³μλ₯Ό μ΄κ³³μ κ³³μμ κ°μ Έκ° μ¬μ©νλ ν¨μμμλ§λ€ 쑰건λ€μ 보λ κ²μ λλΉμΌ μ μλ€.
νλ‘νΌν°κ° μ΄λ° λΆλΆμ λ¨ λ²μ ν΄κ²°ν΄μ€λ€.
μ°Έκ³ λ‘ νλ‘νΌν°λ Unityμ μΈμ€νν°μμλ 보μ΄μ§ μλλ€.
보μ΄κ² νκΈ° μν΄μ λ€λ₯Έ μΆκ° μ‘°μΉκ° νμνλ€.
1. μ ν΄μ§ λ²μ λ΄μ κ°λ§ ν λΉνκΈ°
- get: μΈλΆμμ ν΄λΉ νλ‘νΌν°μ μ κ·Όνμ¬ μ½μ΄μΌ νλ μν©μμ νΈμΆλλ€.
- set: μΈλΆμμ ν΄λΉ νλ‘νΌν°μ μ κ·Όνμ¬ κ°μ ν λΉν΄μΌ νλ μν©μμ νΈμΆλλ€.
public class Example : MonoBehaviour
{
public float HP // νλ‘νΌν°
{
get
{
return _hp;
}
set
{
if (_hp >= 0f && _hp <= 100f)
{
_hp = value;
}
}
}
private float _hp; // μ€μ λ΄λΆ ν΄λμ€ λ³μ
}
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;
}
}
}
μΈλΆμμλ μ½κΈ° μ μ©μ΄κ³ λ΄λΆμμλ μ‘°κ±΄λΆ κ° ν λΉμ νκ³ μΆμ κ²½μ°μλ λ€μκ³Ό κ°μ΄ μΈ μ μλ€.
public class Example : MonoBehaviour
{
private float _hp;
public float HP
{
get
{
return _hp;
}
private set
{
if (_hp >= 0f && _hp <= 100f)
{
_hp = value;
}
}
}
}
4. μλ ꡬν νλ‘νΌν°
μ‘°κ±΄μ΄ μλ κ²μ΄ μλ λ¨μν λ³μ κ° ν λΉ, λ°νλ§ ν κ²μ΄λΌλ©΄ μλ ꡬν νλ‘νΌν°κ° νΈνλ€. ν΄λμ€ λ΄λΆ λ³μμ ν λΉ, λ°νμ΄ μλ νλ‘νΌν° κ·Έ μ체λ₯Ό μ¬μ©νλ κ²μΌλ‘ 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 }; // λ¨, νλ² κ° ν λΉνλ©΄ λ³κ²½ λΆκ°
6. μ΄κΈ°ν μ μ© μλ ꡬν νλ‘νΌν°
κΈ°μ‘΄μλ νλ‘νΌν°λ₯Ό μ½κΈ° μ μ©μΌλ‘ μ μΈνλ λ°©λ²μ΄ μ‘°κΈ λΆνΈνλ€. μμ±μλ₯Ό ν΅ν΄ νλλ₯Ό μ΄κΈ°ννκ³ κ·Έ νλμ μ κ·Όνλ νλ‘νΌν°λ 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; // μ»΄νμΌ μ€λ₯(μ΄κΈ°ν ν μμ λΆκ°)
7. μΈν°νμ΄μ€μ νλ‘νΌν°
μΈν°νμ΄μ€μ΄λ―λ‘ κ΅¬νλΆλ κ°μ§ μμ§λ§, μΈν°νμ΄μ€λ₯Ό μμλ°λ ν΄λμ€μμλ λ°λμ νλ‘νΌν°λ₯Ό ꡬνν΄μΌ νλ€.
interface IMonster
{
string Name // μλ ꡬν νλ‘νΌν°μ λκ°μ΄ μκ²Όμ§λ§ μ»΄νμΌλ¬κ° μλμΌλ‘ ꡬνν΄μ£Όμ§ μμ
{
get;
set;
}
}
class Monster : IMonster
{
private string name;
public string Name // μμ ν΄λμ€λ κΈ°λ° μΈν°νμ΄μ€μ μ μΈλ λͺ¨λ νλ‘νΌν°λ₯Ό ꡬνν΄μΌ ν¨
{
get {return name; }
set {name = value; }
}
}
8. μΆμ ν΄λμ€μ μΆμ νλ‘νΌν°(Abstract Property)
μΆμ ν΄λμ€λ μΈν°νμ΄μ€μ²λΌ ꡬνλμ§ μμ νλ‘νΌν°μΈ μΆμ νλ‘νΌν°λ₯Ό κ°μ§ μ μλ€.
abstract class AbstractMonster
{
public int HP { get; set; } // μλ ꡬν νλ‘νΌν°
abstract string Name // μΆμ νλ‘νΌν°
{
get;
set;
}
}
class Monster : AbstractMonster
{
public override string Name // μΆμ νλ‘νΌν° μ¬μ μ κ°μ
{
get;
set;
}
}