๐Ÿงถ์‹ค์Šต ๋‹น๊ทผ๋งˆ์ผ“

๊ฐ€์–ธยท2024๋…„ 7์›” 30์ผ

ํ• ์ธ: 2๊ฐ€์ง€ ์ค‘๋ณต ํ• ์ธ์€ ์•ˆ๋จ!

  • ํšŒ์› ๋“ฑ๊ธ‰(1~5๋“ฑ๊ธ‰, 5%) ๋‹น ํ• ์ธ
  • 5๋ช… ์„ ์ฐฉ์ˆœ (10%) ํ• ์ธ

๋น„ํšŒ์› ์„œ๋น„์Šค=> ๋น„ํšŒ์› ํ• ์ธ

  • ์„ ์ฐฉ์ˆœ ํ• ์ธ

ํšŒ์› ์„œ๋น„์Šค=> ํšŒ์› ํ• ์ธ

  • ๋“ฑ๊ธ‰ ํ• ์ธ

์ปจํŠธ๋กค๋Ÿฌ, ์„œ๋น„์Šค or ์ถ”๊ฐ€ ํด๋ž˜์Šค

input: price + a / X

output: discounted price / 0,1

๋‹น๊ทผ๋งˆ์ผ“ with SOLID ์›์น™

  1. ์„œ๋น„์Šค-๋ฉ”์†Œ๋“œ 2๊ฐœ (ํšŒ์›/๋น„ํšŒ์›)
  2. ์„œ๋น„์Šค ๋ถ„๋ฆฌ or Not

Member

  • ๋น„๋ฐ€๋ฒˆํ˜ธ ์ €์žฅ
    : ๋น„๋ฐ€๋ฒˆํ˜ธ ์•”ํ˜ธํ™”ํ•ด์„œ ์ €์žฅ > ๋‹ค๋ฅธ ๊ณณ์— ๋กœ์ง ๋นผ๊ธฐ: ์ฑ…์ž„ ๋ถ„๋ฆฌ!
  • ํšŒ์›์ •๋ณด ์กฐํšŒ
  • ...

ํ• ์ธ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ์–ด๋””์„œ ํ• ๊นŒ?

ํšŒ์› ์„œ๋น„์Šค์—์„œ ๋‹ค ๊ตฌํ˜„ํ•˜๊ธฐ์—๋Š”.. ์ข€,,,

ํ• ์ธ ์ •์ฑ… ๋ถ„๋ฆฌ or Not

ํšŒ์› ์„œ๋น„์Šค์—์„œ ๋‹ค ๊ตฌํ˜„ํ•˜๊ธฐ์—๋Š” ํšŒ์› ์„œ๋น„์Šค์˜ ์—ญํ• ์ด ๋„ˆ๋ฌด ๋งŽ๋‹ค.
๋ถ„๋ฆฌ ์ง„ํ–‰-> ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ถ„๋ฆฌํ• ๊นŒ? ์ถ”์ƒ ๋ฉ”์†Œ๋“œ๋กœ ๋ถ„๋ฆฌํ• ๊นŒ?
๋‘˜์˜ ์ฐจ์ด์ ์„ ๋จผ์ € ๋ณด์ž. ๋‘˜
์ธํ„ฐํŽ˜์ด์Šค์™€ ์ถ”์ƒ๋ฉ”์†Œ๋“œ๋Š” ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋ƒ์—†๋ƒ์˜ ์ฐจ์ด๊ฐ€ ์กด์žฌํ•˜๊ณ ,
์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์ง€ ๋ชปํ•˜๊ณ , ์ƒ์„ฑ์ž๊ฐ€ ์—†๋‹ค๋Š” ํŠน์ง•!
์ดํ›„ ๊ฒฐ์ •ํ•ด๋ณด์ž~

@Primary+@Qulifier

step1. discountPolicy๊ฐ€ 2๊ฐœ


์Šคํ”„๋ง์€ ํƒ€์ž…์ด ๊ฐ™์„๋•Œ์—๋Š” ์ด๋ฆ„์„ ๋ณด๊ณ  ๊ตฌ๋ณ„ํ•ด ๋นˆ์—์„œ ๊ณจ๋ผ์™€ ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•œ๋‹ค.
์ถฉ๊ฒฉ์  ์Šคํ”„๋ง์€ ์ฒœ์žฌ๋‹ค..!
ํ•˜๋‚˜์˜ ํƒ€์ž…์œผ๋กœ ์—ฌ๋Ÿฌ๊ฐœ ๊ฐ์ฒด๊ฐ€ ์žˆ์œผ๋ฉด ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„์œผ๋กœ ๊ตฌ๋ณ„ํ•œ๋‹ค๋Š” ๋œป!
ํ•˜์ง€๋งŒ ์ถ”์ฒœํ•˜์ง€ ์•Š๋Š”๋‹ค.
<์ด์œ : ํƒ€์ž…์œผ๋กœ ์Šคํ”„๋ง ๋นˆ ์ฐพ๊ธฐ์— ์‹คํŒจํ•˜๋ฉด, ๋งค๊ฐœ๋ณ€์ˆ˜๋ช…์œผ๋กœ๋„ ์ฐพ์„ ์ˆ˜๋Š” ์žˆ๋‹ค. ํ•˜์ง€๋งŒ, ์ถ”์ฒœํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋ถˆ๋ช…ํ™•ํ•˜๊ธฐ ๋•Œ๋ฌธ >


