210923 toDoList

Updated:

210923 toDoList

210922 toDoList
해야하는 일과 배운 것들 정리

해야하는 일

  • Unity Tutorial: Among Us #1 관련 모르는 점 정리
  • Unity Tutorial: Among Us #2
  • 마인크래프트 조합 시스템 분석 #1

모르는 점

배운점

210922 enum EControlType 변수 선언

  • enum: 열거형 형식
enum [열거형 멤버 이름]
{
    열거형 변수명1,
    열거형 변수명2,
    ...
}
  • 열거형 멤버의 연결된 상수 값은 int 형식이다. 즉, 0부터 시작해서 순서에 따라 1씩 증가한다. (열거형 변수명1 = 숫자, 이 방식으로 값을 명시적으로 표시할 수 있다.)
  • enum을 int로 변환(Casting)하는 법: int (변수명) = (int) 열거형 변수명1
  • 열거형으로 변수 선언했을 때의 장점
    • 코드가 단순해지며, 가독성이 좋아진다.
    • 인스턴스 생성과 상속을 방지하여 상수값의 타입안정성이 보장된다.
    • enum class를 사용해 새로운 상수들의 타입을 정의함으로 정의한 타입이외의 타입을 가진 데이터값을 컴파일시 체크한다.
    • 키워드 enum을 사용하기 때문에 구현의 의도가 열거임을 분명하게 알 수 있다.
  • C# enum
  • Java enum

210922 public static 변수 선언 (정적 변수로서의 선언)

  • static 키워드는 변수나 함수, 클래스에 정적 속성을 부여하는 키워드이다. 즉, 클래스로부터 객체를 생성하지 않고 변수나 함수를 호출할 수 있도록 해주는 것이다.
  • 정적 변수는 클래스로부터 객체를 생성하지 않아도 [클래스명.변수이름]의 형식으로 곧바로 사용할 수 있다.
public class StaticTestClass
{
    public static int score;
}
  • 정적 변수는 일반 멤버 변수와 달리 클래슥가 처음으로 사용되는 때에 한 번만 초기화되기 때문에 동일한 메모리를 사용한다.
public class MainClass
{
    public void Main()
    {
        StaticTestClass.score = 10;
    }
}
  • 다시 말해, 클래스 A에 정적 변수를 선언했다면 클래스 A로부터 객체를 생성한다고 해도 클래스 A의 정적 변수는 포함되지 않는다.
  • 정적 함수도 정적 변수와 마찬가지로 [클래스명.함수이름]의 형식으로 곧바로 사용할 수 있다.
public class StaticTestClass
{
    public static int score;
    
    public int memberInt;
    
    public static void StaticFunction()
    {
        score = 10;	// static 변수는 호출할 수 있다.
        memberInt = 10;	// static 함수 내에서 멤버 변수는 호출할 수 없다.
    }
}
  • 다만, 정적 함수는 객체가 생성되기 이전(즉, public int memberInt; 가 실행되기 이전)에 호출이 가능하기 때문에, 정적 함수 내에서 일반 멤버 변수를 호출할 수 없다.
  • 정적 클래스는 모든 멤버가 정적 변수 혹은 정적 함수로 이루어진 클래스로 객체를 생성할 수 없는 클래스이다.
public static class StaticTestClass
{
    public static int score;
    
    static StaticTestClass()
    {
        score = 10;
    }
    
    public static void StaticFunction()
    {
        score = 20;
    }
}
  • 모든 정적 멤버 변수와 정적 멤버 함수는 [클래스명.변수이름] 혹은 [클래스명.함수이름]으로 호출된다.
  • 정적 클래스는 정적 생성자를 가질 수 있는데 이 정적 생성자는 public, protected, private 등의 액서스 한정자를 사용할 수 없으며, 매개변수 역시 가질 수 없다.
  • 정적 변수와 정적 함수 그리고 정적 클래스

210922 [SerializeField]의 기능

  • public, protected, private 등의 액서스 한정자를 사용할 때, 특별한 제한을 하고자 사용한다.
    특히, [SerializeField]는 인스펙터에서는 public, 즉 접근 가능하지만, 외부 스크립트에서는 private, 접근 불가능하게 막는데 사용한다.
  • public을 사용하면 외부 스크립트, 인스펙터 상에서 조작이 가능하다.
  • private를 사용하면 외부 스크립트, 인스펙터 상에서 조작이 불가능하다.
  • 일반적으로 외부 스크립트에서는 조작이 불가능하게 하고, 인스펙터 상에서 조작이 가해지는 경우 private 변수로 선언하고,
    [SerializeField]를 사용하여 인스펙터 조작이 가능하게 한다.
  • Serialize는 직렬화 과정인데, 직렬화란, 추상적인 데이터를 전송 가능하고 저장 가능한 형태로 바꾸는 것을 의미한다.
    즉, public 데이터만 직렬화되는 유니티에서 Serialize를 선언함으로 private도 직렬화가 되도록 하는 것이다.
  • SerializeField의 개념

210922 GetComponent<>()의 기능

  • 동일한 게임오브젝트가 가지고 있는 특정 다른 컴포넌트에 접근해야 할 경우 사용한다.
  • 이러한 선언은 모든 함수가 처리되기 이전인 Start()함수 또는 Awake()함수, 보통은 Awake()함수에서 선언된다. (초기화)
void Awake()
{
    Transform transform = GetComponent<Transform>();
}
  • 다만, 오브젝트들은 서로 독립적으로 작동하기 때문에, GetComponent만으로는 외부 오브젝트의 컴포넌트를 호출할 수 없다.
    따라서, 스크립트에 따로 변수를 선언하고 해당 변수를 인스펙터 상에서 지시해주는 과정이 필요하다.
  • GetComponent 사용법

210922 Coroutine 사용법

개선점

  • 오늘 할 일을 내일로 미루지 말자.
  • 다만, 할 일을 너무 많이 해두지도 말자. 할 생각보다 때려칠 생각이 먼저 든다.
  • 중요한 것은 양이 아니라 질이다. 많이 하는 것보다 깊게 하는 것이 중요하다.

추가 및 수정

Leave a comment