[Spring] @Autowired 옵션 처리 방법 [주입할 스프링 빈이 없어도 동작해야 할 때]
·
▣ Framework/Spring🍃
- 주입할 스프링 빈이 없어도 동작해야 할 때 주입할 스프링 빈이 없어도 동작해야 할 때가 있다. 자동 주입 대상이 없는 상태로 @Autowired만 사용하면 required의 기본값이 true라 오류가 발생한다. - @Autowired 옵션 처리 방법 @Autowired(required=false) : 자동 주입할 대상이 없으면 수정자 메서드 자체가 호출 안됨 @Nullable : 자동 주입할 대상이 없으면 null이 입력됨 Optional : 자동 주입할 대상이 없으면 Optional.empty 가 입력됨 //호출 안됨 @Autowired(required = false) public void setNoBean1(Member member) { System.out.println("setNoBean1 = ..
[Spring] 싱글톤, 무상태(stateless)로 설계하라! [Singleton 패턴 주의사항]
·
▣ Framework/Spring🍃
- 싱글톤, 무상태(stateless)로 설계하라! 객체 인스턴스를 하나만 생성해서 공유하는 싱글톤 방식은 여러 클라이언트가 하나의 같은 객체 인스턴스를 공유하기 때문에 싱글톤 객체는 상태를 유지(stateful)하게 설계하면 안된다. - 잘못된 설계 : 상태가 유지되는 경우 - StateFulService.java public class StateFulService { private int price; // 상태를 유지하는 필드 public void order(String name, int price) { System.out.println("name = " + name + " price = " + price); this.price = price; // 여기가 문제! } public int getPric..
[Spring] Object 타입으로 Bean을 조회하면 어떻게 될까? [스프링 빈 조회 시 상속 관계]
·
▣ Framework/Spring🍃
- Object 타입으로 Bean을 조회하면 어떻게 될까? 스프링에서는 부모 타입으로 빈을 조회하면, 자식 타입도 함께 조회한다. 즉, 모든 자바 객체의 최고 부모인 Object 타입으로 빈을 조회하면 모든 스프링 빈을 조회한다. - ApplicationContextExtendsFindTest.java import hello.core.discount.DiscountPolicy; import hello.core.discount.FixDiscountPolicy; import hello.core.discount.RateDiscountPolicy; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.spri..
[Spring] SOLID란? [객체지향 설계의 5가지 원칙]
·
▣ Framework/Spring🍃
- SOLID란? SOLID는 객체 지향 설계의 다섯 가지 기본 원칙을 나타내는 약어다. 이 다섯 가지 원칙은 소프트웨어의 유지 보수성, 재사용성, 확장성, 테스트 용이성 등을 높이기 위해 고안되었다. 1. SRP(Single Responsibility Principle) : 단일 책임 원칙 클래스는 단 하나의 책임만 가져야 한다는 원칙 각 클래스는 하나의 역할만 수행하고, 변경 사항이 있을 때는 한 가지 이유로만 변경되어야 함 [Spring] SOLID : 객체지향 설계의 5가지 원칙(1) [SRP(Single Responsibility Principle) : 단일 책임 원칙] - SRP(Single Responsibility Principle) : 단일 책임 원칙 단일 책임 원칙은 모든 클래스는 하나..
[SpringBoot] 스프링 부트(Spring Boot) 컨텐츠 동작 원리 [정적 컨텐츠, MVC 템플릿 엔진, @ResponseBody 사용
·
▣ Framework/Spring Boot🍀
- 스프링 부트(Spring Boot) 컨텐츠 동작 원리 1. 정적 페이지 스프링 부트에서는 DB 접근을 하지 않는 '정적 페이지'는 static 폴더 안에 넣으면 된다. - 실행 URL : http://localhost:8080/hello-static.html 2. MVC 템플릿 엔진 MVC: Model, View, Controller (데이터를 담는 Model, 화면을 보여주는 View, Model과 View를 연결시키는 Controller) - 실행 URL : http://localhost:8080/hello-mvc?name=spring - Controller 코드 (MVC 템플릿 엔진) @Controller public class HelloController { @GetMapping("hello-..