🧁 [SPRING] | μ„Ήμ…˜0. κ°œμš” μ†Œκ°œ - μŠ€ν”„λ§ κ°œμš”(IOC, Bean)

0
post-thumbnail
post-custom-banner

πŸ–± 클릭! | 사진 좜처 : 'νˆ¬λ””κ°€'의 2021λ…„ μž‘μ„±λœ κ²Œμ‹œκΈ€ 'λ‹Ήμž₯ μ‹œν‹°νŒ 틀어야할거같은 레트둜 감성 κ΅¬μ• λ‹ˆμ§€'


  1. 😏 제 생각을 적은 λ¬Έμž₯μ΄μ˜ˆμš”

  2. μΈν”„λŸ°μ‚¬μ΄νŠΈμ—μ„œ μΈν”„λŸ°κ°•μ‚¬λ‹˜μ˜ μžλ°” μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬(renew ver.) - μ‹ μž… ν”„λ‘œκ·Έλž˜λ¨Έλ₯Ό μœ„ν•œ κ°•μ’Œ κ°•μ˜μ˜ λ‚΄μš©μ„ μž‘μ„±ν–ˆμ–΄μš”. 사진과 글은 μ „λΆ€ 이 κ°•μ˜μ˜ λ‚΄μš©μ΄μ˜ˆμš”.

  3. 이 κ°•μ˜λŠ” μŠ€ν”„λ§4의 이둠을 μ•„μ£Ό 잘 μ„€λͺ…ν•΄μ£ΌλŠ” κ°•μ˜μž…λ‹ˆλ‹€. 이 κ°•μ˜ 덕뢄에 μŠ€ν”„λ§μ˜ 핡심 κ°œλ… DI , IOCλ₯Ό 이해할 수 있게 λ˜μ—ˆμŠ΅λ‹ˆλ‹€. κ°•λ ₯μΆ”μ²œν•©λ‹ˆλ‹€.

κ°•μ˜ λ°”λ‘œ κ°€κΈ°





πŸ”Ή ν”„λ ˆμž„μ›Œν¬λŠ” λ„€λΉ„κ²Œμ΄μ…˜μ΄λ‹€.

πŸ”Ή μŠ€ν”„λ§μ˜ λͺ¨λ“  κΈ°λŠ₯듀은 λͺ¨λ“ˆν™” λ˜μ–΄μžˆλ‹€.

  • λͺ¨λ“ˆ : μ½”λ“œλ‘œ κ΅¬μ„±λ˜μ–΄ μžˆλŠ” 라이브러리
  • 제곡된 라이브러리λ₯Ό ν”„λ‘œμ νŠΈμ— μ‚½μž…ν•΄μ„œ κΈ°λŠ₯ κ΅¬ν˜„μ„ ν•΄λ‚˜κ°€λ©΄ λœλ‹€.
  • importλŠ” 더 이상 ν•„μš”μ—†λ‹€.

πŸ”Ή μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆ(IoC)와 Bean

  • μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆ(IOC)λŠ” μŠ€ν”„λ§μ—μ„œ 객체λ₯Ό μƒμ„±ν•˜κ³  μ‘°λ¦½ν•˜λŠ” μ»¨ν…Œμ΄λ„ˆλ‘œ, μ»¨ν…Œμ΄λ„ˆλ₯Ό 톡해 μƒμ„±λœ 객체λ₯Ό 빈(Bean)이라고 λΆ€λ₯Έλ‹€.

μ½”λ“œλ₯Ό μ½”λ”©ν•˜κ³  μ»΄νŒŒμΌν•˜λ©΄ 그것이 ν•˜λ‚˜μ˜ ν΄λž˜μŠ€λ‘œλΆ€ν„° ν•„μš”ν•œ 객체가 λ‚˜μ˜¨λ‹€.
κ·Έ κ°μ²΄μ—λŠ” 속성과 κΈ°λŠ₯이 λ“€μ–΄μžˆλ‹€.
그리고 κ·Έ 객체가 은닉화 λ˜μ–΄μ„œ 객체가 μ œκ³΅ν•΄μ£ΌλŠ” 라이브러리 κΈ°λŠ₯듀을 μ™ΈλΆ€μ—μ„œ μ‚¬μš©λ§Œ ν•˜λ©΄ κΈ°λŠ₯듀이 λ§Œλ“€μ–΄μ§ˆ 수 μžˆλ‹€.

