Notice
Recent Posts
Link
Today
Total
07-07 22:50
๊ด€๋ฆฌ ๋ฉ”๋‰ด

dingdong coding

[ Object-Oriented Programming ] ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ณธ๋ฌธ

๐ŸฐJAVA/Design Pattern

[ Object-Oriented Programming ] ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

๐Ÿถ ๊ฐœ๋ฐœ๊ฐœ๋ฐœ ๐Ÿพ 2022. 1. 24. 00:33

๊ฐ์ฒด Object = ๋ฌผ์ฒด, ์†์„ฑ(property)๊ณผ ํ–‰๋™(method)๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š” ํ˜„์‹ค์„ธ๊ณ„์˜ ์‚ฌ๋ฌผ or ๋ฌผ์ฒด or ๋Œ€์ƒ 

๊ฐ์ฒด์ง€ํ–ฅํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ด๋ž€? Object Oriented Programming

๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋žจ์„ ๋ช…๋ น์–ด์˜ ๋ชฉ๋ก์œผ๋กœ ๋ณด๋Š” ์‹œ๊ฐ์—์„œ ๋ฒ—์–ด๋‚˜ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋…๋ฆฝ๋œ ๋‹จ์œ„, ์ฆ‰ "๊ฐ์ฒด"๋“ค์˜ ๋ชจ์ž„์œผ๋กœ ํŒŒ์•…ํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ฐ๊ฐ์˜ ๊ฐ์ฒด๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ ๋ฐ›๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์‹ค์ œ ์„ธ๊ณ„์˜ ์‚ฌ๋ฌผ์„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ ์˜ฎ๊ฒจ์™€ ์ด๋ฅผ ๊ฐ์ฒด๋กœ ๋ณด๊ณ  ํ•ด๋‹น ๊ฐ์ฒด์˜ ํŠน์ง•๊ณผ ๊ธฐ๋Šฅ์„ ๋ชจ๋ธ๋งํ•˜์—ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๋Š” ๊ธฐ๋ฒ•์œผ๋กœ ์œ ์—ฐํ•˜๊ณ  ๋ณ€๊ฒฝ์ด ์šฉ์ดํ•˜๋‹ค. ( ์žฌ์‚ฌ์šฉ์„ฑ ) ex) Java

 

= ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‰ฝ๊ณ  ์œ ์—ฐํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•˜๋ฉด์„œ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•จ 


1. ๊ฐ์ฒด์ง€ํ–ฅํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํŠน์ง•

1) ๋‹คํ˜•์„ฑ Polymorphism

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

 

์—ฌ๊ธฐ drive method๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š” ํ•˜๋‚˜์˜ ๋ถ€๋ชจํด๋ž˜์Šค์ธ Car์ด ์žˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  Car class์˜ dirve method๋ฅผ ์ƒ์†๋ฐ›์•„ ์žฌ์ •์˜ํ•œ(Override) ์ž์‹ class์ธ Bmv์™€ Kn class๊ฐ€ ์กด์žฌํ•œ๋‹ค. 

public abstract class Car{
   public abstract void drive();
}

public class Bmv extends Car{
   @Override
   public void drive() {
      System.out.println("Bureung~"); // Bmv ๋ถ€๋ฆ‰ ~
   }
}

public class Kn extends Car{
   @Override
   public void drive() {
      System.out.println("Boowaang~"); // Kn ๋ถ€์•™ ~
   }
}

 

๋‘ ์ž์‹ ํด๋ž˜์Šค๋Š” ๋ถ€๋ชจ์˜ method๋ฅผ ์ƒ์†๋ฐ›์•„ drive ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜์ง€๋งŒ ๋™์ž‘ ๋ฐฉ์‹(๊ตฌํ˜„๋ฐฉ๋ฒ•)์€ ๋‹ค๋ฅด๋‹ค.

์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” ๋‹คํ˜•์„ฑ์ด๋ž€ drive๋ผ๋Š” ๋™์ž‘ ์ž์ฒด๋Š” ๋ฐ”๋€Œ์ง€ ์•Š์ง€๋งŒ ๋™์ž‘ ๋ฐฉ์‹์€ ๊ฐ ์ž์‹ ํด๋ž˜์Šค๋งˆ๋‹ค ๋‹ค๋ฅด๊ฒŒ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ์„ ๋งํ•œ๋‹ค.

 

Car c = new Bmv();
c.drive(); // ๋ถ€๋ฆ‰~

 

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

 

ex) drive( )๋ผ๋Š” ๋ฉ”์„œ๋“œ(๊ธฐ๋Šฅ, ์—ญํ• )๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ƒ์†์„ ํ†ตํ•ด ์ƒˆ๋กœ์šด ์ž์‹ class๋กœ ๊ตฌํ˜„๋œ๋‹ค.

