Christmas Pikachu DI (Dependency Injection)
개발일지/스프링

DI (Dependency Injection)

ZI_CO 2022. 12. 4.

[ DI : Dependency Injection ]

: (의존성 주입) 방식으로

여러 WAS 들을 하나 가지고 와서 사용한다!!!

무조건 가지고 와서 사용하는 것이다 !!!

사용이유

1. 의존성으로부터 격리시켜 코드 테스트에 용이하다.

2. DI를 통하여, 불가능한 상황을 Mock(모조품 객체)와 같은

기술을 통하여 안정적인 테스트가 가능하다.

3. 코드를 확장하거나 변경할 때 영향을 최소화한다. (추상화)

4. 순환참조 (NullPointException 같은 오류)를 막을 수 있다.

 

 

BASE64
URL Encoding
Base64 문자 하나는 6비트를 나타내는데,
64개의 문자를 0부터 63까지의 숫자로
변환하여 전체 데이터를
하나의 string 으로 바꾸는 인코딩 방식을 말한다.
URL 쿼리 파라미터를 안전하게 전송하기 위한
작업으로 웹 브라우저가 서버로 보내기 전에 URL 을 인코딩 한다.
"www.naver.com/q?오늘축구이기나요?"를 각각의 방식으로 인코딩하면 ▼
d3d3Lm5hdmVyLmNvbS9xP+yYpOuKmOy2leq1rOydtOq4sOuCmD8=
www.naver.com부터 끝까지
모두 64진법으로 변환 후 인코딩
www.naver.com 이후 (쿼리파라미터)를 인코딩

 

 

* IEncoder (인터페이스)

package com.example.springdi;

public interface IEncoder {
	String encode(String msg);
}

 

 

 

 

 

* MyEncoder

전략 패턴 : 하나의 클래스로 다양한 클래스를 연결 시킬 수 있다.

모두가 인터페이스로 가지고 있는 IEncoder을 포함관계로 만들어서,

MyEncoder가 생성시 매개변수로 받아 의존을 주입(DI)한다.

(MyEncoder 생성시 무조건 IEncoder가 필요함=의존주입!!)

package com.example.springdi;

//전략패턴
public class MyEncoder {
	
	private IEncoder iEncoder;
	
	// DI
	// 의존 주입 받는다.
	public MyEncoder(IEncoder iEncoder) {
		this.iEncoder = iEncoder;
	}
	
	// 기능 (인코딩하는 기능)
	public String encode(String msg) {
		return iEncoder.encode(msg);
	}
}

 

 

 

 

 

* MyUrlEncoder

package com.example.springdi;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

public class MyUrlEncoder implements IEncoder{

	@Override
	public String encode(String msg) {
		String result = null;
		try {
			result  = URLEncoder.encode(msg, "UTF-8");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return result;
	}
}

 

 

 

 

* MyBase64Encoder

package com.example.springdi;

import java.util.Base64;

public class MyBase64Encoder implements IEncoder {

	@Override
	public String encode(String msg) {

		//인코드 -> 숫자를 문자로
		//디코드 -> 문자를 숫자로
		
		return Base64.getEncoder().encodeToString(msg.getBytes());
	}
}

 

 

 

 

* SpringDiApplication

package com.example.springdi;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringDiApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringDiApplication.class, args);
		
		MyBase64Encoder base64Encoder = new MyBase64Encoder();
		MyUrlEncoder urlEncoder = new MyUrlEncoder();
		
		String mUrl = "www.naver.com/q?오늘축구이기나요?";
		
		MyEncoder encoder = new MyEncoder(base64Encoder);
		String result1 = encoder.encode(mUrl);
		System.out.println("base64Encoder : "+result1);
		
		MyEncoder myEncoder = new MyEncoder(urlEncoder);
		String result2 = myEncoder.encode(mUrl);
		System.out.println("urlEncoder : "+result2);
	}
}

댓글