ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA] 인터페이스와 추상클래스
    개발/JAVA 2021. 10. 1. 00:16

    1. 인터페이스(interface) 와 추상클래스(abstract class)

    - 인터페이스

    • 상수(static final)와 추상 메서드(abstract method)의 집합.
    • 생성자를 가질 수 없음. 객체화 불가능.
    • 인터페이스에 선언된 상수와 추상 메서드는 public static final  public abstract 를 생략해도 됨. 컴파일시 자동 생성된다.
    • interface를 implements 함으로써 구현체에서 사용 가능.
    • 보통 ~able 로 네이밍함.
    • 다중상속 가능. 
    • 자바8부터 Defulat Method 사용 가능
    • Defulat Method는 interface를 구현한 구현체에서 해당 method를 override 할 필요가 없음. 모두 같은 메소드.
    • interface playable {
        public abstarct void play();
        
        // Default Method
        public default void printAction(String action){
        	System.out.println(action);
        }
      }

     

    - 추상클래스

    • 추상 클래스는 필드, 생성자, 추상메서드를 가질 수 있음.
    • 객체화 가능.
    • 추상 클래스는 추상 메소드를 가지지 않아도 되지만, 추상 메소드가 하나라도 존재하는 클래스는 추상클래스.
    • 다중상속 불가.
    • 추상 클래스는 상속(extends)을 통해서만 사용이 가능하며, 하위 클래스의 생성자에서 super()변수를 사용해서 추상 클래스의 생성자를 부르고 초기화 시킴.
    • public abstract class AbstractClass {
        private String name;
        private String id;
      
        // Constructor 
        public AbstractClass(String name, String id){
          this.name = name;
          this.id = id;
        }
      
        // Abstract Method
        public method() { }
      }
      
      public class RealClass extends AbstractClass {
        private String number;
      
        public RealClass(String name, String id, String number) {
          super(name, id); 
          this.number = number;
        }
      }

     

    2. 인터페이스 vs 추상클래스

    • 추상클래스와 인터페이스는 인스턴스화 하는 것은 불가능하며, 구현부가 있는 메소드와 없는 메소드 모두 가질 수 있다는 점에서 유사하다.
    • 인터페이스에서 모든 변수는 기본적으로 public static final 이며, 모든 메소드는 public abstract 인 반면
      추상클래스에서는 static 이나 final 이 아닌 필드를 지정할 수 있고, public, protected, private 메소드를 가질 수 있다.
    • 인터페이스를 구현하는 어떤 클래스는, 다른 여러개의 인터페이스들을 함께 구현할 수 있다. 추상클래스는 상속을 통해 구현되는데, 자바에서는 다중상속을 지원하지 않으므로 추상클래스를 상속받은 서브클래스는 다른 클래스를 상속받을 수 없다.

    3. 추상클래스, 인터페이스의 적절한 사용 케이스

    - 추상클래스

    • 관련성이 높은 클래스 간에 코드를 공유하고 싶은 경우
    • 추상클래스를 상속받은 클래스들이 공통으로 가지는 메소드와 필드가 많거나, public 이외의 접근제어자(protected, private) 사용이 필요한 경우
    • non-static, non-final 필드 선언이 필요한 경우. 즉, 각 인스턴스에서 state 변경을 위한 메소드를 선언할 수 있다.

    - 인터페이스

    • 서로 관련성이 없는 클래스들이 인터페이스를 구현하게 되는 경우에 사용한다. 예를 들어, Comparable, Cloneable, Runnable 인터페이스는 여러 클래스들에서 구현되는데, 구현클래스들 간에 관련성이 없는 경우가 대부분이다.
    • 특정 데이터 타입의 행동을 명시하고 싶은데, 어디서 그 행동이 구현되는지는 신경쓰지 않는 경우.
    • 다중상속을 허용하고 싶은 경우

    '개발 > JAVA' 카테고리의 다른 글

    [JAVA] Exception  (0) 2021.09.30
    JVM (Java Virtual Machine)  (0) 2021.08.19
Designed by Tistory.