Spring ModelMap에서 addAttribute와 put의 차이

liljoon·2023년 12월 21일

일반적으로 addAttribute나 put을 쓰나 기본적인 기능은 동일하게 작동한다.
JSP에 Expression Language에 쓰여진 값에 데이터를 넣어주는 역할이다.

put

  • HashMap의 함수이다. ModelMap 클래스가 LinkedHaspMap을 상속받고, 그것은 HashMa을 상속받는다.
public class ModelMap extends LinkedHashMap<String, Object> {
    ...
public class LinkedHashMap<K,V>
    extends HashMap<K,V>
    implements Map<K,V>
{
...

addAttribute

  • ModelMap 클래스에서 정의한 Method
    구현을 확인해보자.
	public ModelMap addAttribute(String attributeName, @Nullable Object attributeValue) {
		Assert.notNull(attributeName, "Model attribute name must not be null");
		put(attributeName, attributeValue);
		return this;
	}

attributeName이 Null인지 확인하는 함수가 추가되고 결국은 put함수를 동일하게 사용한다.

차이점

attributeName에 null을 직접 넣어서 차이를 테스트해 보았다.
결국 둘 다 에러를 반환하지만, 에러 코드가 조금 달랐다.

  • put
java.lang.IllegalArgumentException: Attribute name must not be null
  • add
java.lang.IllegalArgumentException: Model attribute name must not be null

여기서는 단순히 출력 내용만 다르지만 밑에 에러 메시지를 보면 put은 LinkedHashmap에서 에러를 반환하는 반면
addAttribute는 addAttribute를 호출한 라인에서 에러를 반환한다.
그래서 addAttribute를 사용하면 에러 메시지를 보고 더 빨리 에러 코드를 찾아 고칠 수 있을 것 같다.

그래서 ModelMap에서 구현해놓은 method인 addAttribute를 쓰는게 더 바람직할 것 같다.

  • 주의!
    직접 구현 클래스를 찾고 테스트를 통해 추론해서 쓴 내용이므로 다소 부정확할 수 있습니다!

0개의 댓글