TIL

[TIL] C++ 정렬, 람다 함수, override, TEXT()

think95592 2026. 6. 11. 20:46

1. sort와 람다 함수

문자열 정렬 문제를 풀면서 sort()와 람다 함수를 학습했다.

sort

sort()는 컨테이너의 데이터를 정렬하는 함수이다.

 
sort(strings.begin(), strings.end());
 
  • begin() : 첫 번째 원소
  • end() : 마지막 원소의 다음 위치

기본적으로 오름차순 정렬이 수행된다.


람다 함수

정렬 기준을 직접 정의하기 위해 람다 함수를 사용한다.

 
sort(strings.begin(), strings.end(),
    [](const string& a, const string& b)
    {
        return a < b;
    });
 

람다 함수는 일회성으로 사용하는 익명 함수이다.

별도의 함수를 만들지 않고 바로 정렬 기준을 작성할 수 있다.


캡처(Capture)

람다 내부에서 외부 변수를 사용하기 위해 캡처를 사용한다.

 
[n]
 

의 의미는

외부 변수 n을 람다 내부로 가져와서 사용한다.

자주 사용하는 형태

 
[n]   // n만 복사
[&n]  // n만 참조
[=]   // 모든 외부 변수 복사
[&]   // 모든 외부 변수 참조
 

비교 함수의 의미

 
return true;
 

→ 첫 번째 인자를 앞으로 배치

 
return false;
 

→ 두 번째 인자를 앞으로 배치

예를 들어

 
return a[n] < b[n];
 

n번째 문자가 더 작은 문자열을 앞으로 정렬한다.

는 의미이다.


정리

  • sort()는 정렬 함수
  • 람다는 일회성 함수
  • 캡처를 통해 외부 변수 사용 가능
  • 비교 함수는 "누가 앞에 와야 하는가"를 결정

2. virtual과 override

순수 가상 함수를 상속받아 구현할 때 헤더에는 override를 작성하지만 cpp에는 작성하지 않는 이유를 학습했다.


헤더(.h)

 
class Dog : public Animal
{
public:
    void Sound() override;
};
 

헤더는 함수의 선언부이다.

컴파일러는 여기서

  • 부모 함수가 존재하는지
  • 올바르게 재정의했는지

를 검사한다.


cpp(.cpp)

 
void Dog::Sound()
{
}
 

cpp는 함수의 구현부이다.

이미 헤더에서

 
void Sound() override;
 

검사가 끝났기 때문에 구현부에서는 다시 작성하지 않는다.


virtual과 override 차이

virtual

부모 클래스에서

이 함수는 재정의될 수 있다

는 의미

override

자식 클래스에서

부모 함수를 재정의하고 있다

는 의미


중요한 점

부모 함수가 virtual이면

자식 함수도 자동으로 virtual이다.

그래서 실무에서는

 
void Sound() override;
 

형태를 많이 사용한다.


정리

  • virtual은 부모 클래스에서 사용
  • override는 자식 클래스에서 사용
  • override는 선언부에서만 작성
  • cpp는 구현만 담당
  • 부모가 virtual이면 자식도 자동 virtual

3. TEXT()

언리얼에서 문자열을 사용할 때는 TEXT() 매크로를 사용한다.


예시

 
TEXT("Camera")
 
 
TEXT("SpringArm")
 
 
UE_LOG(LogTemp, Warning, TEXT("Hello"));
 

사용하는 이유

언리얼은 문자열을 TCHAR 기반으로 처리한다.

TEXT()는 일반 문자열을 언리얼 문자열 형식으로 변환해 준다.

예를 들어

 
"Camera"
 

는 일반 C++ 문자열이고,

 
TEXT("Camera")
 

는 언리얼이 사용하는 문자열 형식이다.


CreateDefaultSubobject

컴포넌트 생성 시 이름을 지정할 때도 사용한다.

 
Camera = CreateDefaultSubobject<UCameraComponent>(
    TEXT("Camera")
);
 

이 이름은 에디터의 컴포넌트 창에 표시되는 이름이 된다.


정리

  • 언리얼 문자열은 TEXT() 사용
  • UE_LOG()에서도 사용
  • CreateDefaultSubobject() 이름에도 사용
  • 언리얼에서는 문자열을 작성할 때 TEXT()를 습관적으로 붙이는 것이 좋다.

오늘의 핵심 한 줄

  • sort()는 "누가 앞에 올지" 결정하는 함수이다.
  • 람다는 일회성 함수이며 캡처를 통해 외부 변수를 사용할 수 있다.
  • override는 선언부에서만 사용하며 구현부에서는 사용하지 않는다.
  • 언리얼 문자열은 TEXT()를 사용하는 것이 기본이다.