๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“š์ฝ์€ ์ฑ… ์ •๋ฆฌ/์ž๋ฐ” ๊ฐ์ฒด์ง€ํ–ฅ ์›๋ฆฌ์™€ ์ดํ•ด

[์Šคํ”„๋ง ์ž…๋ฌธ์„ ์œ„ํ•œ ์ž๋ฐ” ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ์›๋ฆฌ์™€ ์ดํ•ด] 5์žฅ : ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„ 5์›์น™

๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„ 5์›์น™

  • ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ๊ฐœ๋…๊ณผ 4๋Œ€ ํŠน์„ฑ
    • ์ข‹์€ ๋„๊ตฌ์„ ์•Œ๊ฒŒ๋จ.
    • ์ข‹์€ ๋„๊ตฌ๊ฐ€ ์žˆ์–ด๋„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„์•ผ ์ข‹์€ ์š”๋ฆฌ๊ฐ€ ๋‚˜์˜ด.
  • ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„ (Object Oriented Design) 5์›์น™
    • SOLID (๊ฐ์ฒด ์ง€ํ–ฅ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•)
      • SRP (Single Responsibility Principle) : ๋‹จ์ผ ์ฑ…์ž„ ์›์น™
      • OCP (Open Closed Princinple) : ๊ฐœ๋ฐฉ ํ์‡„ ์›์น™
      • LSP (Liskov Substitution Principle) : ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™
      • ISP (Interface Segregation Principle) : ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™
      • DIP (Dependency Inversion Principle) : ์˜์กด ์—ญ์ „ ์›์น™

์‘์ง‘๋„๋Š” ๋†’์ด๊ณ  ๊ฒฐํ•ฉ๋„๋Š” ๋‚ฎ์ถ”๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ์›์น™์„ ์ง€ํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•๋“ค.

-> ๊ฒฐํ•ฉ๋„๊ฐ€ ๋‚ฎ์œผ๋ฉด ๋ชจ๋“ˆ ๊ฐ„์˜ ์ƒํ˜ธ ์˜์กด์„ฑ์ด ์ค„์–ด๋“ค์–ด ๊ฐ์ฒด์˜ ์žฌ์‚ฌ์šฉ์ด๋‚˜ ์ˆ˜์ •, ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•จ.

-> ์‘์ง‘๋„๊ฐ€ ๋†’์€ ๋ชจ๋“ˆ์€ ํ•˜๋‚˜์˜ ์ฑ…์ž„์— ์ง‘์ค‘ํ•˜๊ณ  ๋…๋ฆฝ์„ฑ์ด ๋†’์•„์ ธ ์žฌ์‚ฌ์šฉ์ด๋‚˜ ๊ธฐ๋Šฅ์˜ ์ˆ˜์ •, ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•จ.

 

SOLID๋ฅผ ๋…น์—ฌ๋‚ธ ์†Œํ”„ํŠธ์›จ์–ด

SOLID๋Š” ์†Œํ”„ํŠธ์›จ์–ด์— ๋…น์—ฌ๋‚ด์•ผํ•˜๋Š” ๊ฐœ๋….
  • SOLID๋ฅผ ์ž˜ ๋…น์—ฌ๋‚ธ ์†Œํ”„ํŠธ์›จ์–ด๋Š” ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ  ๋ฆฌํŒฉํ„ฐ๋ง๊ณผ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฝ๋‹ค. 
  • SOLID๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ 4๋Œ€ ํŠน์„ฑ์„ ๋ฐœํŒ์œผ๋กœ ์‚ผ๊ณ  ๋””์ž์ธ ํŒจํ„ด์˜ ๋ผˆ๋Œ€์ด๋ฉฐ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ทผ๊ฐ„์ด๋‹ค.

SRP - ๋‹จ์ผ ์ฑ…์ž„ ์›์น™

"์–ด๋–ค ํด๋ž˜์Šค๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋Š” ์ด์œ ๋Š” ์˜ค์ง ํ•˜๋‚˜๋ฟ์ด์—ฌ์•ผ ํ•œ๋‹ค" - ๋กœ๋ฒ„ํŠธ C. ๋งˆํ‹ด

๋‚จ์ž๋Š” ๋„ˆ๋ฌด ๋งŽ์€ ์—ญํ• ๊ณผ ์ฑ…์ž„์„ ๊ฐ€์ง„๋‹ค

๊ฐ์ฒด ์ง€ํ–ฅ ์„ธ๊ณ„์—์„œ๋Š” ์ด๋Ÿฐ ๊ฒฝ์šฐ "๋‚˜์œ ๋ƒ„์ƒˆ"๊ฐ€ ๋‚œ๋‹ค๊ณ  ํ•œ๋‹ค.

๋‚จ์ž๋Š” ๋„ˆ๋ฌด ๋งŽ์€ ์—ญํ• (์ฑ…์ž„)์„ ๊ฐ€์ง„๋‹ค

๋‚จ์ž์˜ ์ฑ…์ž„์„ ๋ถ„๋ฆฌํ•ด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์ž.

