인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

Rapture님의 프로필 이미지
Rapture

작성한 질문수

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

회원 웹 기능 - 등록

굳이 컨트롤러에 MemberForm

작성

·

783

22

굳이 컨트롤러에 MemberForm을 만들 이유가 있나요? 그냥 MemberController에서  아래처럼 멤버를 바로 받아올 수는 없는건가요? 만약에 멤버폼을 반드시 이용해야하는 것이라면 MemberForm이라는 클래스는 어떠한 어노테이션도 없이 순수 자바코드인데 어떻게 폼에서 name값을 받아와 setName을 해주는지 궁금합니다.

public String create(Member newMember){
memberService.join(newMember);
return "redirect:/";
}

답변 4

26

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 이환희님^^ 좋은 질문입니다.

1. 컨트롤러에 MemberForm을 만들 이유가 있나요?

-> 사실 컨트롤러에 MemberForm 대신에 Member를 그대로 받아도 기술적인 문제는 없습니다. 다만 지금은 예제이지만, 실무에서는 컨트롤러에 넘어오는 정보가 Member가 필요한 데이터 이상으로 많은 데이터들이 들어옵니다. 예를 들어서 회원 정보 뿐만 아니라 약관 정보도 들어오고, 화면을 처리하기 위한 추가 정보들도 들어옵니다. 또는 Member에 필요한 정보들이 화면이 아니라 데이터베이스에 더 있을 수도 있습니다. 더 여러가지가 있지만, 주로 이런 이유 때문에 MemberForm과 Member를 분리하는 것이 좋습니다^^

2. MemberForm이라는 클래스는 어떠한 어노테이션도 없이 순수 자바코드인데 어떻게 폼에서 name값을 받아와 setName을 해주는지 궁금합니다.

-> 스프링 MVC가 기본으로 지원하는 기능입니다^^ 웹의 파라미터에 name이라는 이름이 있으면 이 이름을 보고 스프링 MVC가 setName을 호출합니다.

도움이 되셨길 바래요.

8

김영한님의 프로필 이미지
김영한
지식공유자

@김동민

정확히는 getter, setter 메서드 이름을 맞추어야 합니다. 이것을 자바빈 프로퍼티 규약이라 합니다.

예를 들어서 name이면 getName(return this.name;), setName(.. this.name = param ) 이라는 메서드를 만들어야합니다.

감사합니다.

1

궁금했던 내용인데 좋은 질문과 답변 감사드립니다!

혹시 input의 name속성과 MemberForm의 private 변수의 이름을 똑같이 지정해줘야 값을 받아올 수 있는 건지 궁금합니다

0

ㄷㅅㅂㄱ

VO, DTO 비즈니스 복잡도에 따라 다르게 사용

커맨드 객체

Rapture님의 프로필 이미지
Rapture

작성한 질문수

질문하기