작성
·
49
답변 1
0
안녕하세요! devdev님! 🙂 좋은 질문 감사드립니다.
결론부터 말씀드리면 문법적으로 문제가 없지만 좋은 코드와는 거리가 멀다고 생각합니다.
예를 들어 Any
를 반환하는 어떤 함수를 하나 만든다고 생각해 보겠습니다.
fun doSomething(vararg params: Any): Any {
// 꽤 긴 함수라면...?
}
만약 이 함수가 50줄, 100줄, 1000줄이 넘는다면 도대체 어떤 값이 반환되는지 파악하기가 무척 어려울거에요! 심지어 이런 Any
를 반환하는 함수를 여러개 조합하고 있는 코드가 있다면, 잘 작성된 코드에 비해 코드를 추적하고 파악하는 시간이 최소 10배 이상 들어가게 됩니다. 결국 SW 공학적인 관점에서 볼 때 유지보수 cost가 높은 좋지 않은 함수라 할 수 있죠.
따라서 Controller에서도 역시 ResponseEntity<T>
를 반환하실 때에는 명확한 리턴 타입을 적어주시는 것을 적극 권장 드립니다. ☺
관련해서 질문이 있으시면 편하게 대댓글 달아 주세요. 감사합니다. 🙇
넵넵! 🙂 Pair는 결국
{
"field1": ?
"field2": ?
}
와 같은 DTO가 되고
Map 역시 결국은 필드가 여러개인 JSON이 되기에 명확한 DTO를 만드시는 편이 좋습니다.
또한 일반적으로는 한 API가 같은 JSON을 반환하게 되지만, 간혹 다형성을 활용한 여러 JSON을 반환해야 하는 경우는 상속 구조를 그대로 사용하실 수도 있습니다. 예를 들어
{
"name": String
}
또는
{
"name": String,
"age": Int
}
를 반환해야 한다고 가정하면
interface XXXDto // sealed class 혹은 abstract class도 좋습니다.
class XXXNameDto(
val name: String
) : XXXDto
class XXXPersonDto(
val name: String,
val age: Int
) : XXXDto
처럼 구성할 수 있습니다. ☺
다만 위의 예시는 생각해보면
{
"name" String,
"age": Int?
}
로 합칠 수 있는 것처럼 다형성이 꼭 필요한 API인지 고민해보는 것도 필요합니다.
답변해주셔서 감사합니다!
추가적으로
ResponseEntity<T>
를 반환할때 pair라던지 map 이 들어갈 경우에는 형식이 고르지 않은 코드는 명확한 dto를 만들어 반환하는게 좋은 코드인가요?