๋”ฐ๋ผ์„œ ์ถ”์ƒ class Car( )์˜ dirve( ) method๋Š” ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ, User(Client)๋Š” Car( ) class๋ฅผ ์‚ฌ์šฉ ์‹œ dirve( )์˜ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„๋ฐฉ๋ฒ•์„ ๋ชฐ๋ผ๋„ dirve( )๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

Java์˜ ๋‹คํ˜•์„ฑ์€ ๊ธฐ๋Šฅ๊ณผ ๊ตฌํ˜„์ด ๊ตฌ๋ถ„๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ์˜ ์œ ์—ฐ์„ฑ๊ณผ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด๋Š” ์ชฝ์œผ๋กœ ๊ฐ์ฒด๋ฅผ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ทธ๋ž˜์„œ ๊ฐ์ฒด ์„ค๊ณ„ ์‹œ ์—ญํ• ๊ณผ ๊ตฌํ˜„์„ ๋ถ„๋ฆฌํ•ด์•ผํ•˜๋ฉฐ, ์—ญํ• (์ธํ„ฐํŽ˜์ด์Šค)๋ฅผ ๋จผ์ € ๋ถ€์—ฌํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์ดํ›„ ํ•ด๋‹น ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ตฌํ˜„๊ฐ์ฒด๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค.

 

    • ์—ญํ•  : ์ธํ„ฐํŽ˜์ด์Šค

    • ๊ตฌํ˜„ : ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค, ๊ตฌํ˜„ ๊ฐ์ฒด

 

์ฆ‰, ํด๋ผ์ด์–ธํŠธ๋Š” ๊ตฌํ˜„ ๋Œ€์ƒ์˜ ๋‚ด๋ถ€๊ตฌ์กฐ๋ฅผ ๋ชฐ๋ผ๋„ ๋˜๋ฉฐ, ๋‚ด๋ถ€๊ตฌ์กฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด๋„ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋Œ€์ƒ ์ž์ฒด๋ฅผ ๋ณ€๊ฒฝํ•ด๋„ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค.  ** Client ๋ณ€๊ฒฝ ์—†์ด Server์˜ ๊ตฌํ˜„ ๊ธฐ๋Šฅ์„ ์œ ์—ฐํ•˜๊ฒŒ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ **

 

์ด์ œ ์•Œ์•„๋ณผ ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„์›์น™ SOLID๋„ ์ด ๋‹คํ˜•์„ฑ์ด๋ผ๋Š” ๊ฐœ๋…์—์„œ ์ถœ๋ฒ”ํ–ˆ๋‹ค๊ณ  ๋ณผ ์ˆ˜์žˆ๋‹ค.

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

SRP ๋‹จ์ผ ์ฑ…์ž„ ์›์น™ (Single Responsibility principle)

๋ง ๊ทธ๋Œ€๋กœ ๊ฐ์ฒด(ํด๋ž˜์Šค)๋Š” ํ•˜๋‚˜์˜ ์ฑ…์ž„๋งŒ ๊ฐ€์ ธ์•ผํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.  ( ์ฑ…์ž„์ด๋ž€ ํ•ด์•ผํ•˜๋Š” ๊ฒƒ์„ ์ž˜ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ )

์ข‹์€ ์„ค๊ณ„๋Š” ์‹œ์Šคํ…œ์— ์ƒˆ๋กœ์šด ๋ณ€๊ฒฝ ๋˜๋Š” ์š”๊ตฌ์‚ฌํ•ญ์ด ์žˆ์„ ๋•Œ ๊ธฐ์กด ์ฝ”๋“œ๊ฐ€ ์˜ํ–ฅ๋ฐ›๋Š” ๋ถ€๋ถ„์ด ์ ์–ด์•ผ ํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ์ฑ…์ž„์ด ๋งŽ์•„์งˆ์ˆ˜๋ก ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ ์ฝ”๋“œ๋ผ๋ฆฌ์˜ ๊ฒฐํ•ฉ์„ฑ์ด ๋†’์•„์ ธ ๋‹ค๋ฅธ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฝ”๋“œ๋ผ๋ฆฌ ๋ณ€ํ™”๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ฌธ์ œ ๋ฐœ์ƒ ์‹œ์—๋„ ํ…Œ์ŠคํŠธํ•ด์•ผํ•˜๋Š” ๋ฒ”์œ„๊ฐ€ ๋„“์–ด์ง„๋‹ค. (์‚ฐํƒ„์ด ์ˆ˜์ˆ ๊ฐ™์€)

๋”ฐ๋ผ์„œ ์ฑ…์ž„๋ถ„๋ฆฌ๋ฅผ ์ž˜ํ•ด์•ผํ•œ๋‹ค. 

OCP ๊ฐœ๋ฐฉ ํ์‡„ ์›์น™ (Open/Closed principle)

