자바 선배님들, 도와주세요

  • #294669
    후배 144.***.173.68 2574

    한창 자바 공부중인 학생입니다. 요즘 abstract와 interface에 대해서 책을 보던 중, 어떻게 작동하는지는 충분히 이해하겠는데 이게 왜 필요한지 전혀 감이 안 옵니다. 도대체 어디서 어떻게 쓰이는 건가요?? 없으면 할 수 없는 것이라도 있나요??? 도와주세요~~~

    • yjae 68.***.156.149

      OOP개념부터 이해하셔야 할것 같은데요 ^^
      지식인에서 찾아보면 좋은 글 많이 있습니다.
      아니면 아마존에서 OOP 에 관련된 책을 하나…
      절대 가벼운 개념이 아니니까 열심히 공부하세요 ^^

    • yjae 68.***.156.149

      <a href=http://kin.naver.com/popup/print.php?dir_id=10106&docid=923571&status=DB
      target=_blank>http://kin.naver.com/popup/print.php?dir_id=10106&docid=923571&status=DB

      <a href=http://kin.naver.com/popup/print.php?dir_id=10106&docid=10034&status=DB
      target=_blank>http://kin.naver.com/popup/print.php?dir_id=10106&docid=10034&status=DB

      http://kin.naver.com/popup/print.php?dir_id=10106&docid=172495&status=DB

    • 도움이 69.***.32.227

      짤막한 지식이나마.
      제가 볼때 두개의 차이점은 Multiple Inheritence 가 되냐 안돼냐의 차이점 같습니다. Abstract class 는 오직 하나만 Extend 하게 되어있지만, Interface는 여러 클래스를 Implement 할수 있습니다.
      예를 들면,

      abstract class A, abstract class B, interace C, interface D가 있다고 가정하에,

      public class E extends A implements C, D {

      }

      만약에 여기서
      public class F extends A, B implements C, D {

      }
      compiler error 가 납니다.

      왜 이렇게 Java Language 를 디자인 했는지는 까먹었음.

      다른 의견 있으십니까?

    • k 74.***.38.92

      java 가 (class의) multiple inheritance 를 빼버린 것은 diamond problem 이라 불리는 껄끄러운 상황을 피하기 위해서 입니다. (B, C 가 A를 inherit 한 상태에서 D가 B, C 를 같이 inherit 하는 상황. 그림 그려보면 diamond 가 됨. D에서 A의 member를 access 할때 ambiguity 발생)
      사실 OO 개념을 제대로 적용하려면 multiple inheritance 가 가능해야 합니다.(C++은 가능) 그래서 java 는 어정쩡하게 interface 는 여러개 implement 할수 있게 해 놨는데, 여전히 OOD 를 제대로 적용하기는 부족한 듯.. 하여튼, 논란이 많은 부분입니다.

      원글님, interface 는 abstract class 의 특별한 한 형태라고 보면 되고요. abstract class 가 어디서 쓰이냐.. 여러가지 있겠지만, polimorphism 을 제대로 할려면 꼭 써야하겠군요.