본문 바로가기
스프링부트

[스프링부트] ioc 제어의역전, @RestController

by CodeMango 2023. 3. 26.

ioC 제어의역전

 

IOC (Inversion of Control) 또는 제어의 역전은 스프링 프레임워크에서 매우 중요한 개념입니다. 스프링 프레임워크는 IOC 패턴을 기반으로 구현되어 있으며, 스프링의 핵심 기능 중 하나는 DI (Dependency Injection)라는 기술을 사용하여 객체 간의 의존성을 자동으로 처리하는 것입니다.

스프링 프레임워크에서는 일반적으로 개발자가 객체를 생성하고 관리하는 방식과 달리, 스프링 컨테이너라는 것이 객체의 생성과 관리를 담당합니다. 개발자는 필요한 객체를 정의하고 컨테이너에 등록하면, 컨테이너는 이 객체를 생성하고 관리합니다.

이를 통해 객체 간의 결합도가 낮아지고 유연성이 높아집니다. 예를 들어, A 객체가 B 객체에 의존하는 경우, 개발자는 일반적으로 B 객체를 생성하여 A 객체에게 전달해야 합니다. 하지만 스프링에서는 A 객체가 B 객체에 대한 의존성을 선언하고, 컨테이너가 B 객체를 생성하여 A 객체에게 주입합니다. 이를 DI라고 합니다.

스프링 부트는 스프링 프레임워크의 기능을 보다 쉽게 사용할 수 있도록 만든 것으로, 스프링 부트 애플리케이션은 기본적으로 스프링 컨테이너를 내장하고 있습니다. 스프링 부트에서는 애플리케이션을 구성하는 여러 요소를 자동으로 구성하고, 스프링의 DI 기능을 사용하여 필요한 객체 간의 의존성을 처리합니다. 이를 통해 개발자는 보다 적은 노력으로 안정적이고 유연한 애플리케이션을 구성할 수 있습니다.

 

다시 말해서, 지역변수를 전역변수처럼 사용하려고 할 때, 매번 new를 붙여서 생성해주지 않아도 됩니다.

@Controller를 붙이면 스프링이 com.cos.blog 패키지 이하를 스캔해서 new를 해주는 것입니다.

이때, 모든 파일을 메모리에 new하는 것은 아니고 특정 어노테이션이 붙어있는 클래스 파일들을

new해서 (ioC) 스프링 컨테이너에 관리해줍니다.

 

 

실습)

 

 

인터넷 브라우저 요청은 get요청밖에 할 수 없습니다.

따라서 post요청은 포스트맨을 깔아서 볼 수 있습니다.

 

또한, 변수에 다이렉트로 접근해서 수정할 수는 없습니다.

따라서 변수는 private으로 만들고 함수는 public으로 만들어서 해당 클래스가 아닌 다른 곳에서 접근하려고 하면

함수를 통해서 접근하게 해야 합니다.

dto에서 함수는 private, getter/setter는 public으로 만드는 이유입니다.

-> getId함수를 통해서 id에 접근할 수 있습니다.

 

@RestController가 하는일

사용자로부터 데이터 요청을(Request) 받아 처리하고 다시 응답(response)하기!!

@RestController가 적용된 클래스에서 @GetMapping, @PostMapping, @PutMapping, @DeleteMapping 

등의 어노테이션이 적용된 메소드는 클라이언트로부터 HTTP 요청(Request)을 받아 처리하고, 

HTTP 응답(Response)을 반환합니다. 

예를 들어, @GetMapping이 적용된 메소드는 HTTP GET 요청을 처리하고,

@PostMapping이 적용된 메소드는 HTTP POST 요청을 처리합니다.

 

요청을 받는 방법은RequestParam 로 받거나, dto로 받는 방법이 있다.

 

@RequestParam 으로 받기

@GetMapping("/htt/get")
public String getTest(@RequestParam int id, RequestParam String username)
return "get요청:" +id+ "."+username;

dto로 받기

@GetMapping("/htt/get")
public String getTest(MemberDto m)
return "get요청:" +m.getId()+ "."+m.getUsername();

 

댓글