ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA] interface(인터페이스) 와 abstract class(추상클래스)
    리뷰노트/Java 2023. 1. 31. 22:47

     자바 공부를 하면 언제나 필수적이고 면접 질문으로 자주 나오는 인터페이스와 추상클래스의 대해서 적어보겠습니다.

     

    추상클래스

    • abstract로 선언된 추상 클래스는 상속을 위한 클래스기 때문에 객체를 생성할 수 없고 상속을 통해 자식 클래스에서 만들어지도록 유도하는 미완성 설계도 라고 할 수 있습니다. 

    또한, 다중 상속을 지원하지 않기 때문에 여러 개의 추상 클래스를 상속 할 수 없습니다.

    abstract class 추상클래스이름 {
        public abstract void 추상메소드이름1();
        public abstract void 추상메소드이름2();
        '''
    }
    • 추상메소드 :  선언부에서 작성되어지고 구현부에서는 작성되지 않은 채로 남겨두는 것이고 상속받는 클래스에 따라서 구현 되는 내용이 달라질 수 있습니다. 

     

    public abstract class AbstractClass {
      // Field
      private String name;
    
      // Constructor 
      public AbstractClass(String name) {
        this.name = name;
      }
    
      // Method
      public void method() { };
    }
    
    public class PersonClass extends AbstractClass {
      private String address;
    
      public PersonClass(String name, String address) {
        super(name); 
        this.address = address;
      }
    }

     

    상속을 통해서 사용하며 자식 클래스의 생성자에서 super()를 사용해서 추상 클래스의 생성자를 호출 및 초기화시킵니다.

     

    인터페이스

    다중 상속(구현) 이 가능하고 상수와 추상메소드의 집합이며 일반 메소드,  일반 멤버 변수를 가질 수 없는 특징이 있습니다. 

    메소드는 public abstract로 선언해야하고 인터페이스는 인스턴스가 존재할 수 없기 때문에 상속받은 구현 객체에서 같은 상태를 보장하기 위해 쓰이기 때문에 멤버변수는 public static final 로 선언합니다. 하지만 컴파일 시 자동으로 생성해 주기 때문에 둘 다 생략 가능합니다.

    interface 인터페이스이름 {
        public abstract void 메소드1(); 
        int 메소드2(); // 컴파일 시 자동 생성으로 public abstract 생략가능
        '''
    }

     

    공통점 

    추상메소드, 인터페이스 둘 다 메소드를 선언만 할 수 있고 구현 내용이 없습니다. 그리고 new를 통해서 객체를 생성할 수 없고 선언된 추상 메소드를 구현 하도록 합니다. 

     

    차이점

    추상메소드는 인터페이스와 다르게 static, final 이 아닌 publiic protected, private 접근 제어자를 사용할 수 있습니다.

    추상클래스는 상속할 객체들의 공통점을 추상화 시켜놓은 것이며, 부모 클래스를 상속하며, 부모 클래스가 가진 기능들을 구현해야하는 경우에 사용됩니다. (부모 기능을 하위로 확장시키는 개념으로 볼 수 있습니다)  

     

    인터페이스는 다른 부모 클래스를 상속하더라도 같은 기능이 필요한 경우 사용됩니다. 그리고 구성된 모든 기능들을 재정의 해야하는 번거로움이 있습니다. 

     

    (자바는 다중 상속을 지원하지 않습니다) 한 개의 클래스만 상속이 가능하기 때문에 클래스의 구분을 추상클래스 상속으로 해결하고 할 수 있는 기능들을 인터페이스로 구현합니다. 

Designed by Tistory.