
class B {
    public void go() {
        System.out.println("B의 go() 함수");
    }
}
class A {
    public void go() {
        new B().go();
    }
}
public class main {
    public static void main(String args[]) {
        new A().go();
    }
}
// B의 g() 함수

class BackendDeveloper {
    public void writeJava() {
        System.out.prinln("Java Server Developer");
    }
}
class FrontendDeveloper {
    public void writeJavascript() {
        System.out.println("React Developer");
    }
}
public class Project {
    private final BackendDeveloper backendDeveloper;
    private final FrontEndDeveloper frontEndDeveloper;
    
    public Project(BackendDeveloper backendDeveloper, FrontEndDeveloper frontEndDeveloper) {
        this.backendDeveloper = backendDeveloper;
        this.frontEndDeveloper = frontEndDeveloper;
    }
    
    public void implement() {
        backendDeveloper.writeJava();
        frontEndDeveloper.writeJavascript();
    }
    public static void main(String args[]) {
        Project a = new Project(new BackendDeveloper(), new FrontEndDeveloper());
        a.implement();
    }
}

interface Developer {
    void develop();
}
class BackendDeveloper implements Developer {
    @Override
    public void develop() {
        writeJava();
    }
    public void writeJava() {
        System.out.println("Java Server Developer");
    }
}
class FrontendDeveloper implements Developer {
    @Override
    public void develop() {
        writeJavascript();
    }
    public void writeJavascript() {
        System.out.println("React Developer");
    }
}
public class Project {
    private final List<Developer> developers;
    
    public Project(List<Developer> developers) {
        this.developers = developers;
    }
    public void implement() {
        developers.forEach(Developer::develop);
    }
    public static void main(String args[]) {
        List<Developer> dev = new ArrayList<>();
        dev.add(new BackendDeveloper());
        dev.add(new FrontendDeveloper());
    
        Project a = new Project(dev);
        a.implement();
    }
}
참고 및 출처 : 인프런 - CS 지식의 정석 | 디자인패턴, 큰돌
https://www.inflearn.com/course/lecture?courseSlug=%EA%B0%9C%EB%B0%9C%EC%9E%90-%EB%A9%B4%EC%A0%91-cs-%ED%8A%B9%EA%B0%95&unitId=118490&tab=curriculum