๋‚จ์ž์—๊ฒŒ ๋‹จ์ผ ์ฑ…์ž„ ์›์น™ ์ ์šฉ

๋‚จ์ž๋ผ๋Š” ํด๋ž˜์Šค๊ฐ€ ์—ญํ• ๊ณผ ์ฑ…์ž„์— ๋”ฐ๋ผ ๋„ค ๊ฐœ์˜ ํด๋ž˜์Šค๋กœ ์ชผ๊ฐœ์กŒ๋‹ค. ํด๋ž˜์Šค๋ช… ๋˜ํ•œ ์—ญํ• ๊ณผ ์ผ์น˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋‹ค.

  • ๋‚จ์ž ์นœ๊ตฌ๋Š” ์—ฌ์ž ์นœ๊ตฌ์™€ ์ด๋ณ„ํ•˜๋”๋ผ๋„ ๋‹ค๋ฅธ ๊ณณ์—๋Š” ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค.
  • ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์€ "์†์„ฑ, ๋ฉ”์„œ๋“œ, ํŒจํ‚ค์ง€, ๋ชจ๋“ˆ, ์ปดํฌ๋„ŒํŠธ, ํ”„๋ ˆ์ž„์›Œํฌ" ๋“ฑ์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์†์„ฑ์˜ SRP ์œ„๋ฐฐ

  • ๋ฌธ์ œ ์ฝ”๋“œ
public class ์‚ฌ๋žŒ {
	String ๊ตฐ๋ฒˆ;

	public static void main(String[] args) {
		์‚ฌ๋žŒ ๋กœ๋ฏธ์˜ค = new ์‚ฌ๋žŒ();
		์‚ฌ๋žŒ ์ค„๋ฆฌ์—ฃ = new ์‚ฌ๋žŒ();

		์ค„๋ฆฌ์—ฃ.๊ตฐ๋ฒˆ = "11-730411994";
	}
}

 

์ค„๋ฆฌ์—ฃ์€ ์—ฌ์ž์ด๋ฏ€๋กœ '๊ตฐ๋ฒˆ'์„ ๊ฐ€์งˆ ์ˆ˜ ์—†๋‹ค. ํ•˜์ง€๋งŒ ์ค„๋ฆฌ์—ฃ์€ ๊ตฐ๋ฒˆ ์†์„ฑ์— ๊ฐ’์„ ํ• ๋‹นํ•˜๊ฑฐ๋‚˜ ์ฝ์–ด์˜ฌ ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ์ด๋‹ค.

๋”ฐ๋ผ์„œ ์ด ์ฝ”๋“œ๋Š” ํ˜„์žฌ ๋ƒ„์ƒˆ๊ฐ€ ๋‚˜๊ณ  ์žˆ๋‹ค...

 

**๊ฐ€์งˆ ์ˆ˜ ์—†๋Š” ์†์„ฑ ๊ฐœ์„ **

์ด๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„  ๋‚จ์ž ํด๋ž˜์Šค๋งŒ ๊ตฐ๋ฒˆ์„ ๊ฐ–๊ฒŒ ํ•˜๋ฉด๋œ๋‹ค. ์—ฌ์ž์™€ ๋‚จ์ž์˜ ๊ณตํ†ต์ ๋งŒ ๋ชจ์•„ ์‚ฌ๋žŒ ํด๋ž˜์Šค๋ฅผ ์ƒ์œ„ ํด๋ž˜์Šค๋กœ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ๊ณ  ๋‘˜์˜ ๊ณตํ†ต์ ์ด ์—†๋‹ค๋ฉด ๋‚จ์ž ํด๋ž˜์Šค์™€ ์—ฌ์ž ํด๋ž˜์Šค๋กœ ๋‚˜๋ˆ ์„œ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

**ํ•˜๋‚˜์˜ ์†์„ฑ์ด ์—ฌ๋Ÿฌ ์†์„ฑ์„ ๊ฐ€์ง€๋Š” ๊ฒฝ์šฐ**

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์— ์กด์žฌํ•˜๋Š” ํ•˜๋‚˜์˜ ํ•„๋“œ๊ฐ€ ์—ฌ๋Ÿฌ ์†์„ฑ์„ ๊ฐ€๋ฅดํ‚ค๊ฒŒ ๋˜๋ฉด ์ •๊ทœํ™”๋ฅผ ํ†ตํ•ด ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์„ ์œ ์ง€ํ•˜๋„๋ก ํ•ด์•ผํ•œ๋‹ค.

๋ฉ”์„œ๋“œ๊ฐ€ SRP ์œ„๋ฐฐ

  • ๋ฌธ์ œ ์ฝ”๋“œ
public class ๊ฐ•์•„์ง€ {
	final static Boolean ์ˆซ์ปท = true;
	final static Boolean ์•”์ปท = false;
	Boolean ์„ฑ๋ณ„;

