함수나 메서드를 설계할 때, 매개변수를 어떻게 받을지는 코드의 가독성, 유지보수성, 확장성에 큰 영향을 미칩니다. 이는 특정 라이브러리나 프레임워크를 넘어 모든 프로그래밍 언어와 설계에서 공통적으로 고려해야 할 중요한 요소입니다. 이번 글에서는 매개변수를 직접 받는 방식과 객체로 받는 방식을 비교하며, 각 방식의 장단점과 적합한 상황을 설명합니다.
■ 매개변수를 직접 받는 방식
- 매개변수를 함수의 인자로 하나씩 나열하여 전달하는 방식입니다.
- 호출부와 정의부에서 매개변수의 순서가 정확히 일치해야 하며, 매개변수가 적을 때 가장 간단하고 직관적입니다.
# 코드 예제
function calculateRectangleArea(width: number, height: number): number {
return width * height;
}
// 호출
const area = calculateRectangleArea(10, 5);
장점
- 간결함:
- 매개변수가 적을 경우 가장 간단하고 직관적입니다.
- 명시적 전달:
- 호출 시 전달하는 매개변수가 무엇인지 바로 알 수 있습니다.
단점
- 순서에 민감:
- 호출부와 정의부에서 매개변수의 순서가 정확히 일치해야 하므로 관리가 까다로울 수 있습니다.
- 매개변수 추가 시 호출부 수정 필요:
- 새 매개변수를 추가하면 기존 호출부를 모두 수정해야 합니다.
- 매개변수가 많을 경우 가독성 저하:
- 여러 매개변수를 나열하면 호출부가 길어지고 가독성이 떨어질 수 있습니다.
적합한 상황
- 매개변수가 2~3개 이하로 제한적이고, 순서가 고정적인 경우.
- 간단한 GET 요청
■ 매개변수를 객체로 받는 방식
- 매개변수를 하나의 객체로 묶어서 전달하는 방식입니다.
- 키-값 쌍으로 매개변수를 정의하므로, 호출 시 순서와 무관합니다.
# 코드예제
function calculateRectangleArea(
{ width1, height1, width2, height2 }
: { width1: number; height1: number; width2: number; height2: number;}): number {
return width * height;
}
// 호출
const area = calculateRectangleArea({ width2, height1, height2, width1 });
장점
- 순서에 민감하지 않음:
- 매개변수를 객체로 전달하므로 순서를 고려하지 않아도 됩니다.
- 확장성 높음:
- 새 매개변수를 추가해도 호출부와 정의부의 수정이 최소화됩니다.
- 가독성 향상:
- 매개변수를 명시적으로 표현하여 호출부에서 어떤 값을 전달하는지 쉽게 이해할 수 있습니다.
단점
- 초기 작성이 번거로움:
- 객체 형태로 정의해야 하므로 매개변수가 적을 때는 코드가 더 길어질 수 있습니다.
적합한 상황
- 매개변수가 많거나, 추가될 가능성이 높은 경우.
- 호출부에서 매개변수의 의미를 명시적으로 표현하고 싶을 때.
- 복잡한 POST요청
■ 결론
매개변수 처리 방식은 함수 설계의 중요한 요소로, 코드의 가독성, 유지보수성, 확장성에 큰 영향을 미칩니다.
- 매개변수가 적고, 순서가 고정적이라면 직접 받기 방식이 간결하고 효과적입니다.
- 매개변수가 많거나, 추가될 가능성이 있다면 객체로 받는 방식이 더 적합합니다.
- 매개변수가 하나라면, 가장 간단한 방식으로 작성해 유지보수를 용이하게 만드세요.
이 원칙은 특정 라이브러리나 프레임워크를 넘어, 모든 프로그래밍에서 범용적으로 적용됩니다.
'React' 카테고리의 다른 글
[WebSocket] React로 WebSocket 구현하기(feat.Typescript) (0) | 2025.01.27 |
---|---|
[useMutation] 매개변수 타입 처리: 한 개와 여러 개의 차이점 (0) | 2025.01.17 |
[useMutation] 폴더 구조를 재구성하며 커스텀 훅으로 분리 (0) | 2025.01.10 |
[SEO] SEO와 Metadata 설정(Next.js) (2) | 2024.10.04 |
[Next.js] 클라이언트와 서버 실행 분리해야하는 이유(feat. Zustand) (0) | 2024.09.11 |