출처
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
김영한 강사님
<input type="text" id="name" name="name" placeholder="이름을 입력하세요">
public class MemberForm {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
https://www.inflearn.com/questions/137265
우선 MemberForm
을 controller단에 저장하셔서 놀랬다. 뭐지.. 위치가 잘 못 된걸까?🤔 라고 생각이 들어서 질문 게시판을 봤는데 역시나 비슷하게 생각 하신 분들이 있었다.
form, DTO 경우 단순히 계층간의 데이터를 전달할 때 사용함으로 역할은 같지만! form
의 경우에는 웹 기술에 종속된 단어 임으로 조금더 명확하게 제약을 두어 컨트롤러 단에 두는 것이라고 하셨다.
여튼 또 궁금했던건
해당 form을 submit하면 @PostMapping
으로 연결된 컨트롤러 단에서 연결이 되고 form에 입력한 정보들은 매개변수에 바인딩이 된다.
이때 name="name"
의 값이 MemberForm의 name
과 연결이 되서 바인딩이 된다. 이 부분이 매우 신기했다. 처음에 스프링 배울 때는 찾아 볼 생각도 못하고 오.. 신기하다.. 라고 생각하고 납득했었는데 스프링은 다 방법이 있었다..(당연함;)
역시 다들 비슷한 궁금증을 가지고 있었다..
파라미터 바인딩 부분이고 setter
를 통해서 값이 넘어가는 것이다.
그래서 신기한게
// name -> names
public class MemberForm {
private String names;
public String getName() {
return names;
}
public void setName(String names) {
this.name = names;
}
}
이렇게 해도 문제 없이 아주 잘 돌아 갈 것이다^-^
아니 근데 또 생각해보니까 이와 관련된 문제를 회사에서 겪은 적이 있었다. 그 때는 뭐야..? 라고 생각했는데 이게 다 setter
때문이었구만.
회사에서 겪은 문제도 이와 비슷하게 변수명이 미묘하게 변경된 것이었는데 갑자기 전달이 잘 되던 값이! 전달이 되지 않기 시작하는 것이었다.
그 때도 변수명만 변경을 하고 setter
와 getter
는 변경이 되지 않아서 오타를 고쳤던 기억이 있는데 그 때는 이걸 고쳐야 된다고..? 라고 하면서 일단 고쳤었는데 이런 이유였던 것으로 판정👍
thymeleaf 이건 안써봐서 신기한데 약간 JSTL같고 익숙하긴 하다...
강의만 들을게 아니고 커뮤니티도 많이 눌러봐야 되겠다! 역시.. 사람들은 똑똑해...✨