๊ทธ๋ ‡๋‹ค๋ฉด ์ด๋ฆ„๊นŒ์ง€ ๊ฐ™๊ฒŒ ๋งŒ๋“ค๋ฉด ์Šคํ”„๋ง์ด ๊ตฌ๋ณ„์„ ์ „ํ˜€ ๋ชปํ•˜๊ฒŒ์ฐŒ~?
์—ญ์‹œ ์—๋Ÿฌ ๋ฐœ์ƒ!!-> ์Šคํ”„๋ง: ์•ผ ๊ฐœ๋ฐœ์ž์•ผ! ๋นˆ์ด 2๊ฐœ์•ผ...๋ญ˜ ๋„ฃ์–ด์ค˜์•ผํ•ด?๋ผ๋Š” ์˜ค๋ฅ˜โ›”๏ธ

ํ•ด๊ฒฐ๋ฐฉ์•ˆ: @Primary

@Primary๋ฅผ ๋น„ํšŒ์›์— ๋‹ฌ์•„์คฌ๋”๋‹ˆ


ํšŒ์›์ž„์—๋„ 0์ด ๋‚˜์˜ค๋„ค,,1์ด ๋‚˜์™€์•ผํ•˜๋Š”๋ฐใ… ใ… ๐Ÿ˜น
๊ทธ๋Ÿผ MemberPolicy ๋„๋Œ€์ฒด ์–ด๋–ป๊ฒŒ ์จ์•ผ ํ• ๊นŒ??

๋ฐฉ๋ฒ•1.

๋ฐฉ๋ฒ•2.@Qulifier ์• ๋…ธํ…Œ์ด์…˜ ์“ฐ๊ธฐ!

๋“œ๋””์–ด ํ•ด๊ฒฐ ์™„๋ฃŒ ๐Ÿ˜


์œ„ ์ฝ”๋“œ๋ฅผ ํ™•์žฅํ•˜๋ฉด์„œ...

๐Ÿšจ๋ฌธ์ œ ์ƒํ™ฉ๋ฐœ์ƒ๐Ÿšจ

  • ํšŒ์›์€ ๊ฐ€๊ฒฉ๊ณผ, ๋“ฑ๊ธ‰์„
  • ๋น„ํšŒ์› ๊ฐ€๊ฒฉ๋งŒ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์—
    ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ถ„๋ฆฌํ•˜๋ ค๊ณ  ํ–ˆ์„๋•Œ...
    discountPolicy๋ฅผ
  1. discount(price): ๋น„ํšŒ์›,
  2. discount(price, level): ํšŒ์› ๋กœ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ํ•˜๋Š”๋ฐ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‚˜์˜ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ถ”์ƒํ™” ์‹คํŒจ

ํ•ด๊ฒฐ๋ฐฉ์•ˆ

    1. ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฆฌ์ŠคํŠธ๋กœ ๋ฐ›์•„์˜ค๋ฉด, [0]: price, [1]: level
    1. level์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์•ˆ๋ฐ›๊ณ  ๋ฉ”์†Œ๋“œ ๋‚ด์—์„œ ํ•ด๊ฒฐํ•˜๊ธฐ
    1. ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ถ„๋ฆฌ? ์–ด๋–ป๊ฒŒ ? ์ƒ์œ„์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค์–ด์ฃผ์–ด ์—ฐ๊ฒฐํ•˜๊ธฐ!

TradeOff

  • ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ฉ”์†Œ๋“œ๋ฅผ ์•ˆ์จ๋„ ํ•˜๋‚˜๋กœ ์“ด๋‹ค๋ฉด? ๋‹คํ˜•์„ฑ์ด ์ข‹์„๋“ฏ, ํ•˜์ง€๋งŒ ISPํฌ๊ธฐํ•ด์•ผํ•œ๋‹ค.
  • ํ•˜์ง€๋งŒ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ถ„๋ฆฌํ•œ๋‹ค๋ฉด? ๋‹คํ˜•์„ฑ์€ ๋–จ์–ด์ง€์ง€๋งŒ, ISP์›์น™์€ ์ง€ํ‚ฌ ์ˆ˜ ์žˆ๋‹ค

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