	void ์†Œ๋ณ€๋ณด๋‹ค() {
		if (this.์„ฑ๋ณ„ == ์ˆซ์ปท) {
			// ํ•œ์ชฝ ๋‹ค๋ฆฌ๋ฅผ ๋“ค๊ณ  ์†Œ๋ณ€์„ ๋ณธ๋‹ค.
		} else {
			// ๋’ค๋‹ค๋ฆฌ ๋‘ ๊ฐœ๋กœ ์•‰์€ ์ž์„ธ๋กœ ์†Œ๋ณ€์„ ๋ณธ๋‹ค.
		}
	}
}

 

๊ฐ•์•„์ง€๊ฐ€ "์ˆ˜์ปท"์ธ์ง€ "์•”์ปท"์ธ์ง€์— ๋”ฐ๋ผ ๋ฉ”์„œ๋“œ์—์„œ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ์ง„ํ–‰๋˜๊ณ  ์žˆ๋‹ค.

 

์ด๋Š” ๊ฐ•์•„์ง€ ํด๋ž˜์Šค์—์„œ "์†Œ๋ณ€๋ณด๋‹ค"์˜ ์•”์ปท๊ณผ ์ˆ˜์ปท ๊ฐ•์•„์ง€์˜ ํ–‰์œ„๋ฅผ ๋ชจ๋‘ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— "๋‹จ์ผ ์ฑ…์ž„ ์›์น™"์„ ์œ„๋ฐฐํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

 

  • ๊ฐœ์„  ์ฝ”๋“œ
package srp.good;

public abstract class ๊ฐ•์•„์ง€ {
	abstract void ์†Œ๋ณ€๋ณด๋‹ค();
}

public class ์ˆซ์ปท๊ฐ•์•„์ง€ extends ๊ฐ•์•„์ง€ {
	void ์†Œ๋ณ€๋ณด๋‹ค() {
		// ํ•œ์ชฝ ๋‹ค๋ฆฌ๋ฅผ ๋“ค๊ณ  ์†Œ๋ณ€์„ ๋ณธ๋‹ค.
	}
}

public class ์•”์ปท๊ฐ•์•„์ง€ extends ๊ฐ•์•„์ง€ {
	void ์†Œ๋ณ€๋ณด๋‹ค() {
		// ๋’ค๋‹ค๋ฆฌ ๋‘ ๊ฐœ๋กœ ์•‰์€ ์ž์„ธ๋กœ ์†Œ๋ณ€์„ ๋ณธ๋‹ค.
	}
}

์ถ”์ƒ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ํ–‰์œ„๊ฐ€ ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ์˜ ๊ตฌํ˜„์„ ํ•˜์œ„ ํด๋ž˜์Šค์—๊ฒŒ ์œ„์ž„ํ•œ๋‹ค.

-> ์•”์ปท๊ณผ ์ˆ˜์ปท ๊ฐ•์•„์ง€์˜ ์„œ๋กœ ๋‹ค๋ฅธ ํ–‰์œ„์˜ ๊ตฌํ˜„์„ ํ•˜์œ„ ํด๋ž˜์Šค์— ๋งก๊ฒผ๊ธฐ ๋•Œ๋ฌธ์— "๋‹จ์ผ ์ฑ…์ž„ ์›์น™"์„ ์ง€ํ‚ฌ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

"์ƒ์†"์€ "๋‹จ์ผ ์ฑ…์ž„ ์›์น™"์„ ์ง€ํ‚คํ‚ค ์œ„ํ•œ ๋„๊ตฌ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

 

๋ชจ๋ธ๋ง์„ ๋‹ด๋‹นํ•˜๋Š” "์ถ”์ƒํ™”"๋Š” "๋‹จ์ผ ์ฑ…์ž„ ์›์น™"๊ณผ ๊ฐ€์žฅ ๊ด€๊ณ„๊ฐ€ ๊นŠ๋‹ค.

-> "์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฒฝ๊ณ„(context)"๋ฅผ ์ •ํ•˜๊ณ  ์ถ”์ƒํ™”๋ฅผ ํ†ตํ•ด ํด๋ž˜์Šค์˜ ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ ๋ฐ˜๋“œ์‹œ ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์„ ๊ณ ๋ คํ•˜์ž!!

 

OCP - ๊ฐœ๋ฐฉ ํ์‡„ ์›์น™

์†Œํ”„ํŠธ์›จ์–ด ์—”ํ‹ฐํ‹ฐ(ํด๋ž˜์Šค, ๋ชจ๋“ˆ, ํ•จ์ˆ˜ ๋“ฑ)๋Š” ํ™•์žฅ์— ๋Œ€ํ•ด์„œ๋Š” ์—ด๋ ค ์žˆ๊ณ  ๋ณ€๊ฒฝ์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ซํ˜€ ์žˆ์–ด์•ผ ํ•œ๋‹ค." - ๋กœ๋ฒ„ํŠธ C. ๋งˆํ‹ด

