리턴타입 사용시 any를 사용해도 괜찮은가요?
138
9 asked
코틀린으로 스프링을 개발해 보고 있습니다.
리턴할떄 ResponseEntity<Any> 이런식으로 Any를 사용해도 괜찮을까요?
Answer 1
0
안녕하세요! devdev님! 🙂 좋은 질문 감사드립니다.
결론부터 말씀드리면 문법적으로 문제가 없지만 좋은 코드와는 거리가 멀다고 생각합니다.
예를 들어 Any 를 반환하는 어떤 함수를 하나 만든다고 생각해 보겠습니다.
fun doSomething(vararg params: Any): Any {
// 꽤 긴 함수라면...?
}만약 이 함수가 50줄, 100줄, 1000줄이 넘는다면 도대체 어떤 값이 반환되는지 파악하기가 무척 어려울거에요! 심지어 이런 Any 를 반환하는 함수를 여러개 조합하고 있는 코드가 있다면, 잘 작성된 코드에 비해 코드를 추적하고 파악하는 시간이 최소 10배 이상 들어가게 됩니다. 결국 SW 공학적인 관점에서 볼 때 유지보수 cost가 높은 좋지 않은 함수라 할 수 있죠.
따라서 Controller에서도 역시 ResponseEntity<T> 를 반환하실 때에는 명확한 리턴 타입을 적어주시는 것을 적극 권장 드립니다. ☺
관련해서 질문이 있으시면 편하게 대댓글 달아 주세요. 감사합니다. 🙇
0
답변해주셔서 감사합니다!
추가적으로 ResponseEntity<T>를 반환할때 pair라던지 map 이 들어갈 경우에는 형식이 고르지 않은 코드는 명확한 dto를 만들어 반환하는게 좋은 코드인가요?
1
넵넵! 🙂 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인지 고민해보는 것도 필요합니다.
수업노트
0
52
1
싱글톤과 스프링
0
70
2
get() = 3
0
49
2
강사님
0
74
1
강의 복습하면서 생긴 질문
1
93
1
Kotlin과 Java의 현업에서의 활용
0
121
2
data class와 자바의 Lombok을 이용한 DTO 클래스 차이 질문
0
71
1
코틀린에서 상속 시, 주의점에 대한 질문
1
95
3
내용 이해 질문
0
56
1
자바와 코틀린의 함수형 프로그래밍,
1
91
1
플랫폼 타입 설명 문의
2
73
2
널 아님 단언 관련 질문
0
83
1
강의 중 질문
0
79
2
범위 비교 질문
1
91
2
타입캐스팅 궁금한점 질문드립니다.
1
239
2
코틀린 val 질문
0
166
2
완강 후 Kotlin 이런저런 질문 드려봅니다!
3
408
2
확장함수 스타일 질문
0
138
2
확장 프로퍼티 질문
1
156
1
update 함수를 만든다는게 어떤 의미인지 예시가 궁금합니다!
1
283
1
java class의 NotNull 어노테이션 인식
1
260
1
[16강] 확장함수 관련 질문입니다!
1
130
2
안녕하세요 scope function 에 receiver 가 없는 경우
1
168
1
코틀린 싱글톤 질문
1
218
1

