key에 이넘으로해줘야한는거아니냐
ㅇㅇ
맞습니다. DTO와 Map은 각각 다른 용도로 사용되는 개념입니다. DTO는 데이터 전송 객체로, 특정 데이터를 구조화하여 전달하는 목적으로 사용됩니다. 보통 DTO는 특정 엔티티나 비즈니스 모델의 데이터를 포함하고 있으며, 해당 데이터의 의미를 더 명확하게 표현할 수 있습니다.
반면에 Map은 키와 값의 쌍으로 데이터를 저장하는 자료구조입니다. Map은 유연성과 다양한 용도로 사용될 수 있지만, 키는 일반적으로 문자열이나 숫자로 사용되며, 데이터의 의미를 명확하게 표현하기 어렵습니다. 또한, Map을 사용할 경우 컴파일 타임에 타입 안정성을 보장받기 어렵고, 잘못된 키를 사용할 수도 있습니다.
따라서, DTO는 데이터 전송의 목적과 데이터의 의미를 명확하게 전달하기 위해 사용되는 반면, Map은 유연성과 동적인 데이터 구조를 필요로 할 때 사용됩니다. 일반적으로 데이터의 구조와 의미를 명확하게 표현하기 위해서는 DTO를 사용하는 것이 더 적합합니다.
map의 key를 enum으로 사용하면 취약점을 극복할 수 있는가
네, Map의 키로 Enum을 사용하는 것은 좋은 방법입니다. Enum은 제한된 값의 집합을 나타내기 위해 사용되는 자료형으로, 컴파일 타임에 타입 안정성을 보장하고 의미를 명확하게 전달할 수 있습니다. Enum을 Map의 키로 사용하면 다음과 같은 이점을 얻을 수 있습니다:
컴파일 타임 타입 체크: Enum을 사용하면 컴파일 타임에 키의 타입이 유효한지 확인할 수 있습니다. 오타나 잘못된 키를 사용하는 실수를 방지할 수 있습니다.
의미 전달: Enum은 제한된 값의 집합을 나타내므로, 키의 의미를 명확하게 전달할 수 있습니다. Enum 상수는 자체적으로 의미를 가지고 있으며, 코드를 이해하고 유지보수하기 쉽게 만듭니다.
Enum의 메서드 활용: Enum은 메서드를 가질 수 있으므로, 특정 Enum 값에 대한 동작을 정의할 수 있습니다. 이를 활용하여 Enum 값에 따라 다른 동작을 수행할 수 있습니다.
따라서, Enum을 Map의 키로 사용하면 타입 안정성을 확보하고 의미를 명확하게 전달할 수 있어, 코드의 가독성과 유지보수성을 향상시킬 수 있습니다.
map으로 쓴다는것은 그거지 머였드라??
기억안난다 아 그거네
이런 취약점은 인터페이스의 상수를 정의한것과 같은느낌인가 그럴거다
넥사크로 플젝들 보면 필드명이 키임
필드명이 키라면 그 필드가 기껏해야 string이나 프리미티브아니겠누?
클래스가 분류되어있어도 해당 상수풀은 동일할 가능성있어서 취약성이있지 그러니 이넘을 써줘야 취약점이 보완되는디
상수를쓴다하더라도 리터럴의 취약점을 막을수없고
이넘쓰기싫으면 필드를 래퍼로 감싸주던가
저기 그정도는 쓰는 사람들이 알아서 잘 하고있지 않겟어요?
이넘 등판할정도면 그먕 클래스만들어서 dto 쓰고 말지
Map과 DTO 비교 케이스에서 상수풀이 동일한게 어떤 이유에서 취약점임?
이펙티브 자바에 이미 다 있는 내용 같은데요. "또한, Map을 사용할 경우 컴파일 타임에 타입 안정성을 보장받기 어렵고, 잘못된 키를 사용할 수도 있습니다"는 제네릭에 대한 얘기 같은데 컴파일 시점에 제네릭 떼버리고 object 타입으로 컴파일하니까 런타임에 터질 수 있다는 얘기 같네요