반응형
제어의 역전 IoC(Inversion Of Control)
1. 스프링에서는 일반적으로 Java 객체를 new로 생성하여 개발자가 관리하는 것이 아닌 Spring Container에게 모두 맡긴다.
2. 개발자에게서 실행의 제어권을 프레임워크로 권한이 넘어갔다라는 의미로 제어의 역전이라고 한다.
3. IoC에 대상은 싱글톤으로 관리된다.
의존 주입 DI(Dependency Injection)
: 필요할 때 Spring Container에서 가져와서 사용한다.
→ Servlet Container 다음에 Spring Container가 존재한다.
: Spring Container에 Bean(ex> controller)객체가 싱글톤 패턴으로 올라간다.
DI 예제 + 전략 패턴
1. 인터페이스 선언 (IEncoder)
2. 구현 클래스 만들기 (Base63Encoder, URLEncoder)
3. 중간 클래스 만들기 (Encoder)
4. 결과 확인 (MainTest)
IEncoder 인터페이스
1 2 3 4 5 6 7 | public interface IEncoder { // URL 인코딩, Base64 인코딩 // 문자형 데이터 (바이너리 타입을 문자열로 변경할 때 Base64) String encode(String message); } | cs |
Base64Encoder.java
1 2 3 4 5 6 7 8 9 | public class Base64Encoder implements IEncoder { @Override public String encode(String message) { String resultEncode = Base64.getEncoder() .encodeToString(message.getBytes()); return resultEncode; } } | cs |
URLEncoder.java
1 2 3 4 5 6 7 | public interface IEncoder { // URL 인코딩, Base64 인코딩 // 문자형 데이터 (바이너리 타입을 문자열로 변경할 때 Base64) String encode(String message); } | cs |
Encoder.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | public class Encoder { // 멤버 변수 선언 private IEncoder iEncoder; // DI 의존 주입 설정 + 전략 패턴 (스트래티지 패턴) public Encoder(IEncoder iEncoder) { this.iEncoder = iEncoder; } // setter 만들기 public void setiEncoder(IEncoder iEncoder) { this.iEncoder = iEncoder; } // 기능 public String encode(String message) { return iEncoder.encode(message); } } | cs |
MainTest.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | public class MainTest1 { public static void main(String[] args) { String url = "www.naver.com/books?id=100"; // IEncoder 생성자 타입 --> 의존 주입 받을 수 있도록 설계 // Base64Encoder는 IEncoder 타입으로 바라볼 수 있음. // URLEncoder는 IEncoder 타입으로 바라볼 수 있음. // 하고 싶은 인코드 클래스를 주입만 하면 그 구현 클래스에 맞게 기능을 처리할 수 있음. Encoder encoder = new Encoder(new URLEncoder()); String result1 = encoder.encode(url); System.out.println("result1 : " + result1); encoder.setiEncoder(new Base64Encoder()); System.out.println(encoder.encode("ㅎㅇ")); encoder.setiEncoder(new URLEncoder()); System.out.println(encoder.encode(url)); } } | cs |
콘솔 화면
반응형
'프로그래밍 > Spring Boot' 카테고리의 다른 글
Spring Boot_어노테이션 (0) | 2023.04.13 |
---|---|
Spring Boot_AOP 관점 지향 프로그래밍 (0) | 2023.04.13 |
Spring Boot_Response와 MIME TYPE에 이해와 ResponseEntity (0) | 2023.04.13 |
Spring Boot_Rest API (GET, POST, PUT, DELETE) 주소 맵핑 (0) | 2023.04.09 |
Spring Boot_도구 설치 및 환경 설정 (0) | 2023.04.09 |