자바에서 파라미터로 사용하는 변수를 보통 "지역 변수" 라고 한다.
지역 변수의 특징으로는, 해당 지역에서만 유효 하다는 것이다.
예를들어,
함수 내부에서 지역 변수를 할당 및 초기화 하면 내부에서만 사용 되고,
일반적인 "지역 변수" 는 (특히 원시 타입) 함수 종료시 소멸 된다.
스프링 프레임워크를 사용 할 때, MVC 패턴 기준으로 보면,
Controller 에서 View 페이지를 ViewResolver 가 읽을 수 있도록 생성한 메서드가 있다고 해보자.
그러면 이 메서드의 기능은 값을 주고받고, 경로값을 문자열로 보내줄 것이다.
그러면 어? 메서드 (함수) 가 종료됬네 ? 그러면 이 안에서 사용된 "지역 변수" 의 값은 소멸될것이고,
만약에 그 값이 View 에서 사용 되어야 하는 경우에는 model 객체를 사용 해서 데이터를 보내줄 것이다.
이때, 커맨드 객체의 개념을 생각 해보자.
커맨드 객체, 즉, Xxx 타입의 VO 객체는 메서드 호출이 끝나면 사라질까 ?
정답은 사라지지 않고 계속 유효 하다.
왜냐하면 커맨드 객체는 "지역 변수" 가 아니기 때문이다.
당연한 말이다.
커맨드 객체는 컨테이너가 개발자 대신에 new 를 해준 아이들이기 때문 이다.
== IoC == Inversion of Control == 제어의 역행
즉,
이 객체들은 컨테이너 메모리에 저장 (적재, load) 되어 있고,
본래의 주소값이 메모리에 저장 되어 있기 때문에,
함수 호출이 끝나더라도 사라지지 않고,
이런것들을 "참조 변수" 라고 한다.
원래의 집주소가 컨테이너 이다.
그래서 함수가 소멸되도 주소가 사라지진 않으니까, 사용이 가능 하다.
이렇게 참조변수를 사용하는 개념은 OOP == 객체 지향 프로그래밍 에서 특히 좋아하는 기법 이다.
왜냐하면 자바는 반환값을 1개만 보낼 수 있기 때문 이다.
반환값을 1개만 보낼 수 있는데, 2개 이상을 보내고 싶으면 ???
그래서,
반환값을 참조변수 == 객체 에 넣어서 보내기 위해서 "참조 변수" 라는 개념이 발달 하게 되었다.
[ 정 리 ]
커맨드 객체는 컨테이너가 IoC 해준 객체 == 참조변수 라서,
함수 호출이 종료되더라도 View 에서 사용이 가능 하게 된다.
OOP == 객체 지향 프로그래밍 인 Java 에서 특히 좋아하는 기법중에 하나 이다.
[ 참 고 ]
Controller 에서 View 으로 값을 보낼 때,
일반적으로는 model 객체를 사용해서 데이터를 전달 한다.
하지만,
커맨드 객체인 경우에는, 프레임워크가 그 해당하는 객체를 생성 했고,
프레임워크는 그 해당하는 객체의 주소 시작지 이다.
이렇게 주소값을 가리키고 있는 참조변수 이기 때문에,
IoC를 통해 (커맨드 객체) 생성된 객체들은 모두 View 에서 사용이 가능 하다.
다만,
View가 이 데이터들을 사용 하려면, 객체 데이터의 이름을 알아야 한다.
그래서,
이런 경우에 @ModelAttribute("") 어노테이션을 통해서 이름을 지정 하고,
View 에서 해당하는 파라미터명으로 데이터를 사용 할 수 있게 된다.
참고 링크 :
https://hwanii96.tistory.com/326
@ModelAttribute("이름") 어노테이션
그외의 어노테이션 정리 참고 : https://hwanii96.tistory.com/309 스프링 컨테이너 어노테이션 메모 1. com.spring.biz 하위 폴더에, 모든 자료형을 (클래스 파일) 대상으로 객체화를 해주게 하는 코드 이다.
hwanii96.tistory.com