[Unreal] 접근 한정자와 포인터

Doorbals·2023년 1월 11일
0

Unreal

목록 보기
9/10

1. 접근 한정자

1) 접근 한정자의 종류

  • 변수나 함수의 접근 권한을 제어하는 기능. 접근 한정자 중에는 주로 쓰이는 3개가 존재한다.
    • public : 어떤 클래스에서도 접근 가능.
    • protected : 해당 클래스 또는 해당 클래스를 상속받는 클래스에서만 접근 가능.
    • private : 해당 클래스에서만 사용 가능하고 외부에서 접근 불가능.

2) 접근 한정자 사용 방법

  • 위와 같이 헤더 파일(.h)에서 선언할 때 위에 private:과 같이 접근 한정자를 붙여준다. 이 때 다른 접근 한정자가 나오기 이전에는 접근 한정자 아래에 있는 모든 변수 및 함수가 같은 접근 한정자로 적용된다.

private 접근 한정자를 사용할 때, UPROPERTY에 BlueprintReadWriteBlueprintReadonly등을 사용하여 블루프린트에 노출 시킬 수 없다. (사용하면 빌드 오류 발생)

3) 외부 클래스 접근

  • 소스 파일(.cpp)에서 외부 클래스에 접근하기 위해서는 #inlcude로 해당 클래스를 선언해야 한다.

  • 해당 클래스를 선언하고 나면 해당 클래스를 타입으로 하는 변수(== testActor)를 선언할 수 있고, 그 클래스의 멤버 변수(== testActor.num2)에 접근할 수도 있다.

❗ 단, 위와 같이 클래스 변수를 단순하게 선언만 할 경우 초기화가 되지 않아 컴파일 오류가 발생. 이를 정상적으로 처리하기 위해서는 생성자를 통해 초기 값을 지정해주거나, 생성된 클래스 변수를 포인터를 통해 참조하는 방식으로 사용해야 한다.

  • 위를 이용해 월드에 배치되어 있는 오브젝트의 클래스를 포인터를 사용해 참조하여 사용 가능하다.

    • 1) 헤더 파일에 참조하고자 하는 클래스의 포인터 변수를 선언한다.

      • 헤더 파일에서 클래스 변수를 만들 때는 자료형 앞에 class 키워드를 붙인다. 이는 원래 클래스 변수를 만들기 위해서는 #include를 사용해 해당 클래스를 포함시켜야 하는데, 이를 생략하기 위해 class 키워드를 붙여 표시하는 것이다. (== 클래스 전방 선언)
    • 2) 월드에 배치되어 있는 오브젝트의 Details에서 클래스 변수가 가리킬 클래스 오브젝트를 선택할 수 있다.

    • 3) 포인터 변수가 가리키는 클래스의 멤버 변수들을 참조할 수 있다. (즉, 주소 == 오브젝트, 주소에 저장된 값 == 클래스 라고 보면 될 듯)

❗ 멤버 변수를 가리키는 방법은 일반 클래스 변수인지, 포인터 변수인지에 따라 나뉜다.

  • 일반 변수 : 변수이름.멤버변수이름 (클래스 변수의 멤버 변수)

    ATestActor testActor;
    testActor.num1 = 0;
  • 포인터 변수 : 변수이름->멤버변수이름 (포인터 변수가 가리키는 클래스의 멤버 변수)

    // 헤더파일
    class ATestActor* testPointer;
    
    // 소스파일
    testPointer->num1 = 0;
profile
게임 클라이언트 개발자 지망생의 TIL

0개의 댓글