인프런 커뮤니티 질문&답변

dbwjd7wkd님의 프로필 이미지

작성한 질문수

이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해

2강 캐릭터와 입력 시스템

언제 public을 쓰고 언제 protected를 써야 하나요?

작성

·

21

0

헤더함수에서 public과 protected를 각각 언제 써야하는지 헷갈립니다.

 

예를 들어 2강에서, ABFountain.h에서는 컴포넌트들을 public으로 선언했고 ABCharacterPlayer.h에서는 컴포넌트들을 protected로 선언했는데 차이가 궁금합니다.

 

그리고 항상 BeginPlay는 protected로, Tick은 public으로 선언되어 있는데 이 부분도 왜 그런지 궁금합니다.

답변 2

0

이득우님의 프로필 이미지
이득우
지식공유자

음.. 이건 명확한 답이 없습니다. 은닉을 강조해 public / private만 선호하는 방법론도 있는데, 언리얼 코드는 워낙 크고 계층 구조가 중요하다보니 protected를 많이 사용할 수 밖에 없습니다.
어짜피 저 키워드 자체가 실제로 데이터를 차지하지도 않으니, 본인의 설계 원칙에 따라 자유롭게 사용해주시면 됩니다.

dbwjd7wkd님의 프로필 이미지
dbwjd7wkd
질문자

포트폴리오용으로 프로젝트를 만들면서 계속 애매했는데 저만의 기준을 만들어야겠군요. 답변 감사합니다!

0

안녕하세요, 인프런 AI 인턴입니다. dbwjd7wkd님.

언리얼 엔진에서 클래스 멤버를 public, protected, private로 접근 제어하는 것은 C++의 접근 지정자와 같습니다. 이 접근 지정자는 클래스의 멤버나 메서드가 다른 클래스나 외부에서 어떻게 접근할 수 있는지를 결정합니다. 여기서 주의할 사항 몇 가지를 설명드리겠습니다.

  1. Public: 외부에서도 자유롭게 접근할 수 있습니다. 일반적으로 다른 객체나 시스템에서 접근이 필요한 멤버 변수나 함수가 여기에 들어갑니다. 이는 모듈 간 상호작용이 필요한 경우나 특정 기능을 외부에서 호출해야 하는 경우에 유용합니다.

  2. Protected: 해당 클래스 및 이 클래스를 상속받는 파생 클래스에서만 접근할 수 있습니다. 클래스 내에 고유하게 만들어야 할 기능이지만 자식 클래스에서도 접근하거나 수정해야 하는 경우에 유용합니다.

  3. Private: 해당 클래스 내에서만 접근할 수 있으며, 외부나 파생 클래스에서는 접근할 수 없습니다. 클래스 내부에서만 사용되는 변수를 보호하고 싶을 때 사용합니다.

언제 사용해야 하는가에 대한 예시를 드리자면:
- ABFountain.h에서 컴포넌트를 public으로 선언한 이유는 다른 클래스에서 그 컴포넌트들에 접근해야 했기 때문일 수 있습니다.
- 반면, ABCharacterPlayer.h에서 protected로 선언한 것은 해당 클래스와 그의 파생 클래스 내부에서 사용하고 외부에서는 숨기고 싶은 의도가 있었을 가능성이 큽니다.

또한, BeginPlayTick의 접근 지정자에 대해서도 간단히 설명 드리겠습니다:
- BeginPlay는 주로 클래스의 초기화 작업을 수행하기 때문에 외부에서 호출될 필요가 없습니다. 따라서 protected로 선언하여 외부에서의 접근을 차단합니다.
- Tick의 경우도 언리얼 엔진 내부에서 주기적으로 호출되는 메소드이므로 별도로 public으로 선언할 필요는 없지만, 특별히 엔진의 동작을 위해 protectedpublic으로 선언되어 있는 경우가 있습니다.

이에 대한 더 자세한 설명은 다음 링크의 유사 질문에서 찾아보실 수 있습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

dbwjd7wkd님의 프로필 이미지
dbwjd7wkd
질문자

답변 감사합니다!