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

nurugji님의 프로필 이미지
nurugji

작성한 질문수

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

회원 웹 기능 - 등록

create 함수의 매개변수 MemberForm 객체

작성

·

417

·

수정됨

0

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
여기에 질문 내용을 남겨주세요.

MemberContoller 의 create 함수는 MemberForm 객체를 매개변수로 받는데 MemberForm 객체 이외의 다른 객체를 사용할 수 있는 지 궁금합니다.

  1. MemberForm 클래스는 MemberContorller와 같은 controller에 존재하는가요?

  2. MemberForm 클래스는 name 이외의 다른 프로퍼티가 있더라도 정상 작동하는 것인가요?

  3. MemberForm 클래스에 name 프로퍼티가 존재하지 않는다면 데이터는 MemberFrom에 남지않고 사라지는 것인가요? Addattribute와 비슷하게 MemberForm에 name 프로퍼티가 추가되는 것인가요

  4. create 함수에 들어오는 매개변수를 지정하지 않는 이유는 무엇인가요? 즉, 스프링이 객체도 생성해주고 setter를 통해서 프로퍼티에 값도 넣어줄 때 이전에 이 객체를 사용하겠다라고 명시하는 부분이 없는데 정상 동작하는 이유가 궁금합니다.

답변 1

0

안녕하세요, 인프런 AI 인턴이에요.
MemberContoller의 create 함수는 MemberForm 객체를 매개변수로 받습니다. MemberForm 객체 이외의 다른 객체를 사용할 수 있는지에 대해 궁금해 하신 것 같은데, 일반적으로 스프링에서는 컨트롤러의 매개변수로 요청 데이터를 바인딩하기 위해 해당 객체의 인스턴스를 생성하고 요청 데이터를 이 객체에 매핑합니다. 따라서, create 함수에 MemberForm 객체 이외의 다른 객체를 사용하려면 해당 객체의 클래스를 만들어주고 요청 데이터를 바인딩할 수 있는 필드나 setter를 만들어야 합니다.

MemberForm 클래스는 MemberContorller와 같은 controller에 존재하지 않아도 됩니다. 일반적으로 스프링에서는 요청 데이터를 바인딩하기 위한 객체인 Form 객체를 폼 데이터 바인딩이 될 컨트롤러와 별도로 만들어 사용합니다.

MemberForm 클래스에 name 이외의 다른 프로퍼티가 있더라도 정상 작동합니다. 스프링은 요청 데이터의 필드와 폼 객체의 프로퍼티 이름을 매핑하여 바인딩해주기 때문에, 폼 객체의 다른 프로퍼티에 해당하는 요청 데이터가 있다면 정상적으로 바인딩됩니다.

MemberForm 클래스에 name 프로퍼티가 존재하지 않는다면, 데이터는 MemberForm에 바인딩되지 않고 사라집니다. 스프링은 요청 데이터와 폼 객체의 프로퍼티 이름을 매핑하여 바인딩하기 때문에, 프로퍼티가 존재하지 않는다면 해당 데이터는 바인딩되지 않습니다.

create 함수에 매개변수를 지정하지 않는 이유는, 스프링이 요청 데이터를 바인딩한 객체를 인자로 넘겨줄 때 자동으로 생성 및 설정을 해주기 때문입니다. 스프링은 매개변수에 해당되는 객체의 인스턴스를 생성하고 요청 데이터를 바인딩한 후 인자로 넘겨줍니다.

따라서, 스프링이 객체를 생성하고 바인딩하는 부분에 대한 명시적인 코드는 보이지 않지만, 내부적으로 자동으로 처리하고 있어 정상 동작합니다.

더 자세한 내용은 스프링 프레임워크의 데이터 바인딩과 컨트롤러의 동작 원리에 관련된 내용을 참고하시면 도움이 될 것 같아요. 이외에도 스프링의 어노테이션 기반 컨트롤러의 동작 방식에 대해서도 참고하시면 좋을 것 같아요.
요청한 내용에 대한 답변이 되었는지 확인 부탁드려요.

nurugji님의 프로필 이미지
nurugji

작성한 질문수

질문하기