최하급개발자
136
2019-06-19 12:02:43
5
348

JAVA 경우에따른 인스턴스 생성


아래의 그림에서 Alphabat 객체를 생성할 때,  경우에따라 A, B, C로 전달될 수 있는 형태를 만들고싶어요.




Alphabat alphabat = new Alphabat("a")

과같이 인스턴스를 만들고.


Client에서는 매개변수만 던져서 Alphabat 인스턴스를 통해 A 인스턴스를 만들게요.


원래의 형태를 아래와 같은데 이 구현을 Alphabat에서 하고싶은 의도에요.


String word = "a";

if(word == "a"){
A a = new A();
}else if(word == "b"){
B b = new B();
}else(word == "c"){
C c = new C();
}


근데 이걸 Alphabat alphabat = new Alphabat("a");

alphabat.a1Method();

이런식으로 alphabat으로 A Class의 메서드에 접근하고싶은거죠...


그런데 무얼 공부해야 이정보를 얻을 수 있는지 모르겠어요.

0
0
  • 답변 5

  • 제르맹
    315
    2019-06-19 12:16:29 작성 2019-06-19 12:43:38 수정됨

      https://www.tutorialspoint.com/design_pattern/factory_pattern.htm

    팩토리패턴을 사용하면 팩토리객체에 매개변수를 전달하여 원하는 객체의 인스턴스를 얻을 수는 있는데

    alphabat.a1Method(); 과 같은 접근은 안돼요.


    어떤 로직을 설계중이신지는 모르겠지만 동적으로 alphabat변수에 인스턴스를 할당한 후 

    이 인스턴스의 메소드를 실행하는게 목표라면


    public class Alphabet{
        public void a1(){}
    }
    
    public class A extends Alphabet {
        public void a1(){}
    }
    
    public class AlphabetFactory {
          public static Alphabet create(String type){
               if(type.equals("a")) return new A();
                return null;
          }
    }
    
    Alphabet alphabet = AlphabetFactory.create("a");
    alphabet.a1();


    이런 식은 어떠신가요?



    0
  • 최하급개발자
    136
    2019-06-19 12:32:33

    한가지 더 추가적으로 질문드려도될까요?

    많이 부족하네요...


    A 클래스가 이미 다른 부모클래스를 extends하고있는데,

    그럴떈 Interface를 사용해서 구현을해야하는건가요?

    그렇다면 어떻게 구현해야하는건가요?

    0
  • 최하급개발자
    136
    2019-06-19 12:33:43

    너무 질문이 포괄적인가요?

    0
  • 제르맹
    315
    2019-06-19 12:45:08

    최하급개발자

    A뿐만 아니라 B,C 또한 같은 부모클래스로부터 상속받았다면 Alphabet을 해당 부모클래스로 대체하면 되지만

    질문하신걸로 보아 그런경우가 아닌것 같군요.

    말씀하신대로 interface를 새로 정의하여 메소드를 정의해두고 A,B,C 클래스들에서 해당 interface를 구현하도록 하고 팩토리도 해당 interface팩토리로 작성해야겠죠



    1
  • 최하급개발자
    136
    2019-06-19 12:47:23

    좋은 답변된 것 같습니다. 감사합니다.

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.