해결된 질문
작성
·
197
0
boards.resolver.ts 파일에서
createBoard 함수에서 boardsService클래스에 인자를 전달할때
createBoardInput 객체를 보내는데
낱개로 된 writer,title,contents 도 아닌데
왜 굳이 한번 더 {createBoardInput} 객체로 감싸서 보내는지 이해가 잘 되지 않습니다.
@Mutation(() => String)
createBoard(
@Args('createBoardInput') createBoardInput: CreateBoardInput,
): string {
return this.boardsService.create({ createBoardInput });
//**차이점??
return this.boardsService.create(createBoardInput);
}
boards.service.ts 파일에서는
create({ createBoardInput }: IBoardsServiceCreate): string {
//**차이점??
create(createBoardInput: CreateBoardInput): string {
//1.브라우저에서 보내준 데이터 확인하기
console.log(createBoardInput.writer);
console.log(createBoardInput.title);
console.log(createBoardInput.contents);
//2. DB에 접속 후, 데이터를 저장 => 데이터 저장했다고 가정.
//3. DB에 저장된 결과를 브라우저에 응답(response) 주기.
return '게시물 등록에 성공하였습니다.';
}
굳이 IBoardsServiceCreate의 인터페이스를 안만들어도
이미 CreateBoardInput 이라는 Class를 타입으로 적용해서 받으면 되는데
createBoardInput을 왜 한번 더 { } 객체에 감싸서 보내는지 궁금합니다.
답변 2
1
안녕하세요! 빵빵님!
해당 부분에서 굳이 객체로 감싸지 않아도 된답니다!
다만, 굳이 객체로 감싼 이유는 크게 3가지가 있는데요!
============================================================
기존에 배웠던 내용을 복습하기 위함이에요!
현재는 간단한 서비스이지만, 실무 환경에서 일반적으로 여러 input(게시판, 파일, 태그 등)을 묶어서 보내게 되는데, 이 때는 하나의 input이 아니므로 객체로 묶어서 전달하는 것이 좋아요!
따라서, 본 과정에서는 "확장성을 위해서 비록 하나의 input이지만 객체로 감쌌다" 정도로 봐주시면 좋을 것 같아요!
마지막으로, 비록 객체가 아닌 하나의 단일 데이터일지라도, 번거롭지만 객체로 감싸는게 추후 안정성을 위해서 더 유리할 것 같아요!
이유는 id: string을 받는 서비스의 경우, name이 인자로 들어와도 name 역시 동일한 string타입이므로 에러를 캐치하기 어렵기 때문이랍니다!
0
안녕하세요, 인프런 AI 인턴입니다.
빵빵님의 질문에 답변드리겠습니다.
여기서 {createBoardInput}
이 추가적으로 객체로 감싸진 이유는 TypeScript의 Destructuring(구조 분해 할당) 기능 때문입니다. 이러한 방식은 함수에 객체를 전달할 때 그 객체의 특정 프로퍼티만을 추출하여 사용하고자 할 때 사용합니다.
예를 들어, boardsService.create()
함수가 다음과 같이 CreateBoardInput
타입의 데이터와 함께 추가적인 옵션을 받을 수 있는 IBoardsServiceCreate
인터페이스를 사용하는 경우에는 구조 분해 할당을 활용하여 여러 값들을 한번에 전달할 수 있습니다.
create({ createBoardInput, ...otherOptions }: IBoardsServiceCreate): string {
// ... 함수 로직
}
그러나 샘플 코드 상에서 boardsService.create()
함수는 CreateBoardInput
타입만 받도록 설계가 되어 있는 듯 보입니다. 이 경우에는 {createBoardInput}
대신에 createBoardInput
을 직접 전달하는 것이 더 적절할 수 있습니다.
create(createBoardInput: CreateBoardInput): string {
// ... 함수 로직
}
즉, createBoardInput
을 {}
로 한 번 더 감싸지 않고 바로 전달하는 것이 더 간결하고, 현재 코드의 설계에 맞게 사용된 것으로 보입니다.
필요에 따라 꼭 IBoardsServiceCreate 인터페이스를 사용하지 않고도, 직접 CreateBoardInput
타입의 인자를 받아 처리하는 것이 가능합니다.
항상 더 나은 코드 구조를 고민하고 작성하는 것은 개발자에게 중요한 일입니다. 질문하신 내용이 잘 해결되셨길 바라며, 다른 궁금한 점이 있으시면 언제든 질문해 주세요.