항상 연결리스트나 배열을 사용할 때 탐색 함수를 만들고 나서 고민이 생겼다.
int search(LinkedQueueType *q, element data)
{
QueueNode *p;
int count = 1;
for (p = q->front; p != NULL; p = p->link)
{
if (p->data == data)
return count;
count++;
}
}
int main()
{
init(newNode);
enqueue(newNode, 10);print_queue(newNode);
enqueue(newNode, 20);print_queue(newNode);
enqueue(newNode, 30);print_queue(newNode);
printf("찾고 싶은 데이터\n");
scanf("%d", &data);
index = search(newNode, data);
if (index != 1)
printf("찾는 데이터는 %d번째에 있습니다.\n", index);
else
printf("찾는 데이터가 없습니다.\n");
dequeue(newNode); print_queue(newNode);
dequeue(newNode); print_queue(newNode);
dequeue(newNode); print_queue(newNode);
}
void search(LinkedQueueType *q, element data)
{
QueueNode *p;
int count = 1;
for (p = q->front; p != NULL; p = p->link)
{
if (p->data == data)
printf("%d번째에 있습니다.\n", count);
count++;
if (p->link == NULL)
printf("없습니다.\n");
}
}
탐색된 값을 출력하는 것이 탐색 함수의 목적에 따라 달라집니다. 일반적으로는 탐색 함수 내에서 탐색된 값을 반환하는 것이 더 좋은 방법입니다. 이유는 아래와 같습니다:
모듈화
: 탐색 함수 내에서 값을 출력하는 것은 함수의 역할과 책임을 혼란스럽게 만들 수 있습니다. 함수는 보통 한 가지의 기능을 수행하도록 설계되는데, 탐색 함수는 탐색을 수행하는 것이 주요한 기능입니다. 따라서, 탐색된 값을 반환하여 해당 함수가 수행하는 역할을 명확하게 유지하는 것이 모듈화 측면에서 더 좋습니다.
재사용성
: 탐색된 값을 반환하는 것은 해당 값을 활용하는 방법을 사용자가 결정할 수 있게 해줍니다. 예를 들어, 탐색된 값을 바로 출력하는 대신, 다양한 방식으로 활용하고자 할 때 탐색 함수의 반환 값을 활용할 수 있습니다. 이는 코드의 재사용성을 높이는 장점이 있습니다.
유연성
: 탐색된 값을 반환하는 것은 출력 방식을 유연하게 변경할 수 있는 여지를 줍니다. 예를 들어, 현재는 값의 출력이 표준 출력 (stdout)에 이루어진다고 가정했을 때, 나중에 파일에 출력하거나 네트워크를 통해 전송하는 등의 방식으로 출력 방식을 변경하고자 할 때, 반환 값을 활용하여 해당 변경을 수행할 수 있습니다.
따라서, 일반적으로는 탐색 함수에서 탐색된 값을 반환하고, 필요한 경우 main 함수나 다른 함수에서 반환된 값을 활용하여 출력하는 것이 더 좋은 방법이라고 할 수 있습니다. 하지만, 상황에 따라 특정한 요구사항
이 있을 경우, 탐색 함수 내에서 값을 출력하는 것도 허용될 수 있습니다. 개발자의 판단과 상황에 따라 가장 적합한 방법을 선택하는 것이 중요합니다.
특정한 요구사항
이 뭔지 물어봤다.
특정한 요구사항에 따라 탐색 함수 내에서 값을 출력하는 경우는 다음과 같은 경우가 있을 수 있습니다:
특정한 출력 로직이 탐색 함수와 강하게 결합되어야 할 경우
: 만약 탐색된 값을 출력하기 위한 로직이 복잡하거나 특정한 형식에 맞춰 출력되어야 하는 경우, 이를 탐색 함수 외부에서 처리하기보다는 탐색 함수 내에서 직접 출력하는 것이 더 간편하고 효율적일 수 있습니다. 예를 들어, 탐색된 값들을 특정한 형식의 파일에 저장하거나, 네트워크를 통해 특정한 서버로 전송하는 등의 경우가 있습니다.
탐색 함수가 라이브러리 형태로 제공되는 경우
: 만약 탐색 함수가 외부에서 제공되는 라이브러리 형태로 사용되는 경우, 라이브러리 사용자가 탐색된 값을 직접 출력하도록 요구하는 경우가 있을 수 있습니다. 이 경우, 탐색 함수 내에서 값을 출력하는 것이 라이브러리 사용자의 편의를 위해 더 적합할 수 있습니다.
디버깅 및 테스트 목적으로
: 탐색 함수가 디버깅 또는 테스트 목적으로 사용되는 경우, 탐색된 값을 바로 출력하여 디버깅 또는 테스트에 유용한 정보를 확인하고자 할 수 있습니다. 이 경우에도 탐색 함수 내에서 값을 출력하는 것이 편리할 수 있습니다.
이러한 특정한 요구사항이 있는 경우에는 탐색 함수 내에서 값을 출력하는 것이 필요할 수 있습니다. 하지만, 일반적인 경우에는 탐색 함수에서는 값을 반환하고, 필요한 경우 반환된 값을 활용하여 출력하는 것이 모듈화, 재사용성, 유연성 등의 측면에서 더 권장되는 방법입니다.