Unity Chapter 7-7. C# 프로그래밍 [중급] (2/2) : 프로퍼티
카테고리: Unity Lesson 1
태그: C Sharp Unity Game Engine
인프런에 있는 이제민님의 레트로의 유니티 C# 게임 프로그래밍 에센스 강의를 듣고 정리한 필기입니다. 😀
🌜 [레트로의 유니티 C# 게임 프로그래밍 에센스] 강의 들으러 가기!
Chapter 7. C# 프로그래밍: 중급 (2/2)
🔔 프로퍼티
함수처럼 동작하지만 실은
변수
이다. 바깥에서 보면 변수지만 안에 특수한 처리를 끼워넣을 수 있다.
변수에 특수한 처리를 아무 것도 하지 않은 경우
- 📜PointManager.cs
- 점수를 관리하는 매니저 스크립트.
- 멤버 변수인 point(점수) 점수가 아래와 같은 조건을 만족하도록 어떤 함수 처리를 해주어야 한다.
- 점수가 음수이면 안된다.
- 점수가 너무 큰 수여도 안된다.
📜PointManager.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PointManager : MonoBehaviour
{
public int point = 0;
}
📜Test.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test : MonoBehaviour
{
public PointManager pointManager;
void Start()
{
pointManager.point = -100;
pointManager.point = 99999;
}
}
public
한 변수일 경우 point 값이 이렇게 올바르지 못한 값(음수, 너무 큰 수)으로 덮어 씌워질 우려가 있다.
private
과 함수를 사용한 처리
함수`를 사용하여 변수에 어떤 특수한 조건 처리를 해줄 수 있다.
📜PointManager.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PointManager : MonoBehaviour
{
private int point = 0;
public void SetPoint(int newPoint)
{
if(newPoint < 0)
{
point = 0;
}
else if (newPoint > 10000)
{
point = 10000;
}
else
{
point = newPoint;
}
}
public int GetPoint()
{
Debug.Log(point);
return point;
}
}
- point를
private
으로 바꿔준 후 함수로 조건을 처리한다. - 함수
- SetPoint
- 음수인 점수는 0으로
- 10000을 넘는 점수는 10000으로
- 음수도 10000도 아닌 점수는 인수로 들어온 값으로 바꿔준다.
- GetPoint
- 점수를 출력 후 리턴
- SetPoint
- 이렇게
함수
를 사용하여 point 변수에 어떤 특수한 조건 처리를 해줄 수 있다.
📜Test.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test : MonoBehaviour
{
public PointManager pointManager;
void Start()
{
pointManager.SetPoint(99999); // 함수 호출
int myPoint = pointManager.GetPoint(); // 함수 호출
Debug.Log("현재 점수: " + myPoint);
}
}
- 위와 같이 99999를 인수로 넘겨도 함수의 처리를 통하여 10000으로 대입된다.
프로퍼티를 사용하여 처리한 경우
함수
는 코드가 길어지고 복잡하다.- 그러나
프로퍼티
는 간결하다.- 바깥에서는 변수처럼 사용하는데
- 내부에서는 함수처럼 동작하여 겉으로 보기에 간결하다.
📜PointManager.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PointManager : MonoBehaviour
{
public int point
{
get // int a = point; 내부적으로 get이 발동 됨
{
return m_point;
}
set // point = 100; 내부적으로 set이 발동 됨
{
if(value < 0)
{
m_point = 0;
}
else
{
m_point = value;
}
}
}
public int m_point = 0;
}
프로퍼티는
get
과set
으로 동작한다.
- point를
public
으로 다시 바꿔주고프로퍼티
를 적용해보자. - point 는
프로퍼티
를 적용한 변수get
- Debug.Log(
point
) 처럼 point를 리턴 받을 때 실행된다. - 예를들어 a =
point
이렇게 a 라는 변수에 point 값을 대입할 때 point가 리턴되는데 - 이때, 겉으론 단순 변수끼리의 대입처럼 보이더라도 내부적으로 point의
get
이 실행된다.
- Debug.Log(
set
- point 값을 초기화 하거나 변경할 때 실행된다.
- 예를들어
point
= 100 이렇게 point 변수에 100의 값을 대입할 때 - 이때, 겉으론 단순 변수끼리의 대입처럼 보이더라도 내부적으로 point의
set
이 실행된다.
- m_point 는 멤버 변수
📜Test.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test : MonoBehaviour
{
public PointManager pointManager;
void Start()
{
pointManager.point = -100;
Debug.Log("현재 점수 " + pointManager.point);
}
}
- pointManager.point = -100;
- point 값을 바꿔 준다.
- 겉으론 단순 변수끼리의 대입처럼 보이더라도 내부적으로 point의
set
이 실행된다. set
의 처리로, 음수 -100 값을 넣어지만 0으로 대입된다.
- Debug.Log(“현재 점수 “ + pointManager.point);
- point 를 리턴한다.
- 겉으론 단순 변수끼리의 대입처럼 보이더라도 내부적으로 point의
get
이 실행된다. get
의 처리로, point를 출력하고 리턴한다.
get, set 중 하나만 사용할 경우
- 프로퍼티 변수가 public이더라도
get
만 사용할 경우- 리턴만 받을 수 있고 값을 바꿀 수는 없다.
set
만 사용할 경우- 값만 바꿀 수 있고 리턴 받을 수는 없다.
📜MonsterManager.cs
모든 몬스터 오브젝트의 개수 count 를 알려주는 역할을 하는 매니지먼트.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MonsterManager : MonoBehaviour
{
public int count
{
get
{
Monster[] monsters = FindObjectOfType<Monster>();
return monsters.Length;
}
}
}
get
- 몬스터 오브젝트들을 리스트로 가져오고
- 그 리스트의 길이를 리턴하면 바로 몬스터 오브젝트의 개수가 된다.
- 실시간으로 몬스터의 개수를 알려준다.
- 프로퍼티
count
는 현재get
만 사용하고 있다.
📜Test.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test : MonoBehaviour
{
public MonsterManager monsterManager;
void Start()
{
Debug.Log(monsterManager.count);
// monsterManager.count = 2; ⚡ 에러!
}
}
- Debug.Log(monsterManager.count);
- count 변수가 리턴되면서 몬스터의 개수를 출력한다.
- public임에도 불구하고
set
은 설정되어 있지 않기 때문에 count 의 값을 바꾸려 하면 에러가 난다.
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글 남기기