Menu
Coddy logo textTech

제네릭 비교

Coddy C 여정의 Object Oriented Programming 섹션에 포함된 레슨 — 61개 중 52번째.

C 표준 라이브러리의 qsortbsearch와 같은 제네릭 함수는 요소의 타입을 알지 못해도 요소를 비교할 수 있는 방법이 필요합니다. 그 해결책은 비교 함수입니다. 이는 제네릭 알고리즘이 두 항목을 비교해야 할 때마다 호출하는, 사용자가 직접 작성하는 함수입니다.

비교 함수의 표준 시그니처는 다음과 같습니다:

int compare(const void* a, const void* b);

두 매개변수는 모두 const void*입니다. 제네릭 함수가 정렬하려는 타입을 알지 못하기 때문입니다. 반환 값은 특정 규칙을 따릅니다:

반환 값의미
음수a가 b보다 앞에 옵니다
0a와 b가 같습니다
양수a가 b보다 뒤에 옵니다

비교 함수 내부에서 void* 포인터를 실제 타입으로 형변환(cast)하고 값을 비교합니다. 정수를 비교하는 방법은 다음과 같습니다:

int compare_ints(const void* a, const void* b) {
    int val_a = *(const int*)a;
    int val_b = *(const int*)b;
    return val_a - val_b;
}

뺄셈 트릭은 정수에서 잘 작동합니다: a가 더 작으면 결과는 음수이고, 같으면 0이며, 더 크면 양수입니다. 이제 이 함수를 qsort에 전달하여 정수 배열을 오름차순으로 정렬할 수 있습니다.

challenge icon

챌린지

쉬움

qsort와 같은 제네릭 알고리즘에서 사용하는 표준 비교 함수 규칙에 따라 두 정수를 비교하는 compare_ints 함수를 작성하세요.

함수는 두 값을 비교하고 그들의 순서 관계를 나타내는 결과를 반환해야 합니다.

반환 값 규칙:

  • 첫 번째 정수가 두 번째 정수보다 앞에 오면 (첫 번째 < 두 번째) 음수를 반환합니다.
  • 두 정수가 같으면 0을 반환합니다.
  • 첫 번째 정수가 두 번째 정수보다 뒤에 오면 (첫 번째 > 두 번째) 양수를 반환합니다.

매개변수:

  • a (int): 비교할 첫 번째 정수
  • b (int): 비교할 두 번째 정수

반환값: 순서를 나타내는 정수: a < b이면 음수, a == b이면 0, a > b이면 양수.

힌트: 강의에서 배운 뺄셈 트릭을 사용하면 우아한 한 줄 솔루션을 만들 수 있습니다.

치트 시트

비교 함수는 qsortbsearch와 같은 제네릭 알고리즘이 요소의 타입을 알지 못해도 요소를 비교할 수 있게 해줍니다.

비교 함수의 표준 시그니처는 다음과 같습니다:

int compare(const void* a, const void* b);

제네릭 함수는 정렬되는 타입을 알지 못하기 때문에 매개변수는 const void*입니다.

반환 값 규칙:

반환 값의미
음수a가 b보다 앞에 옴
0a와 b가 같음
양수a가 b보다 뒤에 옴

비교 함수 내부에서 void* 포인터를 실제 타입으로 캐스팅하고 값을 비교합니다:

int compare_ints(const void* a, const void* b) {
    int val_a = *(const int*)a;
    int val_b = *(const int*)b;
    return val_a - val_b;
}

뺄셈 방식은 정수에서 유효합니다: a가 더 작으면 결과는 음수이고, 같으면 0이며, 더 크면 양수입니다.

직접 해보기

int compare_ints(int a, int b) {
    // 여기에 코드를 작성하세요
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

Object Oriented Programming의 모든 레슨