: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ž์‹ ์ด ์ด์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”์„œ๋“œ์— ์˜์กดํ•˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค๋Š” ์›์น™
(์ปจ๋ฒค์…˜: ์•ฝ์†)

ISP์™€ ๋‹คํ˜•์„ฑ ์‹ค์Šต ๐Ÿงถ

  • BluetoothAISpeaker: volumeUp, heyGoogle();
  • Marshall, JBL, Britz implements BluetoothAISpeake
    - ์žฅ์ ) ํ•˜๋‚˜์˜ ํƒ€์ž…์œผ๋กœ ์—ฌ๋Ÿฌ ๊ตฌํ˜„์ฒด ๋‹ด์•„ "๋‹คํ˜•์„ฑ"
    - ๋‹จ์ ) ํ•„์š”์—†๋Š” ๋ฉ”์†Œ๋“œ๋„ ๊ตฌํ˜„ํ•˜๋Š” ์ฒ™ ํ•ด์•ผํ•จ
  • Speaker/Bluetooth/AI ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ถ„๋ฆฌ
  • Marshall: Speaker, Blutooth, A
  • JBL: Speaker, Blutoot
  • Britz: Speaker
    - ์žฅ์ ) ํ•„์š”ํ•œ ๋ฉ”์†Œ๋“œ๋งŒ ๊ตฌํ˜„
    - ๋‹จ์ ) ํ•˜๋‚˜์˜ ํƒ€์ž…์œผ๋กœ ๋‹ด์„ ์ˆ˜ ์—†๋‹ค. +ํŒ”๋‹ค๋ฆฌ ์ ‘๊ณ  ๋“ค์–ด๊ฐ€์•ผํ•จ...ํ•˜์ง€๋งŒ

์ง„์งœ?!? real? ํŒ”๋‹ค๋ฆฌ๋ฅผ ๋‹ค์‹œ ํŽผ์ˆœ ์—†๋Š”๊ฑฐ์•ผ?

์•„๋‹ˆ์ง€ ์•„๋‹ˆ์ง€

ํ•ด๊ฒฐ๋ฐฉ์•ˆ

[1] ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์˜ค๋ฒ„๋กœ๋”ฉ
[2] ์ƒ์œ„ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค์–ด์„œ, ํŒ”๋‹ค๋ฆฌ ์ ‘์–ด์„œ ๋“ค์–ด๊ฐ„ ๊ตฌํ˜„์ฒด๋ฅผ instancof + ์บ์ŠคํŒ…์„ ํ™œ์šฉํ•˜์—ฌ ํŒ”๋‹ค๋ฆฌ ๋‹ค์‹œ ํ„

package com.example.summer.isp;

interface ABInterface {
    
}

interface AInterface extends ABInterface{
    void methodA();
}

interface BInterface extends ABInterface{
    void methodB();
}

class ImplA implements AInterface{

    @Override
    public void methodA() {
        System.out.println("implA");
    }
}

class ImplB implements BInterface {

    @Override
    public void methodB() {
        System.out.println("implB");
    }
}

public class IspDemo {
    public static void main(String[] args) {
        ispMethod(new ImplA());
        ispMethod(new ImplB());
    }

    public static void ispMethod(ABInterface abInterface) {
        if (abInterface instanceof AInterface)
            ((AInterface) abInterface).methodA();
        else if (abInterface instanceof BInterface)
            ((BInterface) abInterface).methodB();
    }
}

[3] ์ œ๋„ค๋ฆญ ์‚ฌ์šฉ

package com.example.summer.isp;

interface ABInterface {
    
}

interface AInterface extends ABInterface{
    void methodA();
}

interface BInterface extends ABInterface{
    void methodB();
}

class ImplA implements AInterface{

    @Override
    public void methodA() {
        System.out.println("implA");
    }
}

class ImplB implements BInterface {

    @Override
    public void methodB() {
        System.out.println("implB");
    }
}

public class IspDemo {
    public static void main(String[] args) {
        GenericIsp<AInterface> genericIspA = new GenericIsp<>();
        genericIspA.ispMethod(new ImplA());
        
        GenericIsp<BInterface> genericIspB = new GenericIsp<>();
        genericIspB.ispMethod(new ImplB());
    }
}

class GenericIsp<T> {
    public void ispMethod(T abInterface) {
        if (abInterface instanceof AInterface)
            ((AInterface) abInterface).methodA();
        else if (abInterface instanceof BInterface)
            ((BInterface) abInterface).methodB();
    }
}

1๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2024๋…„ 7์›” 30์ผ

๋‹น๊ทผ ์‹œ๋Ÿฌ์š” ๋‹น๊ทผ๋ผํŽ˜ ์ข‹์•„์š”

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