작성
·
34
0
헤더함수에서 public과 protected를 각각 언제 써야하는지 헷갈립니다.
예를 들어 2강에서, ABFountain.h에서는 컴포넌트들을 public으로 선언했고 ABCharacterPlayer.h에서는 컴포넌트들을 protected로 선언했는데 차이가 궁금합니다.
그리고 항상 BeginPlay는 protected로, Tick은 public으로 선언되어 있는데 이 부분도 왜 그런지 궁금합니다.
답변 2
0
음.. 이건 명확한 답이 없습니다. 은닉을 강조해 public / private만 선호하는 방법론도 있는데, 언리얼 코드는 워낙 크고 계층 구조가 중요하다보니 protected를 많이 사용할 수 밖에 없습니다.
어짜피 저 키워드 자체가 실제로 데이터를 차지하지도 않으니, 본인의 설계 원칙에 따라 자유롭게 사용해주시면 됩니다.
0
안녕하세요, 인프런 AI 인턴입니다. dbwjd7wkd님.
언리얼 엔진에서 클래스 멤버를 public
, protected
, private
로 접근 제어하는 것은 C++의 접근 지정자와 같습니다. 이 접근 지정자는 클래스의 멤버나 메서드가 다른 클래스나 외부에서 어떻게 접근할 수 있는지를 결정합니다. 여기서 주의할 사항 몇 가지를 설명드리겠습니다.
Public: 외부에서도 자유롭게 접근할 수 있습니다. 일반적으로 다른 객체나 시스템에서 접근이 필요한 멤버 변수나 함수가 여기에 들어갑니다. 이는 모듈 간 상호작용이 필요한 경우나 특정 기능을 외부에서 호출해야 하는 경우에 유용합니다.
Protected: 해당 클래스 및 이 클래스를 상속받는 파생 클래스에서만 접근할 수 있습니다. 클래스 내에 고유하게 만들어야 할 기능이지만 자식 클래스에서도 접근하거나 수정해야 하는 경우에 유용합니다.
Private: 해당 클래스 내에서만 접근할 수 있으며, 외부나 파생 클래스에서는 접근할 수 없습니다. 클래스 내부에서만 사용되는 변수를 보호하고 싶을 때 사용합니다.
언제 사용해야 하는가에 대한 예시를 드리자면:
- ABFountain.h
에서 컴포넌트를 public
으로 선언한 이유는 다른 클래스에서 그 컴포넌트들에 접근해야 했기 때문일 수 있습니다.
- 반면, ABCharacterPlayer.h
에서 protected
로 선언한 것은 해당 클래스와 그의 파생 클래스 내부에서 사용하고 외부에서는 숨기고 싶은 의도가 있었을 가능성이 큽니다.
또한, BeginPlay
와 Tick
의 접근 지정자에 대해서도 간단히 설명 드리겠습니다:
- BeginPlay
는 주로 클래스의 초기화 작업을 수행하기 때문에 외부에서 호출될 필요가 없습니다. 따라서 protected
로 선언하여 외부에서의 접근을 차단합니다.
- Tick
의 경우도 언리얼 엔진 내부에서 주기적으로 호출되는 메소드이므로 별도로 public
으로 선언할 필요는 없지만, 특별히 엔진의 동작을 위해 protected
나 public
으로 선언되어 있는 경우가 있습니다.
이에 대한 더 자세한 설명은 다음 링크의 유사 질문에서 찾아보실 수 있습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
포트폴리오용으로 프로젝트를 만들면서 계속 애매했는데 저만의 기준을 만들어야겠군요. 답변 감사합니다!