객체 createBoardInput을 왜 한번 더 { } 객체로 감싸서 보내는지 궁금합니다.
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 타입의 인자를 받아 처리하는 것이 가능합니다.
항상 더 나은 코드 구조를 고민하고 작성하는 것은 개발자에게 중요한 일입니다. 질문하신 내용이 잘 해결되셨길 바라며, 다른 궁금한 점이 있으시면 언제든 질문해 주세요.
그래프 ql 문서 사용할때 느낌표 남는거 어떻게 없애나요?
0
82
2
강의 전체 소스 코드를 받고싶습니다.
0
75
2
fontawesome 사용 문의
0
75
2
소스 코드 부탁드립니다~
0
84
2
깃 레포지터리 소스
0
80
2
커리큘럼12.css 정렬 에 나오는 과제 정답알고싶어요
0
71
2
10-01 Entity TypeOrmModule.forRoot 에 entities
0
84
3
강의 버전관련 문의입니다
0
101
2
Ubuntu 설치 관련
0
60
1
schema.gql 질문 드립니다.
0
49
1
서버 재실행시 Many to Many
0
100
3
input 관련 문의
0
89
2
Rest API 보다는 graphql이 주된 내용인데
0
130
2
강의 전체 소스코드 받을수있을까요?
0
154
1
도커볼륨 마운트 관련
0
126
2
findOne 타입스크립트오류
0
107
1
http => htrtps 호출 인증서 신뢰 오류
0
348
1
self-signed certificate in certificate chain 에러 발생
0
409
1
mongoose 설치 오류
0
141
1
특정 API, 특정 IP 허용 (단일경로에 CORS 활성화)
0
280
2
08-06
0
177
3
구조랑 패턴 관련해서 질문
0
123
2
mydocker
0
126
2
coolsms statuscode 2000 인데 전송안돼는 경우 확인.
0
155
1