--> ์œ„ ์ธ์šฉ์„ ์˜์—ญํ•ด๋ณด๋ฉด "์ž์‹ ์˜ ํ™•์žฅ์—๋Š” ์—ด๋ ค ์žˆ๊ณ , ์ฃผ๋ณ€์˜ ๋ณ€ํ™”์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ซํ˜€ ์žˆ์–ด์•ผ ํ•œ๋‹ค" ๋ผ๋Š” ๋ง์ด๋ผ๊ณ  ํ•œ๋‹ค...

 

<๋ฌธ์ œ ์ฝ”๋“œ>

์šด์ „์ž(์ž์‹ )๊ฐ€ "์†Œ๋‚˜ํƒ€"๋ฅผ ์šด์ „ํ•˜๋“  "๋งˆํ‹ฐ์ฆˆ"(์ฃผ๋ณ€)๋ฅผ ์šด์ „ํ•˜๋“  ํ–‰๋™์— ๋ณ€ํ™”๊ฐ€ ์˜ค๋ฉด ์•ˆ๋œ๋‹ค.

-> ์ฃผ๋ณ€์˜ ๋ณ€ํ™”์— ์ž์‹ ์ด ๋ณ€ํ™”ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ (๋ฌธ์ œ)

 

ํ˜„์‹ค ์„ธ๊ณ„ ์˜€๋‹ค๋ฉด ์ž์‹ ์ด ๋ณ€ํ™”ํ•˜๋ฉด ๋˜๋Š” ๋ฌธ์ œ์ง€๋งŒ ๊ฐ์ฒด์ง€ํ–ฅ ์„ธ๊ณ„๋Š” ๋‹ค๋ฅธ ํ•ด๊ฒฐ์ฑ…์„ ์‚ฌ์šฉํ•œ๋‹ค.

  • ๊ฐœ์„  ๋ฐฉ๋ฒ•

๊ฐœ๋ฐฉ ํ์‡„ ์›์น™ ์ ์šฉ

์ƒ์œ„ ํด๋ž˜์Šค or ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ค‘๊ฐ„์— ๋‘ ์œผ๋กœ์จ ๋‹ค์–‘ํ•œ ์ž๋™์ฐจ๊ฐ€ ์ƒ๊ธด๋‹ค๊ณ  ํ•ด๋„ ๊ฐ์ฒด์ง€ํ–ฅ์„ธ๊ณ„์˜ "์šด์ „์ž"๋Š” ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๊ฒŒ ๋œ๋‹ค.

  • ์šด์ „์ž์˜ ์ž…์žฅ์—์„  ์ฃผ๋ณ€์˜ ๋ณ€ํ™”์— ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๊ฒŒ ๋œ๋‹ค. (๋งˆํ‹ฐ์ฆˆ - ์†Œ๋‚˜ํƒ€ ๋“  ์‹ ๊ฒฝ์•ˆ์”€)
  • ์ž๋™์ฐจ์˜ ์ž…์žฅ์—์„  ์ž์‹ ์˜ ํ™•์žฅ์— ๊ฐœ๋ฐฉ๋˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. (๋งˆํ‹ฐ์ฆˆ - ์†Œ๋‚˜ํƒ€๋กœ ํ™•์žฅ)

OCP์˜ ์˜ˆ

JDBC

OCP์˜ˆ : JDBC

  • ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ JDBC ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์™„์ถฉ ์žฅ์น˜ ์‚ผ์•„ ๋ณ€ํ™”์— ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๊ฒŒ ๋œ๋‹ค. (๋ณ€ํ™”์— ๋‹ซํ˜€์žˆ์Œ)
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ๊ต์ฒดํ•˜๋Š” ๊ฒƒ์€ ์ž์‹ ์˜ ํ™•์žฅ์— ์—ด๋ ค์žˆ๋Š” ๊ฒƒ์ด๋‹ค. (ํ™•์žฅ์—๋Š” ์—ด๋ ค์žˆ์Œ)

๋‹ค๋ฅธ ์˜ˆ๋กœ๋Š”
-> ๊ฐœ๋ฐœ์ž๊ฐ€ JVM์ด๋ผ๋Š” ์™„์ถฉ ์žฅ์น˜๊ฐ€ ์žˆ๊ธฐ์— ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ ์†Œ์Šค์ฝ”๋“œ๋Š” ์šด์˜์ฒด์ œ์— ๋‹ซํ˜€์žˆ๊ณ  ๊ฐ ์šด์˜์ฒด์ œ๋ณ„ JVM์€ ํ™•์žฅ์— ์—ด๋ ค์žˆ๋Š” ๊ตฌ์กฐ์ด๋‹ค.

 

๊ฐœ๋ฐฉ ํ์‡„ ์›์น™์„ ๋ฌด์‹œํ•˜๊ณ  ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋ฉด ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ์žฅ์ ์ธ ์œ ์—ฐ์„ฑ, ์žฌ์‚ฌ์šฉ์„ฑ, ์œ ์ง€๋ณด์ˆ˜์„ฑ ๋“ฑ์˜ ์ด์ ์„ ์–ป์„ ์ˆ˜ ์—†๋‹ค.

 

