ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] ๋””์ž์ธ ํŒจํ„ด(Mediator ํŒจํ„ด)
    Android/Java 2021. 5. 18. 00:14
    ๋ฐ˜์‘ํ˜•

    Mediator ํŒจํ„ด์ด๋ž€?

    • Mediator ๋ง ๊ทธ๋Œ€๋กœ ์ค‘์žฌ์ž๋กœ์„œ, ํด๋ž˜์Šค๊ฐ€ ๋‹ค๋ฅธ ํด๋ž˜์Šค์™€์˜ ์—ฐ๊ฒฐ์„ฑ์„ ์ง์ ‘ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์ค‘์žฌ์ž๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐํ•˜๋Š” ํŒจํ„ด์ž…๋‹ˆ๋‹ค.

    • ํšŒ์‚ฌ์˜ ์ƒ๊ธ‰์ž๊ฐ€ ๋น„์„œ๋ฅผ ํ†ตํ•ด ๋‹ค๋ฅธ ์ง์›๋“ค์—๊ฒŒ ์ƒ๊ธ‰์ž์˜ ์˜๊ฒฌ์„ ๋ชจ๋‘์—๊ฒŒ ์ „๋‹ฌํ•˜๋“ฏ, ํด๋ž˜์Šค๊ฐ€ ์ง์ ‘ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘์—๊ฒŒ ์ผ์ผ์ด ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ Mediator๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋„๋ก ๋งŒ๋“œ๋Š” ํŒจํ„ด์ž…๋‹ˆ๋‹ค.

    • Mediator ํŒจํ„ด์„ ์„ค๋ช…ํ•˜๊ธฐ ์ „์— Mediator ์‚ฌ์šฉํ•˜๊ธฐ ์ „์˜ ์ฝ”๋“œ์˜ ๋ถˆํŽธํ•จ์ ์„ ์•Œ๊ณ  ๋‚˜๋ฉด ๋” ์ดํ•ดํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.


    public interface Subject {
        void isTimetoSubject(String type);
    }

    Subject๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋Š” type์— ํ•ด๋‹นํ•˜๋Š” ๊ณผ๋ชฉ์„ ๋“ฃ๋Š” ์‹œ๊ฐ„์ด ๋งž๋Š”์ง€์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ๊ตฌํ˜„๋˜๋Š” isTimetoSubject ๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋„๋ก ๊ฐ•์ œํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

    public class Math implements Subject{
        @Override
        public void isTimetoSubject(String type) {
            if(type.equals("Math")){
                System.out.println("It's time to study math");
            }else{
                System.out.println("It's not time to study math");
            }
        }
    }
    
    public class Korean implements Subject{
        @Override
        public void isTimetoSubject(String type) {
            if(type.equals("Korean")){
                System.out.println("It's time to study korean");
            }else{
                System.out.println("It's not time to study korean");
            }
        }
    }
    
    public class English implements Subject {
        @Override
        public void isTimetoSubject(String type) {
            if(type.equals("English")){
                System.out.println("It's time to study english");
            }else{
                System.out.println("It's not time to study english");
            }
        }
    }

    ๋‹ค์Œ ํด๋ž˜์Šค๋“ค์€ Subject ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค Math, Korean, English ์ž…๋‹ˆ๋‹ค. ๊ฐ ํด๋ž˜์Šค๋Š” isTimetoSubject ๋ฉ”์†Œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•˜์—ฌ ์ƒˆ๋กญ๊ฒŒ ์ •์˜ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

    public class TimeTable {
        String[] types = {"Korean","Math","English"};
        int idx = 0;
    
        Korean korean = new Korean();
        Math math = new Math();
        English english = new English();
    
        public void onTimetoChange(){
            String type = types[idx];
            korean.isTimetoSubject(type);
            math.isTimetoSubject(type);
            english.isTimetoSubject(type);
            idx = (idx+1)%3;
        }
    }

    TimeTable ํด๋ž˜์Šค์— ์•„๊นŒ ์ƒ์„ฑํ•œ Math, Korean ,English ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•˜์˜€๊ณ , onTimetoChnage ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ํšŸ์ˆ˜์— ๋”ฐ๋ผ idx๊ฐ€ ๋ณ€ํ•˜๊ฒŒ ๋˜๊ณ  ๊ฐ ํด๋ž˜์Šค์˜ isTimetoSubject์˜ ๊ฒฐ๊ณผ๊ฐ’์ด ๋‹ฌ๋ผ์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

    public class Main{
        public static void main(String[] args) {
            TimeTable timeTable = new TimeTable();
            timeTable.onTimetoChange();
            timeTable.onTimetoChange();
            /**
             * It's time to study korean
             * It's not time to study math
             * It's not time to study english
             * 
             * It's not time to study korean
             * It's time to study math
             * It's not time to study english
             */
        }
    }

    ๋‹ค์Œ๊ณผ ๊ฐ™์ด TimeTable์ด ๋ชจ๋“  Subject๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋“ค์„ ์ง์ ‘ ๋ฉค๋ฒ„๋ณ€์ˆ˜๋กœ ์ƒ์„ฑํ•˜์—ฌ ๊ด€๋ฆฌํ•œ๋‹ค๋ฉด ์ƒˆ๋กœ์šด ํด๋ž˜์Šค ์ถ”๊ฐ€๋‚˜ ๊ธฐ๋Šฅ๋“ค์ด ์ถ”๊ฐ€๋  ๊ฒฝ์šฐ ๋ฒˆ๊ฑฐ๋กœ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ TimeTable์€ Math, English, Korean ํด๋ž˜์Šค ๋ชจ๋‘๋ฅผ import ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํด๋ž˜์Šค๋ผ๋ฆฌ์˜ ๊ฒฐํ•ฉ๋„๋„ ๋†’์•„์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด์™€ ๊ฐ™์€ ๊ฒฝ์šฐ Mediator ํŒจํ„ด์„ ์ ์šฉํ•˜๋ฉด ๋ฌธ์ œ์ ์„ ์™„ํ™”์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    Mediator ํŒจํ„ด ์‚ฌ์šฉ

    public class TimeMediator {
        ArrayList<Subject> subjects = new ArrayList<>();
    
        public void addSubject(Subject subject){
            subjects.add(subject);
        }
    
        public void onChangeSubject(String type){
            for(Subject subject : subjects){
                subject.isTimetoSubject(type);
            }
        }
    }
    
    public class TimeTable {
        TimeMediator timeMediator;
        String[] types = {"Korean","Math","English"};
        int idx = 0;
    
        public TimeTable(TimeMediator timeMediator) {
            this.timeMediator = timeMediator;
        }
    
        public void onTimetoChange(){
            timeMediator.onChangeSubject(types[idx]);
            idx = (idx+1) % 3;
        }
    }
    • TimeTable ํด๋ž˜์Šค๋Š” ์•„๊นŒ ์ „์˜ ์˜ˆ์‹œ์™€ ๋‹ค๋ฅด๊ฒŒ Subject๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ TimeMediator ํด๋ž˜์Šค๋ฅผ ๋ฉค๋ฒ„๋ณ€์ˆ˜๋กœ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  onTimetoChange ๋ฉ”์†Œ๋“œ์˜ ์‹คํ–‰์€ TimeMediator์˜ onChangeSubject๊ฐ€ ์‹ค์งˆ์ ์ธ ์—ญํ• ์„ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

    • TimeMediator ํด๋ž˜์Šค๋Š” Subject ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋‹ด๋Š” ArrayList๋ฅผ ๋ฐฐ์—ด๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  addSubject ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด Subject ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋“ค์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • Mediator ํŒจํ„ด์„ ์ ์šฉํ•˜๋ฉด ์ƒˆ๋กœ์šด Subject ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค๊ฐ€ ์ถ”๊ฐ€๋˜๋”๋ผ๋„ ์ „์ฒด์ ์ธ ์ฝ”๋“œ์˜ ๋ณ€ํ™”์—†์ด ์ƒˆ๋กœ์šด ํด๋ž˜์Šค์— ๋Œ€ํ•ด์„œ๋งŒ ๊ตฌํ˜„ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, TimeTable๋Š” ๊ตฌ์ฒด์ ์ธ ํด๋ž˜์Šค์— ๋Œ€ํ•ด์„œ๋Š” ์•Œ์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฐํ•ฉ๋„๋„ ๋‚ฎ์•„์ง„ ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


    ๊ฒฐ๊ณผ

    public class Main{
        public static void main(String[] args) {
            TimeMediator timeMediator = new TimeMediator();
            timeMediator.addSubject(new Math());
            timeMediator.addSubject(new English());
            timeMediator.addSubject(new Korean());
    
            TimeTable timeTable = new TimeTable(timeMediator);
            timeTable.onTimetoChange();
            timeTable.onTimetoChange();
    
            /**
             * It's not time to study math
             * It's not time to study english
             * It's time to study korean
             *
             * It's time to study math
             * It's not time to study english
             * It's not time to study korean
             */
        }
    }
    • ์ถ”๊ฐ€๋กœ ๊ถ๊ธˆํ•œ ์ ์ด๋‚˜ ์ˆ˜์ •ํ•  ๋ถ€๋ถ„ ์žˆ์œผ๋ฉด ๋Œ“๊ธ€๋กœ ๋‚จ๊ฒจ์ฃผ์„ธ์š”
    ๋ฐ˜์‘ํ˜•
Designed by Tistory.