Study/수업 내용 정리

Spring (2/?)

뱅코더 2022. 1. 11. 15:40

 

주요 개념 복습 및 Spring Annotation 정리

 

💥 이전 개념 복습 + 새로운 개념

Controller - 요청에 따라 알맞은 서비스를 호출하고 결과에 따라 응답을 제어하는 역할을 한다.
Interface - 모든 메서드가 추상인 클래스
- 필드는 묵시적으로 public static final
- 메서드는 묵시적으로 public abstract ( + default 메서드도 가능함 )

* Service에서 인터페이스를 사용하는 이유
1. 프로젝트에 규칙성을 부여하기 위해 
( 인터페이스 상속 → 오버라이딩 강제 → 상속 받은 모든 클래스가 동일한 형태 )

2. 유지보수를 쉽게 하기 위해
( Service는 비즈니스 로직을 처리하므로 수정이 잦음.
  인터페이스를 상속 받은 다른 클래스에 수정 코드를 작성한 후,
  부모 인터페이스 = 자식 객체; (업캐스팅) 상태에서 대입되는 객체만 교체 )

3. 클래스 사이의 결합도를 낮추기 위해

4. Spring AOP
→  AOP는 spring-proxy를 이용해 동작하고, spring-proxy 객체는 Service 인터페이스를
    상속받아 동작한다.
Model 객체 데이터를 K:V 형태로 담아서 전달하는 용도의 객체
→ page, request, session, application scope와 사용 방법이 유사함.

 

 

💥 Annotation 정리

@Controller - presentation layer , 웹앱에 전달되는 모든 요청과 응답을 처리하는 역할임을 명시
  + Bean에 등록함.
@Service - Service layer , 비즈니스 로직을 가진 클래스임을 명시
  + Bean에 등록함.
@Repository - Persistance layer , 영속성을 가지는 속성(파일,DB)을 제어하는 클래스임을 명시
  + Bean 등록
@RequestMapping - 요청 주소, 전달 방식에따라 연결되는 클래스 또는 메서드를 지정한다.
→ 클래스 + 메서드에 동시 작성하여 하나의 주소로 해석할 수 있다.

* @RequestMapping 규칙
1. ( ) 안에 작성되는 매개변수가 1개인 경우
→ 매핑할 요청 주소로 해석한다. ( == value )

2. ( ) 안에 작성되는 매개변수가 2개 이상인 경우
→ 각 값을 해석하기 위해 value= , method= 과 같은 key 값을 작성한다.

3. method 키 미작성 시 GET/POST 관계없이 모두 처리한다.

ex)
@RequestMapping("/member/*") 
@RequestMapping(value="login", method=RequestMethod.GET)
@Autowired - Servlet-context.xml 파일의 Component-scan을 통해 Bean으로 등록된 객체 중
  타입이 같거나 상속관계인 객체를 찾아서 자동으로 의존성 주입(DI)를 하는 Annotation
@RequestParam - 메서드 매개변수 앞에 작성하는 Annotation
- @RequestParam( ) 뒤쪽에 작성된 매개변수에 Parameter가 저장된다.

ex) @RequestParam("memberId") String id
→ name 속성이 memberId인 파라미터를 얻어와 id 변수에 저장한다.

* @RequestParam 속성
- value : 전달 받을 input 태그의 name 속성 값 (매개변수 1개일 때 기본 값)
- required : 파라미터 필수 여부(기본값 : true == 필수)
→ required=true 일 때 파라미터가 없으면 : 400 Bad Request(잘못된 요청)
- defaultValue : 전달 받은 파라미터 값이 없을 때 지정할 기본 값

* input 태그의 name 속성 값과, 파라미터를 저장할 매개 변수명이 같으면 생략 가능하다.
@ModelAttribute - 요청 시 전달 받은 파라미터를 객체 형태로 매핑하는 역할을 하는 Annotation
 
* 객체로 매핑하기 위한 조건
1) input 태그 name 속성 값과 객체의 멤버 변수(필드)명이 같아야한다.
2) 객체로 만들어진 클래스에 기본 생성자가 있어야한다. 
 →  스프링이 객체를 자동 생성할 때 사용하기 때문!
3) setter가 작성되어 있어야 한다.

* 메서드 / 매개변수 레벨로 사용이 가능하다.
- @ModelAttribute를 이용해 파라미터가 세팅된 객체를 커맨드 객체라고 한다.

@SessionAttributes - Model 속성 중 { } 안에 작성한 것을 request → session 범위로 변경

 

 

'Study > 수업 내용 정리' 카테고리의 다른 글

Spring 기초1  (0) 2022.01.04
Servlet / JSP [ 1 / ? ] 211208  (0) 2021.12.08
JavaScript - 정규 표현식 기초  (0) 2021.11.09
JavaScript - 함수  (0) 2021.11.09
이사  (0) 2021.11.04