==> ๊ทธ ์—ญํ• ์— ์ฃผ์–ด์ง„ ์ฑ…์ž„์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋ˆ„๊ตฌ๋‚˜ ๊ทธ ์—ญํ• ์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

==> ์Šคํ”„๋ง์€ ๊ฐœ๋ฐฉ ํ์‡„ ์›์น™์˜ ๊น€์—ฐ์•„๋ผ๊ณ  ํ•  ์ •๋„๋กœ ์›์น™์„ ์ž˜ ํ™œ์šฉํ•˜๊ณ  ์žˆ๋‹ค.

 

⇒ ํ™•์žฅ์€ ๋ชปํ•˜๊ณ  ๋ณ€ํ™”์— ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค..??? (DIP!!)

LSP - ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™

"์„œ๋ธŒ ํƒ€์ž…์€ ์–ธ์ œ๋‚˜ ์ž์‹ ์˜ ๊ธฐ๋ฐ˜ ํƒ€์ž…(base type)์œผ๋กœ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค" - ๋กœ๋ฒ„ํŠธ C. ๋งˆํ‹ด

์ƒ์†์—์„œ ๊ธฐ์–ตํ•ด์•ผ ํ•  ๊ฒƒ -> ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ์ƒ์†์€ ๊ณ„์ธต๋„๊ฐ€ ์•„๋‹Œ ๋ถ„๋ฅ˜๋„๊ฐ€ ๋˜์–ด์•ผ ํ•œ๋‹ค. (์Šˆํผํด๋ž˜์Šค ์„œ๋ธŒํด๋ž˜์Šค ๊ตฌ์กฐ)

 

 

  • ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™์„ ์ž˜ ์ง€ํ‚ค๊ณ  ์žˆ๋Š” ํด๋ž˜์Šค
    • ํ•˜์œ„ ํด๋ž˜์Šค is a kind of ์ƒ์œ„ ํด๋ž˜์Šค - ํ•˜์œ„ ๋ถ„๋ฅ˜๋Š” ์ƒ์œ„ ๋ถ„๋ฅ˜์˜ ํ•œ ์ข…๋ฅ˜์ด๋‹ค.
    • ๊ตฌํ˜„ ํด๋ž˜์Šค is able to ์ธํ„ฐํŽ˜์ด์Šค  - ๊ตฌํ˜„ ๋ถ„๋ฅ˜๋Š” ์ธํ„ฐํŽ˜์ด์Šคํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

์ž˜๋ชป๋œ ์ƒ์† ์˜ˆ์‹œ  (๊ณ„์ธต๋„)

์•„๋ฒ„์ง€ - ๋”ธ (๊ธฐ๋ฐ˜ ํƒ€์ž… - ์„œ๋ธŒ ํƒ€์ž…)์€ ๊ณ„์ธต๋„ ํ˜•ํƒœ์˜ ์ž˜๋ชป๋œ ์ƒ์†์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ๋ฌด์—‡์ด ๋ฌธ์ œ์ผ๊นŒ? ํ•œ๋ฒˆ ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ๋ฒ•์น™์„ ์ ์šฉํ•ด๋ณด์ž.

 

  • ์•„๋ฒ„์ง€ ์ถ˜ํ–ฅ์ด = new ๋”ธ() -> ๋ถˆ๊ฐ€๋Šฅ!!!!

๋”ธ์ด ํƒœ์–ด๋‚˜ ์•„๋ฒ„์ง€์˜ ์—ญํ• ์„ ํ•˜๋Š” ๊ฒƒ์€ ๋ง์ด ์•ˆ๋œ๋‹ค.

์ถ˜ํ–ฅ์ด๋Š” ์•„๋ฒ„์ง€ํ˜• ๊ฐ์ฒด ์ฐธ์กฐ ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ง€๋ฏ€๋กœ ์•„๋ฒ„์ง€ ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง„ ํ–‰์œ„๋ฅผ ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค...(ํ•  ์ˆ˜ ์—†์Œ)

์˜ฌ๋ฐ”๋ฅธ ์˜ˆ์‹œ  (๋ถ„๋ฅ˜๋„)

 

  • ๋™๋ฌผ ๋ฝ€๋กœ๋กœ = new ํŽญ๊ท„() 

ํŽญ๊ท„ ํ•œ ๋งˆ๋ฆฌ๊ฐ€ ์ƒˆ๋กญ๊ฒŒ ํƒœ์–ด๋‚˜ ๋™๋ฌผ์˜ ํ–‰์œ„๋ฅผ ํ•œ๋‹ค. -> ์ด์ƒํ•œ ์  ์—†์Œ

๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™์„ ๋งŒ์กฑํ•œ๋‹ค.

 

**๊ฒฐ๋ก **

-> "ํ•˜์œ„ ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค๋Š” ์ƒ์œ„ํ˜• ๊ฐ์ฒด ์ฐธ์กฐ ๋ณ€์ˆ˜์— ๋Œ€์ž…ํ•ด ์ƒ์œ„ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ์—ญํ• ์„ ํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์—†์–ด์•ผ ํ•œ๋‹ค"

 

๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™ ์ ์šฉ ์‚ฌ๋ก€

๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™์€ ์ƒ์†์ด๋ผ๋Š” ํŠน์„ฑ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ๋งŒ ์‚ฌ์šฉํ•˜๋ฉด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™์ด ์œ„๋ฐฐ๋˜์—ˆ์„ ๋•Œ ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”๊ฐ€?

 

ISP - ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™

ํด๋ผ์ด์–ธํŠธ๋Š” ์ž์‹ ์ด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”์„œ๋“œ์— ์˜์กด ๊ด€๊ณ„๋ฅผ ๋งบ์œผ๋ฉด ์•ˆ ๋œ๋‹ค." - ๋กœ๋ฒ„ํŠธ C. ๋งˆํ‹ด

๋‹จ์ผ์ฑ…์ž„ ์›์น™์„ ์ ์šฉํ•˜๊ธฐ ์ „ ๋‚จ์ž ํด๋ž˜์Šค๋ฅผ ์‚ดํŽด๋ณด์ž.

๋„ˆ๋ฌด ๋งŽ์€ ์ฑ…์ž„๊ณผ ์—ญํ• ์„ ๊ฐ€์ง„ ๋‚จ์ž..

์„œ๋กœ ๊ฐ„์˜ ์˜ํ–ฅ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด "๋‹จ์ผ ์ฑ…์ž„ ์›์น™"์„ ์ ์šฉ์‹œํ‚ฌ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

์ด๋•Œ ํด๋ž˜์Šค๋ฅผ ํ† ๋ง‰๋‚ด๋Š” ๊ฒƒ ๋ง๊ณ ๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ ์—†์„๊นŒ???

์ƒˆ๋กœ์šด ๋ฐฉ๋ฒ• : ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„ํ•  ์›์น™

์ธํ„ฐํŽ˜์ด์Šค ๋ถ„ํ•  ์›์น™์ด ์ ์šฉ๋œ ๋‚จ์ž ํด๋ž˜์Šค

์ด ๋ฐฉ๋ฒ•์€ ๋‚จ์ž ํด๋ž˜์Šค๋ฅผ ์ฑ…์ž„๊ณผ ์—ญํ• ์— ๋”ฐ๋ผ ํด๋ž˜์Šค๋ฅผ ์ชผ๊ฐœ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค.

 

๋Œ€์‹  ๋‚จ์ž๋ฅผ ๋‹ค์ค‘ ์ธ๊ฒฉํ™”(?)(์ œํ•œ)์‹œ์ผœ
์ง์žฅ์ƒ์‚ฌ์™€ ์žˆ์„ ๋• "์ถœ๊ทผํ•˜๊ธฐ(), ์•„๋ถ€ํ•˜๊ธฐ()" ํ–‰์œ„๋งŒ ํ•˜๋„๋ก ์ œํ•œํ•˜๊ณ 

์–ด๋จธ๋‹ˆ์™€ ์žˆ์„ ๋• "ํšจ๋„ํ•˜๊ธฐ(), ์•ˆ๋งˆํ•˜๊ธฐ()" ํ–‰์œ„๋งŒ ํ•˜๋„๋ก ์ œํ•œ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

 

๊ฒฐ๋ก ์ ์œผ๋กœ "๋‹จ์ผ ์ฑ…์ž„ ์›์น™"๊ณผ "์ธํ„ฐํŽ˜์ด์Šค ๋ถ„ํ•  ์›์น™"์€ ๊ฐ™์€ ๋ฌธ์ œ(๋‹ค์ค‘ ์ฑ…์ž„)์— ๋Œ€ํ•œ ๋‘ ๊ฐ€์ง€ ๋‹ค๋ฅธ ํ•ด๊ฒฐ์ฑ…์ด๋‹ค.

 

  • ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„ํ•  ์›์น™์€ ์ธํ„ฐํŽ˜์ด์Šค ์ตœ์†Œ์ฃผ์˜ ์›์น™์„ ๊ฐ€์ง„๋‹ค.
    • ์ตœ์†Œ์ฃผ์˜๋ž€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์™ธ๋ถ€์— ๋ฉ”์„œ๋“œ ์ œ๊ณต์‹œ ์ตœ์†Œํ•œ์˜ ๋ฉ”์„œ๋“œ๋งŒ ์ œ๊ณตํ•ด์•ผํ•œ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์› ์ธํ„ฐํŽ˜์ด์Šค์— ํ‚ค์Šคํ•˜๊ธฐ() ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•˜๋ฉด ์•ˆ๋˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ์ด์œ ์ด๋‹ค. (์‚ฌ์›์˜ ์ฑ…์ž„์— ๋ถ€ํ•ฉํ•˜์ง€ ์•Š๋Š”๋‹ค.)

