java 추상류와 인터페이스의 차이 상세 해석

abstractclass와interface는 자바 언어에서 추상적인 클래스 정의를 지원하는 두 가지 메커니즘이다. 바로 이 두 가지 메커니즘의 존재로 인해 자바에게 강력한 대상을 향한 능력을 부여했다.abstractclass와interface 사이에는 추상적 클래스 정의에 대한 지원이 매우 유사하고 심지어 서로 바꿀 수 있기 때문에 많은 개발자들이 추상적 클래스 정의를 할 때 abstractclass와interface의 선택에 대해 비교적 자유롭다.사실 둘 사이에는 큰 차이가 있다. 그들의 선택은 심지어 문제 분야의 본질에 대한 이해, 디자인 의도에 대한 이해가 정확하고 합리적인지를 나타낸다.본고는 그들 간의 차이를 분석하여 개발자에게 양자 간에 선택할 근거를 제공하고자 한다.추상류 abstractclass와interface를 이해하는 것은 자바 언어에서 모두 추상류(본고의 추상류는 abstractclass에서 번역된 것이 아니라 추상체를 나타낸다. abstractclass는 자바 언어에서 추상류를 정의하는 데 사용되는 방법이므로 독자가 주의해서 구분하라)를 정의한다. 그러면 추상류가 무엇인지, 추상류를 사용하면 우리에게 어떤 이익을 가져다 줄 수 있을까?대상을 향한 개념에서 우리는 모든 대상이 클래스를 통해 묘사되는 것을 알고 있지만 반대로 그렇지 않다.모든 클래스가 대상을 묘사하는 데 쓰이는 것은 아니다. 만약에 하나의 클래스에 구체적인 대상을 묘사할 충분한 정보가 포함되지 않는다면 이런 클래스는 추상적인 클래스이다.추상류는 흔히 우리가 문제 분야를 분석하고 디자인하는 과정에서 나온 추상적인 개념을 나타내는 데 사용되는데 일련의 보기에는 다르지만 본질적으로 같은 구체적인 개념에 대한 추상이다.예를 들어 만약에 우리가 도형 편집 소프트웨어를 개발하면 문제 영역에 원, 삼각형이라는 구체적인 개념이 존재하고 서로 다른 개념이 존재하지만 모두 형상이라는 개념에 속한다. 형상이라는 개념은 문제 영역에 존재하지 않고 추상적인 개념이다.바로 추상적인 개념이 문제 영역에 대응하는 구체적인 개념이 없기 때문에 추상적인 개념을 나타내는 추상류로는 실례화할 수 없다.대상을 대상으로 하는 분야에서 추상류는 주로 유형을 숨기는 데 쓰인다.우리는 고정된 한 조의 행위에 대한 추상적인 묘사를 구성할 수 있지만, 이 조의 행위는 임의의 구체적인 실현 방식을 가질 수 있다.이 추상적 묘사는 추상류이고 이 그룹의 임의의 구체적인 실현은 모든 가능한 파생류로 나타난다.모듈은 추상체를 조작할 수 있다.모듈은 고정된 추상체에 의존하기 때문에 수정을 허락하지 않을 수 있다.또한 이 추상체에서 파생되는 것을 통해 이 모듈의 행위 기능을 확장할 수 있다.OCP에 익숙한 독자들은 대상을 대상으로 설계하는 가장 핵심적인 원칙인 OCP(Open-Closed Principle)를 실현하기 위해 추상적인 클래스가 관건이라는 것을 반드시 알고 있다.문법 정의 차원에서 볼 때 abstractclass와interface는 문법 차원에서 자바 언어는 abstractclass와interface에 대해 서로 다른 정의 방식을 제시했다. 다음은 데모라는 추상적인 클래스를 정의하는 것을 예로 들어 이런 차이를 설명한다.abstractclass 방식으로 Demo 추상 클래스를 정의하는 방법은 다음과 같습니다
 
abstractclassDemo{
abstractvoidmethod1();
abstractvoidmethod2();


interface Demo :
interfaceDemo{
voidmethod1();
voidmethod2();

}
abstractclass 방식에서 데모는 자신의 데이터 구성원이 있을 수도 있고 abstarct가 아닌 구성원 방법이 있을 수도 있다. 인터페이스 방식의 실현에서 데모는 정적으로 수정할 수 없는 데이터 구성원만 있을 수 있다(즉, staticfinal이어야 하지만 인터페이스에서 일반적으로 데이터 구성원을 정의하지 않는다). 모든 구성원 방법은 abstract이다.어떤 의미에서 말하자면,interface는 특수한 형식의 abstractclass이다.프로그래밍의 측면에서 볼 때 abstractclass와 인터페이스는'designbycontract'사상을 실현하는 데 사용할 수 있다.그러나 구체적인 사용에는 약간의 차이가 있다.우선, abstractclass는 자바 언어에서 일종의 계승 관계를 나타내고 한 종류는 한 번의 계승 관계만 사용할 수 있다.그러나 한 종류는 여러 개의 인터페이스를 실현할 수 있다.아마도 이것은 자바 언어의 디자이너가 자바가 다중 계승에 대한 지원을 고려하는 절충적인 고려일 것이다.그 다음에 abstractclass의 정의에서 우리는 방법의 기본 행위를 부여할 수 있다.그러나 인터페이스의 정의에서 방법은 기본 행위를 가지지 못한다. 이 제한을 피하기 위해서는 의뢰를 사용해야 하지만 복잡성을 증가시켜 큰 문제를 일으킬 수 있다.추상적인 클래스에서 기본 행위를 정의할 수 없는 또 다른 심각한 문제가 존재한다. 그것은 바로 유지보수상의 번거로움을 초래할 수 있다는 것이다.나중에 클래스의 인터페이스(일반적으로 abstractclass 또는 인터페이스를 통해 표시)를 수정하여 새로운 상황에 적응시키려면(예를 들어 새로운 방법을 추가하거나 이미 사용한 방법에 새로운 파라미터를 추가하려면) 매우 번거롭고 많은 시간이 걸릴 수 있기 때문이다.그러나 인터페이스가 abstractclass를 통해 이루어진다면 abstractclass에 정의된 기본 행위만 수정하면 될 수도 있습니다.마찬가지로 추상 클래스에서 기본 행위를 정의하지 못하면 같은 방법으로 이 추상 클래스의 모든 파생 클래스에 나타나고'onerule, oneplace'원칙을 위반하여 코드가 중복되고 이후의 유지보수에 불리하다.따라서 abstractclass와 인터페이스 사이에서 선택할 때 매우 조심해야 한다.디자인 이념 차원에서 볼 때 abstractclass와interface는 주로 문법 정의와 프로그래밍의 측면에서 abstractclass와interface의 차이를 논술했는데 이런 차원의 차이는 비교적 저차원적이고 비본질적이다.이 소절은 또 다른 차원: abstractclass와interface가 반영한 디자인 이념에서 이들의 차이를 분석할 것이다.저자는

좋은 웹페이지 즐겨찾기