티스토리 뷰
처음 DB연동하면서 배울 때 "DTO는 Data Trasfer Object라고 계층간 데이터 전달을 위해 사용한다"라고 해서 DTO를 써서 프로젝트를 진행했었다. DTO를 사용하면서 무엇이 저장되는지 알기 쉬웠던 경험이 있는데 이번에 Map을 다시 공부하다가 dto도 데이터 담고 map도 데이터담고 그러면 뭘 써야 더 효율적일까? 라는 궁금증이 들었다.
1. 컴파일 에러가 안나타난다.
Map은 기본적으로 Map <string, object> 타입이다.
보통 Map은 key-value 쌍으로 저장되는데 value값은 Object 타입이다. Object 클래스는 최상위 클래스기 때문에 모든 타입을 저장할 수 있다.
따로 타입을 확인 하지 않으면 모든 타입이 다 저장되기때문에 런타임때 ClassNotFoundException 에러를 마주친다.
❗Object 타입이기에 저장은 출력에 문제없다. 다만 int를 사용해야 하는데 String이 저장되면 오류발생
❗ DTO를 사용할 경우엔 이미 DTO에 타입을 지정해 둔 상태여서 지정된 타입이 아니라면 컴파일 에러를 표시해준다.
2. 타입 안정성이 부족 + 형변환이 필요하다.
Map은 get()를 사용해서 해당 key값의 value를 가져올 수 있다. String텍스트를 사용하기 때문에 오타가 난다면 key값이 달라지기 때문에 value를 가져올 수 없는 문제가 발생한다. 그리고 Map을 쓸때는 형변환을 해주어야한다.
최상위 클래스인 object를 사용하기 때문에 Map에서 꺼내쓸땐 변환을 필수적으로 해줘야 한다.
❗ String이라는 key값이 오타가나서 Striing이라고 적히면 String의 value를 알수 없다
형변환 필수 + Map은 key 값이 중복되지 않아 같은 key값에 value를 넣으면 중복되는 경우도 발생한다.
❗DTO는 변수명을 가져오거나 변수명.getElement(); 를 통해 해당 값을 가져올 수 있다.
3. Map<String,Object> 가독성이 떨어진다.
Map으로 데이터를 넘기다보면 타입을 알아보기가 힘든 경우가 발생한다. 그래서 앞 뒤 코드들을 보며 리턴되는 값들을 확인해야한다. 그리고 Map 안에 Map을 넣어서 쓴 코드를 본적 있는데 코드 읽기 힘든 기억이 있다. 그에 반면에 DTO는 이미 요소의 타입등을 쉽게 알아보기 쉬워서 유지보수에도 좋지만 미리 dto설정을 해줘야 하는 번거로움이 있다.
결론적으로 말하면 Map보다는 Dto를 사용하는 것이 데이터유연성이나 가독성을 고려하면 더 좋다.
그래도 상황에 따라서 map과 dto를 적절하게 사용한다가 맞는말 같다. dto 같은 경우도 장점만 있는건 아니니까
출처
'Java' 카테고리의 다른 글
[collection] List, Set, Map (0) | 2023.11.02 |
---|---|
[JAVA]EOF (0) | 2023.09.04 |
Obsolete Methods on the Stack (0) | 2023.06.30 |
string 문자열 char 문자로 변환시키기 (0) | 2023.06.30 |
문자열 비교 (0) | 2023.06.25 |