์ƒ์œ„ ํด๋ž˜์Šค๋Š” ํ’์„ฑํ• ์ˆ˜๋ก ์ข‹๊ณ  "์ธํ„ฐํŽ˜์ด์Šค"๋Š” ์ž‘์„์ˆ˜๋ก ์ข‹๋‹ค.

๋นˆ์•ฝํ•œ ์ƒ์œ„ ํด๋ž˜์Šค vs ํ’์„ฑํ•œ ์ƒ์œ„ ํด๋ž˜์Šค

๋นˆ์•ฝํ•œ ์ƒ์œ„ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ๊ฐ€ ํ•˜์œ„ํด๋ž˜์Šค์—์„œ ์ค‘๋ณต๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

ํ•˜์ง€๋งŒ ํ’์„ฑํ•œ ์ƒ์œ„ ํด๋ž˜์Šค์—์„œ๋Š” ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ๊ณตํ†ต์œผ๋กœ ๊ฐ€์งˆ ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ๋ฅผ ์ƒ์†ํ•œ๋‹ค.

DIP - ์˜์กด ์—ญ์ „ ์›์น™

"๊ณ ์ฐจ์› ๋ชจ๋“ˆ์€ ์ €์ฐจ์› ๋ชจ๋“ˆ์— ์˜์กดํ•˜๋ฉด ์•ˆ๋œ๋‹ค. ์ด ๋‘˜์€ ๋ชจ๋‘ ๋‹ค๋ฅธ ์ถ”์ƒํ™”๋œ ๊ฒƒ์— ์˜์กดํ•ด์•ผํ•œ๋‹ค."
"์ถ”์ƒํ™” ๋œ ๊ฒƒ์€ ๊ตฌ์ฒด์ ์ธ ๊ฒƒ์— ์˜์กดํ•˜๋ฉด ์•ˆ๋œ๋‹ค. ๊ตฌ์ฒด์ ์ธ ๊ฒƒ์ด ์ถ”์ƒํ™”๋œ ๊ฒƒ์— ์˜์กดํ•ด์•ผํ•œ๋‹ค."

 

์˜์กด ์—ญ์ „ ์›์น™  ์ ์šฉ ์ „(๊ตฌ์ฒด ํด๋ž˜์Šค์— ์˜์กด)

์œ„์˜ ์˜ˆ์‹œ์ฒ˜๋Ÿผ ์ž๋™์ฐจ์™€ ์Šค๋…ธ์šฐํƒ€์ด์–ด ์‚ฌ์ด์—๋Š” ์˜์กด ๊ด€๊ณ„๊ฐ€ ์กด์žฌํ•œ๋‹ค.

์ž๋™์ฐจ๊ฐ€ ์Šค๋…ธ์šฐํƒ€์ด์–ด์— ์˜์กดํ•˜๋Š” ๊ด€๊ณ„์ด๋‹ค.

 

์ž๋™์ฐจ๋Š” 10๋…„์ด์ƒ๋„ ํƒˆ ์ˆ˜ ์žˆ์ง€๋งŒ ์Šค๋…ธ์šฐํƒ€์ด์–ด๋Š” ๊ณ„์ ˆ์ด ๋ฐ”๋€Œ๋ฉด ์ผ๋ฐ˜ ํƒ€์ด์–ด๋กœ ๋ฐ”๊ฟ”์ค˜์•ผ ํ•œ๋‹ค.

-> ์ฆ‰, ์Šค๋…ธ์šฐํƒ€์ด์–ด๊ฐ€ ์ž๋™์ฐจ๋ณด๋‹ค ์ž์ฃผ ๋ณ€๊ฒฝ๋œ๋‹ค.

 

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ž๋™์ฐจ๋Š” ์ž์‹ ๋ณด๋‹ค ์ž์ฃผ ๋ณ€๊ฒฝ๋˜๋Š” ํด๋ž˜์Šค์— ์˜์กดํ•ด ๋ถ€์„œ์ง€๊ธฐ ์‰ฝ๊ณ  ๋ƒ„์ƒˆ๋ฅผ ํ’๊ธฐ๋Š” ํด๋ž˜์Šค์ด๋‹ค. ์ด๋ฅผ ๊ฐœ์„ ํ•ด๋ณด์ž!

 

๊ฐœ์„  ๋ฐฉ๋ฒ•

์˜์กด ์—ญ์ „ ์›์น™ ์ ์šฉ ํ›„

์œ„ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ์ž๋™์ฐจ๊ฐ€ "์Šค๋…ธ์šฐํƒ€์ด์–ด"๊ฐ€ ์•„๋‹Œ ์ถ”์ƒํ™”๋œ ํƒ€์ด์–ด ์ธํ„ฐํŽ˜์ด์Šค์— ์˜์กดํ•˜๊ฒŒ ํ•ด๋ณด์ž.

์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ตฌํ˜„์ฒด๊ฐ€ ๋ณ€๊ฒฝ(์Šค๋…ธ์šฐ -> ์ผ๋ฐ˜)๋˜๋„ ์ž๋™์ฐจ๋Š” ๊ทธ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค.

 