๊ธฐ์กด์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์œผ๋ฉด์„œ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋˜์–ด์•ผ ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. ( ์ฝ”๋“œ ํ™•์žฅ์‹œ์—๋Š” Open, ๋ณ€๊ฒฝ์—๋Š” Closed )  ๋ณ€ํ•˜๋Š” ๊ฒƒ๊ณผ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ๊ตฌ๋ถ„ํ•˜์—ฌ ๋ณ€๊ฒฝ์ด ์žˆ๋”๋ผ๋„ ๊ธฐ์กด์˜ ํด๋ž˜์Šค๊ฐ€ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๊ฒŒ ์„ค๊ณ„ํ•ด์•ผํ•œ๋‹ค.

์ด๋Š” ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ๊ตฌ์ฒด์ ์ธ ์ถœ๋ ฅ๋งค์ฒด๋ฅผ ์บก์Šํ™” encapsulation ํ•˜์—ฌ ์ฒ˜๋ฆฌํ•ด์•ผํ•œ๋‹ค. 

public class MeteorologicalAdministration { // ๊ธฐ์ƒ์ฒญ 
   public void weatherNotification(){
      if( getTemperature() > 5 ){
      		temperatureCheck(...)
            ...
      }
   }
   private void temperatureCheck(){ ... } // ์˜จ๋„์ฒดํฌ
   private int getTemperature(){ return ... }; // ์˜จ๋„    
}

 

์œ„์˜ ์ฝ”๋“œ๋Š” OCP๊ฐ€ ์ง€์ผœ์ง€์ง€ ์•Š๊ณ ์žˆ๋‹ค. ๋ฌด์—‡์ด ๋ฌธ์ œ์ผ๊นŒ?

์˜จ๋„์ฒดํฌ์™€ ์˜จ๋„ ๋ฉ”์„œ๋“œ๋Š” ๋‚ ์”จ์— ๋”ฐ๋ผ ๋ณ€ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค. ( ์˜จ๋„๊ฐ€ ๋ช‡๋„์ธ์ง€์— ๋”ฐ๋ผ์„œ ์ฒดํฌ๊ฒฐ๊ณผ๋„ ๋‹ฌ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ์—.. )

์ด๋Š” ๊ธฐ์กด ์ฝ”๋“œ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋Š” ๋ถ„๋ฆฌํ•ด ์ค„ ํ•„์š”๊ฐ€ ์žˆ๋‹ค. 

 

public interface Checker { //์ธํ„ฐํŽ˜์ด์Šค ์ƒ์„ฑ
   public default void temperatureCheck(){ } 
   public int getTemperature(); 
}

public class Temperature implements Checker{ //์˜จ๋„ ์ „์šฉ ํด๋ž˜์Šค

   @Override
   public void temperatureCheck() { // ์˜จ๋„์ฒดํฌ
      Checker.super.temperatureCheck();
   }

   @Override
   public int getTemperature() { // ์˜จ๋„
      return 0;
   }
}

 

์ด์ฒ˜๋Ÿผ Checker ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์˜จ๋„์ฒดํฌ๋ฅผ ํ•˜๋Š” ํด๋ž˜์Šค์— Checker๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค๋ฉด ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ๊ฐ€ ์ถ”๊ฐ€๋˜๋”๋ผ๋„ ์ด๋ฅผ ์ด์šฉํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ ํด๋ž˜์Šค๋Š” ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค.

 

+  Spring์—์„œ๋Š” ๋‹คํ˜•์„ฑ์— ๊ธฐ๋ฐ˜ํ•œ OCP ์›์น™์„ ์ง€ํ‚ค๊ธฐ ์œ„ํ•ด์„œ DI, Ioc์— ๋Œ€ํ•ด ์•Œ์•„๋‘๋ฉด ์ข‹๋‹ค.

LSP ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™ (Liskov subsitution principle)

๋ถ€๋ชจํด๋ž˜์Šค์™€ ์ž์‹ํด๋ž˜์Šค ์‚ฌ์ด์˜ ํ–‰์œ„๊ฐ€ ์ผ๊ด€์„ฑ์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค. ( ํ–‰์œ„์˜ ์ผ๊ด€์„ฑ )

์ฆ‰, ์ž์‹ ํด๋ž˜์Šค์˜ instance๊ฐ€ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ instance๋ฅผ ๋Œ€์‹ ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. 

๋”ฐ๋ผ์„œ ์ผ๊ด€์„ฑ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ถ€๋ชจํด๋ž˜์Šค์—์„œ ์ƒ์†๋ฐ›์€ ๋ฉ”์„œ๋“œ๋ฅผ ์ž์‹ํด๋ž˜์Šค์—์„œ ์˜ค๋ฒ„๋ผ์ด๋“œํ•˜์ง€ ๋ง์•„์•ผํ•œ๋‹ค. ( ์žฌ์ •์˜ํ•˜์ง€ ์•Š๊ณ  ํ™•์žฅ๋งŒ ์ˆ˜ํ–‰ํ•ด์•ผํ•œ๋‹ค. )

