그래프큐엘로 쿼리문과 뮤테이션문을 작성할때 타입을 정의해야합니다.
scaler타입과 필수타입을 명시하는 느낌표(!) 작성과, inerface, union, enum, subscription 등등의 타입선언 방식에대해서 정리하려고합니다.
scaler
scaler 타입이란? 하나의 수치만으로 완전히 표시가 되는 양을 뜻합니다.int, string, booleans, id, float
등등이 있습니다.
느낌표 (!) - 필수 타입 선언
필수 타입을 명시해줍니다.token!
이라고 명시되어있다면 token값은 필수로 들어와야하는 값이라는 뜻입니다.
배열 형태로된 것은 조금 느낌이다릅니다.
[test] // null 가능
[test!] // 매개 값의 배열들이 필수로 들어와야하고,리턴되는 값이 null 허용,
[test]! // 매개 값의 배열들은 필수가 아니지만, 리턴되는 값이 필수여야 한다.
[test!]! // 매개값과 리턴값 모두 필수여야 한다.
interface
interface란? 중복해서 사용해야 하는 필수 타입 정의를 의미한다.
interface는 다음과 같이 작성이 가능합니다.
interface TypeCommon {
_id: ID
name: String
}
그리고 만들어진 인터페이스 타입은 implements
를 이용해 참조하여 사용이 가능합니다.
type Worker implements TypeCommon {
_id: ID
name: String
humanType: String
}
type School implements TypeCommon {
_id: ID
name: String
humanType: String
location: String
}
여기서 중요한점은 implements를 이용해 참조하는 타입은 꼭 그 타입을 명시해줘야 합니다.
위에서 Worker와 School 타입은 TypeCommon이라는 인터페이스를 implements하여 참조해주고있는데요,
TypeCommon의 _id와 name을 명시하지않으면 오류가 발생하기 때문에 _id와 name을 명시해주고 있는 모습입니다.
한마디로.. 사진처럼 요약할 수 있겠네요.
union
타입의 정의가 다를때 사용합니다.
기본적인 사용법은 다음과 같습니다.
BelongTo의 값에는 School 타입이나, Worker 타입이 들어올 수 있다는 뜻입니다.
union BelongTo = School | Worker
union으로 작성한 타입으로 쿼리문을 작성할때는 아래 코드처럼, 자바스크립트의 spread 문법으로 작성하여 사용할 수 있습니다.
아래 코드는 ...on 을통해서 값을 가져오고있는 모습입니다.
query{
belongs {
...on Worker {
name
humanType
}
...on School{
name
humanType
location
}
}
}
즉 union은 형체가 다른 객체 값들이 리턴될 경우 사용하면 편리합니다.
enum
타입에 들어갈 값을 미리 정의해두고 정의한 값들만을 사용하게 하는 타입선언 입니다.
enum Blood{
A
B
O
AB
}
type Human{
humanName: String
blood: Blood
sex: String
}
위의 코드는 enum 속성을 이용하여 Blood 타입의 값들을 명시해두고,
Human의 blood 필드의 속성으로 enum으로 정의한 Blood 타입을 사용해줬습니다.
이렇게 하면, Human.blood의 값은 Blood 타입에 명시한 A,B,O,AB 이 네개의 값중 하나가 아닌 다른 값이들어오게 된다면 에러를 발생시킵니다.
subscription
구독을 통한 실시간 데이터처리를 합니다.
type Subscription{
personAdded: Person
}
'개인 공부 > graphql' 카테고리의 다른 글
cache.modify 와 cache.writeQuery의 차이점과 활용법 (0) | 2024.07.29 |
---|---|
Apollo Client에서 데이터 캐싱 설정 - 전역 캐시 설정 (0) | 2024.07.28 |
Graphql문 효율성 증가 - fragment (0) | 2024.07.28 |
그래프큐엘 사용하는 이유 (0) | 2024.07.25 |