์ด ํ•ด๊ฒฐ์ฑ…์€ "๊ฐœ๋ฐฉ ํ์‡„ ์›์น™"๋„ ๋…น์•„๋“ค์–ด ์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ํ•˜๋‚˜์˜ ํ•ด๊ฒฐ์ฑ…์— ์—ฌ๋Ÿฌ ์„ค๊ณ„๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

 

 

์ž, ๊ทธ๋Ÿฌ๋ฉด ์™œ "์˜์กด ์—ญ์ „ ์›์น™"์ด๋ผ๊ณ  ๋ถ€๋ฅผ๊นŒ??

 

์ด์ œ ๊ฐœ์„ ๋œ ๋ฐฉ๋ฒ•์˜ ์Šค๋…ธ์šฐํƒ€์ด์–ด์™€ ๊ธฐ์กด ๋ฐฉ๋ฒ•์˜ ์Šค๋…ธ์šฐํƒ€์ด์–ด๋ฅผ ๋น„๊ตํ•ด๋ณด์ž.

๊ธฐ์กด ์Šค๋…ธ์šฐํƒ€์ด์–ด๋Š” ์–ด๋–ค ๊ณณ์—๋„ ์˜์กดํ•˜์ง€ ์•Š๋Š” ํด๋ž˜์Šค์˜€์ง€๋งŒ ๊ฐœ์„  ๋ฐฉ๋ฒ•์—์„  ์ถ”์ƒ์ ์ธ ํƒ€์ด์–ด ์ธํ„ฐํŽ˜์ด์Šค์— ์˜์กดํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

 

์ฆ‰, ์ž๋™์ฐจ๋Š” ์ž์‹ ์ด ์˜์กดํ•˜๋˜ ํƒ€์ด์–ด ๋Œ€์‹  ๋” ์ถ”์ƒํ™”๋œ ํƒ€์ด์–ด ์ธํ„ฐํŽ˜์ด์Šค์— ์˜์กดํ•˜๊ณ  ์Šค๋…ธ์šฐ ํƒ€์ด์–ด ๋˜ํ•œ ์ถ”์ƒ์ ์ธ ํƒ€์ด์–ด ์ธํ„ฐํŽ˜์ด์Šค์— ์˜์กดํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. (์˜์กด ๋ฐฉํ–ฅ์ด ๋ฐ”๋€ ๊ฒƒ์„ ๋ณผ์ˆ˜ ์žˆ๋‹ค)

 

⇒ ํ™•์žฅ์€ ๋ชปํ•˜๊ณ  ๋ณ€ํ™”์— ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค..??? (DIP!!)

 

**๊ฒฐ๋ก  -> "์ž์‹ ๋ณด๋‹ค ๋ณ€ํ•˜๊ธฐ ์‰ฌ์šด ๊ฒƒ์— ์˜์กดํ•˜์ง€ ๋งˆ๋ผ." **

 

 

 

 

'๐Ÿ“š์ฝ์€ ์ฑ… ์ •๋ฆฌ > ์ž๋ฐ” ๊ฐ์ฒด์ง€ํ–ฅ ์›๋ฆฌ์™€ ์ดํ•ด' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[์Šคํ”„๋ง ์ž…๋ฌธ์„ ์œ„ํ•œ ์ž๋ฐ” ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ์›๋ฆฌ์™€ ์ดํ•ด] 7์žฅ : ์Šคํ”„๋ง ์‚ผ๊ฐํ˜•๊ณผ ์„ค์ • ์ •๋ณด  (0) 2021.05.14
[์Šคํ”„๋ง ์ž…๋ฌธ์„ ์œ„ํ•œ ์ž๋ฐ” ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ์›๋ฆฌ์™€ ์ดํ•ด] 6์žฅ : ์Šคํ”„๋ง์ด ์‚ฌ๋ž‘ํ•œ ๋””์ž์ธ ํŒจํ„ด  (0) 2021.05.13
[์Šคํ”„๋ง ์ž…๋ฌธ์„ ์œ„ํ•œ ์ž๋ฐ” ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ์›๋ฆฌ์™€ ์ดํ•ด] 4์žฅ : ์ž๋ฐ”๊ฐ€ ํ™•์žฅํ•œ ๊ฐ์ฒด ์ง€ํ–ฅ  (0) 2021.04.27
[์Šคํ”„๋ง ์ž…๋ฌธ์„ ์œ„ํ•œ ์ž๋ฐ” ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์›๋ฆฌ์™€ ์ดํ•ด] 3์žฅ : ์ž๋ฐ”์™€ ๊ฐ์ฒด ์ง€ํ–ฅ  (0) 2021.04.22
[์Šคํ”„๋ง ์ž…๋ฌธ์„ ์œ„ํ•œ ์ž๋ฐ” ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์›๋ฆฌ์™€ ์ดํ•ด] 2์žฅ : ์ž๋ฐ”์™€ ์ ˆ์ฐจ์ /๊ตฌ์กฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ  (0) 2021.04.21