μŠ€ν”„λ§λ„ 객체λ₯Ό λ§Œλ“œλŠ”λ° 객체듀이 μžˆλŠ” μƒν™©μ—μ„œ ν•„μš”ν•  λ•Œλ§ˆλ‹€ κ·Έ 객체λ₯Ό, κ·Έ 객체가 가지고 μžˆλŠ” 속성과 κΈ°λŠ₯을 μ‚¬μš©ν•˜λŠ” 것이닀.

μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆλŠ” XMLλ¬Έμ„œλ₯Ό 톡해 λ§Œλ“€μ–΄μ§„ 객체듀을 λ‹΄κ³  μžˆλŠ” 큰 그릇이닀.
μŠ€ν”„λ§μ—μ„œλŠ” 객체λ₯Ό Bean이라고 ν•œλ‹€. (μžλ°”λŠ” Object)

μžλ°”λ¬Έμ„œμ—μ„œλŠ” μŠ€ν”„λ§μ»¨ν…Œμ΄λ„ˆμ— μžˆλŠ” 것을 ν•„μš”ν•  λ•Œλ§ˆλ‹€ κΊΌλ‚΄μ„œ μ‚¬μš©ν•˜λ©΄ λœλ‹€.
μŠ€ν”„λ§μ—μ„œ κ°€μž₯ μ€‘μš”ν•œ 뢀뢄은 μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆλΌκ³  λ³Ό 수 μžˆλ‹€.
μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ— λͺ¨λ“  객체가 있고, κ·Έ 객체 μ•ˆμ—λŠ” λ‚΄κ°€ ν•„μš”ν•œ λͺ¨λ“  κΈ°λŠ₯듀이 λ“€μ–΄μžˆλ‹€. κ·Έ κΈ°λŠ₯듀을 κ°œλ°œμžλŠ” (μžλ°”λ¬Έμ„œμ—μ„œλŠ”) ν•„μš”ν•  λ•Œλ§ˆλ‹€ κΊΌλ‚΄μ„œ κΈ°λŠ₯ κ΅¬ν˜„μ„ ν•˜λ©΄ λœλ‹€.

MainClass.java

public class MainClass {
	public static void main(String[] args) {
    	My calculator calculator;
        
        calculator = new MyCalculator(10, 5, new CalAdd());
        calculator.result();
        
        calculator = new MyCalculator(10, 5, new CalSub());
        calculator.result();
        
        calculator = new MyCalculator(10, 5, new CalMul());
        calculator.result();
        
        calculator = new MyCalculator(10, 5, new CalDiv());
        calculator.result();
    }
}
Calculator.java

public interface Calculator {
	public int sum(int firstNum, int secondNum);
}
MyCalculator.java 
πŸ”ΈπŸ‘† μ»¨ν…Œμ΄λ„ˆ : 또 λ‹€λ₯Έ 객체가 λ“€μ–΄μžˆλ‹€. 

public class MainClass {
  public int fNum, sNum;
  public Calculator calculator;

  public MyCalculator(int fNum, int sNum, Calculator calculator) {
  πŸ”ΈπŸ‘† Calculator calculator : μ™ΈλΆ€μ˜ 객체λ₯Ό μƒμ„±μžμ— 넣어쀬닀.πŸ”Έ
  πŸ”ΈπŸ‘† λ‚΄κ°€ ν•„μš”ν•œ 객체λ₯Ό 외뢀에닀가 λ§Œλ“€μ–΄λ†“κ³  
  κ·Έ μ™ΈλΆ€μ—μ„œ MyCalculator에 μ£Όμž…ν•΄μ£ΌλŠ” 것이닀.πŸ”Έ
  
  	this.fNum = fNum;
    	this.sNum = sNum;
        this.calculator = calculator;
  }
  
  public void result() {
  	int value = calculator.sum(this.fNum, this.sNum);
	πŸ”ΈπŸ‘† κ·Έλž˜μ„œ calculator.sum()이 λ§μ…ˆμ΄ 될 μˆ˜λ„ 있고
    	λΊ„μ…ˆ, κ³±μ…ˆ, λ‚˜λˆ—μ…ˆμ΄ 될 μˆ˜λ„ μžˆλ‹€.πŸ”Έ
    System.out.println("result : " + value);
  }
}

@getter
@setter
CalAdd.java

public class CalAdd implements Calculator {
	@Override
    public int sum(int firstNum, int secondNum) {
    	return firstNum + secondNum;
    }
}
profile
λͺ‡ λ²ˆμ„ λ„˜μ–΄μ Έλ„ μ•žμœΌλ‘œ 계속 λ‚˜μ•„κ°€μž
post-custom-banner

0개의 λŒ“κΈ€