개발일기
RORO(Receive, Object, Return Object) 패턴 본문
RORO(Receive, Object, Return Object) 패턴
함수를 작성할 때 매개변수로 객체를 받고, 처리 후 객체를 반환하는 방식이다. 이 패턴은 매개변수의 순서와 개수를 기억할 필요가 없도록 하여 함수 호출을 더 유연하게 하고, 특히 많은 옵션을 가진 함수에 유용하다.
기본 함수와 RORO 패턴 적용 함수
기본 함수
function createUser(name, age, email) {
return {
name: name,
age: age,
email: email
};
}
const user = createUser('Alice', 25, 'alice@example.com');
console.log(user);
위와 같이 사용한다면 함수는 'name', 'age', 'email' 순서대로 매개변수를 받는다. 하지만 매개변수의 순서를 기억해야 하고, 필요에 따라 순서를 변경하기 어렵다.
RORO 패턴 적용
function createUser({ name, age, email }) {
return {
name: name,
age: age,
email: email
};
}
const user = createUser({ name: 'Alice', age: 25, email: 'alice@example.com' });
console.log(user);
이방식의 장점은 매개변수를객체 형태로 받기 때문에 순서에 신경 쓸 필요가 없다. 그리고 옵션이 추가되거나 일부 옵션이 빠져도 함수 호출 방식에는 큰 변화가 없다.
선택적인 매개변수 처리
function createUser({ name, age, email, isAdmin = false }) {
return {
name: name,
age: age,
email: email,
isAdmin: isAdmin
};
}
const user = createUser({ name: 'Alice', age: 30, email: 'alice@example.com' });
console.log(user);
위와 같은 함수에서는 'isAdmin' 매개변수가 선택 사항이며 기본값이 'false'로 설정된다. 호출시 'isAdmin'의 Argument를 제공하지 않아도 함수가 정상적으로 작동한다.
RORO 패턴의 장점과 단점
장점
1. 가독성 향상 : 매개변수를 객체 형태로 전달하면, 함수 호출 시 어떤 값을 전달하는지 명확히 알 수 있다.
const user = createUser({ name: 'Alice', age: 25, email: 'alice@example.com' });
2. 유연성 증가 : 함수 호출 시 필요한 매개변수만 제공하면 된다. 나머지는 기본값으로 처리할 수 있어 선택적 매개변수를 다루기 쉽다.
function createUser({ name, age, email, isAdmin = false }) {
// function body
}
3. 매개변수 순서 무관 : 매개변수의 순서에 상관없이 객체의 프로퍼티 이름만 일치하면 된다. 순서를 기억할 필요가 없다.
const user = createUser({ email: 'alice@example.com', age: 25, name: 'Alice' });
단점
1. 가독성 저하 : 자주 사용하지 않는 패턴이다 보니 익숙하지 않는 개발자에게는 가독성을 떨어뜨릴 수 있다.
2. 코드 복작도 증가 : 작은 프로젝트나 간단한 함수에서는 객체를 생성하고 전달하는 것이 오히려 불필요 할 수도 있다.
마무리
RORO 패턴은 매개변수가 많거나 선택적인 매개변수가 있는 함수에 유용할 것 같다. 그러나 작은 프로젝트나 복잡도에 따라서 단순하게 기본 함수를 사용하는 것이 더 적합할 수도 있을 것 같다. 팀 프로젝트에서는 합의 후에 사용하면 좋을 것 같지만, 개인 프로젝트에서는 그냥 한번 사용해봐도 좋을 것 같다.
'TIL' 카테고리의 다른 글
NextJs 폰트 적용하기(최적화 하기) (0) | 2024.06.13 |
---|---|
NextJs 간단한 폴더구조 생성 (0) | 2024.04.24 |
NextJs의 useParams와 params (0) | 2024.04.24 |
NextJs 페이지 라우팅 및 동적 라우팅(TodoList 만들기) (0) | 2024.04.20 |
cannot read properties of undefined (reading 'protocol') (0) | 2024.04.15 |