ISP ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™ (Interface segregation principle)

ํด๋ผ์ด์–ธํŠธ์— ํŠนํ™”๋œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค. ์ฆ‰, ํด๋ผ์ด์–ธํŠธ ๊ด€์ ์—์„œ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ํŠนํ™”๋˜๋„๋ก ๋ถ„๋ฆฌ์‹œ์ผœ์•ผํ•œ๋‹ค.

( ํด๋ผ์ด์–ธํŠธ ๊ด€์ ์—์„œ ํด๋ผ์ด์–ธํŠธ ์ž์‹ ์ด ์ด์šฉํ•˜์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ์—๋Š” ์˜ํ–ฅ์„ ๋ฐ›์œผ๋ฉด ์•ˆ๋œ๋‹ค. )

์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌ๋˜๋ฉด ๋Œ€์ฒด ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„์ง„๋‹ค.

DIP ์˜์กด ๊ด€๊ณ„ ์—ญ์ „ ์›์น™ (Dependency inversion principle)

์˜์กด๊ด€๊ณ„๋ฅผ ๋งบ์„ ๋•Œ ๋ณ€ํ™”๊ฐ€ ์ž์ฃผ ์ผ์–ด๋‚˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋ณ€ํ™”๊ฐ€ ๊ฑฐ์˜ ์—†๋Š” ๊ฒƒ์— ์˜์กดํ•ด์•ผํ•œ๋‹ค.

= ์ถ”์ƒํ™”(์—ญํ• )์— ์˜์กดํ•˜๊ณ , ๊ตฌ์ฒดํ™”(๊ตฌํ˜„)์— ์˜์กดํ•˜๋ฉด ์•ˆ๋œ๋‹ค.

์ฆ‰, ๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ(๋ณ€ํ™”๊ฐ€ ๊ฑฐ์˜ X๊ฒƒ )์ด ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ(๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ํ•˜์œ„ ๊ธฐ๋Šฅ์˜ ์‹ค์ œ ๊ตฌํ˜„, ์‰ฝ๊ฒŒ ๋ณ€ํ•˜๋Š” ๊ฒƒ)์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค.

 

์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋ณ€ํ•˜์ง€ ์•Š๋Š”๊ฒƒ, ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค๋Š” ๋ณ€ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค.

 

๋‹ค์‹œ ํ•œ ๋ฒˆ ๊ฐ•์กฐํ•˜์ž๋ฉด ๋ณ€ํ•˜์ง€ ์•Š๋Š” ์ธํ„ฐํŽ˜์ด์Šค์—๋งŒ ์˜์กดํ•ด์•ผํ•˜๊ณ  ๋ณ€ํ™”๊ฐ€ ์žฆ์€ ๊ตฌํ˜„ ํด๋ž˜์Šค์—๋Š” ์˜์กดํ•˜๋ฉด ์•ˆ๋œ๋‹ค.

๊ตฌํ˜„ํด๋ž˜์Šค์— ์˜์กดํ•˜๋ฉด DIP ์œ„๋ฐ˜์— ์†ํ•œ๋‹ค. 


์ด์ฒ˜๋Ÿผ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ง€์ผœ์•ผํ•˜๋Š” ์‚ฌํ•ญ๋“ค์ด ๋งŽ๋‹ค.

ํ•˜์ง€๋งŒ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•จ์œผ๋กœ์จ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์žฌ์‚ฌ์šฉ์„ฑ ์œ ์—ฐ์„ฑ์ด ๋†’์•„์ง€๋Š” ๊ฒƒ์€ ํ™•์‹คํ•˜๋‹ค.

 

์ด๋Ÿฌํ•œ ์›์น™์„ ์ž˜ ์ง€ํ‚ฌ ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ์ง€์›์„ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค. 

๋•Œ๋ฌธ์— ์•ž์œผ๋กœ ์Šคํ”„๋ง์— ๋Œ€ํ•ด ๋” ๊ตฌ์ฒด์ ์œผ๋กœ ๊ณต๋ถ€ํ•  ์ƒ๊ฐ์ด๋‹ค. 

 

์ด์ƒ ์˜ค๋Š˜์€ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•ด๋ณด์•˜๋‹ค.  


UML ํ‘œ๊ธฐ๋ฒ• 

 

P.S : ๋ถ€์กฑํ•œ ๋ถ€๋ถ„์€ ๊ณ„์†ํ•ด์„œ ์ˆ˜์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿฅฐ

'๐ŸฐJAVA > Design Pattern' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Strategy Pattern  (0) 2022.07.06
Factory Method Pattern  (0) 2022.07.05
Singleton Pattern  (0) 2022.06.21
Comments