아래 코드를 보시고 1, 2번 라인중에 어디서 에러가 날 지를 찾아보세요. interface B { void doB(); } class D implements B { public void doB() {} } interface H { B getB(); } class HImpl implements H { public B getB() { return new D(); // 1) } } ... H h = new HImpl(); D d = h.getB(); // 2) 네, 2번 라인입니다. 그럼 다음 코드는? interface B1 { void doB1(); } interface B2 { void doB2(); } class D implements B1, B2 { public void doB1() {} public void doB2() {} } interface H { <T extends B1 & B2> T getB(); } class HImpl implements H { public <T extends B1 & B2> T getB() { return new D(); // 1) } } ... H h = new HImpl(); D d = h.getB(); // 2) 네, 1번입니다. 잘 이해가 되질 않아 사내 메일링 리스트에 물어보니 I think you're seeing and interpreting it as "this method can return anything that implements both interfaces". What it's actually saying is "the caller is going to tell you a specific class that implements both interfaces, and you must return one of those" . 이랍니다. 즉 T 타입이 아직 결정되지 않은 상태라 D와 T는 compati