public
: 어떤 클래스에서도 접근 가능.protected
: 해당 클래스 또는 해당 클래스를 상속받는 클래스에서만 접근 가능.private
: 해당 클래스에서만 사용 가능하고 외부에서 접근 불가능.
private:
과 같이 접근 한정자를 붙여준다. 이 때 다른 접근 한정자가 나오기 이전에는 접근 한정자 아래에 있는 모든 변수 및 함수가 같은 접근 한정자로 적용된다.❗private
접근 한정자를 사용할 때, UPROPERTY에 BlueprintReadWrite
나 BlueprintReadonly
등을 사용하여 블루프린트에 노출 시킬 수 없다. (사용하면 빌드 오류 발생)
소스 파일(.cpp)에서 외부 클래스에 접근하기 위해서는 #inlcude
로 해당 클래스를 선언해야 한다.
해당 클래스를 선언하고 나면 해당 클래스를 타입으로 하는 변수(== testActor)
를 선언할 수 있고, 그 클래스의 멤버 변수(== testActor.num2)
에 접근할 수도 있다.
❗ 단, 위와 같이 클래스 변수를 단순하게 선언만 할 경우 초기화가 되지 않아 컴파일 오류가 발생. 이를 정상적으로 처리하기 위해서는 생성자를 통해 초기 값을 지정해주거나, 생성된 클래스 변수를 포인터를 통해 참조하는 방식으로 사용해야 한다.
위를 이용해 월드에 배치되어 있는 오브젝트의 클래스를 포인터
를 사용해 참조하여 사용 가능하다.
1) 헤더 파일에 참조하고자 하는 클래스의 포인터 변수
를 선언한다.
class
키워드를 붙인다. 이는 원래 클래스 변수를 만들기 위해서는 #include를 사용해 해당 클래스를 포함시켜야 하는데, 이를 생략하기 위해 class
키워드를 붙여 표시하는 것이다. (== 클래스 전방 선언
)2) 월드에 배치되어 있는 오브젝트의 Details에서 클래스 변수가 가리킬 클래스 오브젝트를 선택할 수 있다.
3) 포인터 변수가 가리키는 클래스의 멤버 변수들을 참조할 수 있다. (즉, 주소 == 오브젝트
, 주소에 저장된 값 == 클래스
라고 보면 될 듯)
❗ 멤버 변수를 가리키는 방법은 일반 클래스 변수인지, 포인터 변수인지에 따라 나뉜다.
일반 변수
: 변수이름.
멤버변수이름 (클래스 변수의 멤버 변수)
ATestActor testActor;
testActor.num1 = 0;
포인터 변수
: 변수이름->
멤버변수이름 (포인터 변수가 가리키는 클래스의 멤버 변수)
// 헤더파일
class ATestActor* testPointer;
// 소스파일
testPointer->num1 = 0;