ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Interface
    프로그래밍/Java 2021. 8. 22. 00:46

    인터페이스는 약속된 행위를 하도록 정의 한 후 실제 내부를 어떻게 구현할지는 각 Implements 에 따라 따로따로 만들 수 있게 하는 것이 인터페이스이다. 

     

     

     

    실제 다형성을 구현할 때 인터페이스를 많이 사용하게 된다. 


    Implements 가 많아서 그것을 인터페이스 하나로 정의하여 사용하고 싶거나, 해당 소스코드가 라이브러리가 되어 외부사람한테 제공할 때 유용하게 쓰일 수 있다. 


    (* 다형성 : 실제 오브젝트의 형태는 하나인데, 거기서 함수를 호출했을때 각 구현에 따라 그 행태가 달라지는 것 )

     

     

     

    단점은 코드가 읽기 어려워지고, 디버깅이 어렵다. 


    비지니스 요구가 계속 바뀌는 업종일 경우 인터페이스를 무작위로 추가하게되면 Implements 와 인터페이스 두 개다 계속해서 바꿔야 하는 상황이 와서 불편하다. 특히나 인터페이스와 Implements의 관계가 1 to 1 일 땐 더 더욱 불편하다. 

     

    인터페이스에 대한 설계가 완벽하지 않아서 다른 Implements 를 추가할 때 기존 Implements 와 맞지 않은 상황도 여럿 발생할 수 있다. 

     

    오히려 개발코드 수정과 프로그램 유지보수성이 떨어질 수 있다. 

     

     

     

    일단 Implements 로 구현 후에 인터페이스가 필요할 때 추가하는 것도 방법.


    비지니스 요구가 계속해서 바뀌는 업종이라면 계속해서 소스코드가 바뀔 가능성이 높은데, 그럴려면 읽기 쉽고 디버깅 쉬운게 최고이다.

    정말 필요할 때만 적용하고 그게 아니라면 단순하게 가는것이 옳은 선택이 될 수 있다. 

     

     

     

    Java8 & Interface


    Java8 이전까지는 Interfcae 에서 상수(public static final) 와 추상 메서드 (public abstract) 만 선언이 가능했지만,

    이 후 부터는 default , static method 도 선언할 수 있게 추가되었다.

     

    이를 통하여 interface 에서 메소드 구현이 가능하다. 

     

    default method

    • interface에서도 메소드 구현이 가능하다.
    • 참조 변수로 함수를 호출할 수 있다.
      EX : gil.defaultmethod();
    • implements한 Class에서 재정의가 가능하다.

    static method

    • interface에서 메소드 구현이 가능하다.
    • 반드시 클래스 명으로 메소드를 호출해야 한다.
      EX : Gillog.staticmethod();
    • 재정의가 불가능하다.

    오버라이드 자체가 상위 클래스에 정의된 동일한 메서드에 대해 다른 동작을 하위 클래스에서 재정의 할때 사용되는 건데 static 메서드는 클래스의 인스턴스와 연결되지 않으므로 개념을 적용할 수 없어 재정의가 불가능하다.

     

    추가적으로 자바9 부터는 private method 도 정의할 수 있도록 지원하고 있다. 

     

     

    Script


    인터페이스는 약속된 행위를 하도록 정의한 후 실제 내부를 어떻게 구현할지는 각 Implements 에 따라 따로따로 만들 수 있게 하는 것이 인터페이스이다.

    주로, 다형성을 구현할 때 인터페이스를 많이 사용하며, Implements 들이 많아서 이것을 하나의 규격으로 정의하고 싶을때, 해당 소스코드가 라이브러리가 되어 외부인에게 제공할 때 유용하게 쓰일 수 있다.

    (다형성 : 실제 오브젝트 형태는 하나인데, 함수를 호출 했을때 각 구현에 따라 그 행태가 달라지는것.)

    단점은 코드가 읽기 어려워지고, 디버깅이 어려워질 수 있다. 소스코드를 개발할때 그 구현부까지도 봐야하는 상황들이 종종 있는데 추적을 하려하면 인터페이스 파일을 열어준다거나, 비지니스 요구가 계속해서 바뀌는 업종 혹은 인터페이스 설계가 제대로 되지 않은 경우에는 인터페이스와 그 구현부 모두를 계속해서 수정해야하는 불편함이 있을 수 있다. 

     

    Java8 이전에는 상수의 변수, 추상화 메서드만 정의할 수 있도록 하였다면 이후부터는 default 와 static method 도 정의할수 있도록 지원하며, 구현부까지 작성이 가능해져 인터페이스에서 메서드를 구현하고 impletments 에서 사용할 수 있도록 기능이 추가되었다.

     

    추가적으로 Java9 부터는 private 선언도 가능해졌다.

    '프로그래밍 > Java' 카테고리의 다른 글

    JVM 구조  (0) 2022.04.30
    JDK, JRE, JVM 이해하기  (0) 2022.04.29
    Java 8 Funtional 스터디  (0) 2021.09.23
    Inner class 정리  (1) 2021.09.10
    StringBuilder  (0) 2021.08.21
Designed by Tistory.