인터페이스, 추상클래스

hyyyynjn·2021년 5월 15일
0

자바 스터디

목록 보기
12/15
post-thumbnail
  • 인터페이스, 추상클래스의 차이점 설명하기

✋인터페이스

  • 인터페이스 : 자바의 다형성을 극대화하여 개발코드 수정을 줄이고 프로그램 유지보수성을 높이기 위해 인터페이스를 사용한다.
    • 다형성 : public class MyClass extends SuperClass implements MyInterface 처럼 한 개 이상의 자료형 타입을 갖게되는 특성
    • 클래스와 다르게 다중상속이 가능하다
  • 쉽게 말하면 동일한 목적 하에 동일한 기능을 수행하게끔 강제하는 가이드라인이다.
    👉 공통적인 규격(가이드라인)에 맞는 모듈을 개발하면
    클래스 간의 의존관계와 유지보수성의 불편함 줄일수 있고 다형성을 갖추게 된다

인터페이스의 문법

public interface MyInterface {
	
    // 상수
    String myConstant = "value";
    public static final myStaticConstant = "value2";
    
    // abstract 메소드
    (abstarct) void myMethod(String param1, ..);
    
    // default 메소드 (JAVA8에서 가능)
    default String myDefaultMethod(String param1, ..) {
    	...
    }
    
    // static 메소드 (JAVA8에서 가능)
    static void myStaticMethod(String param1,..) {
    	...
    }
}
  • interface 키워드로 선언하고, implements 키워드로 일반 클래스에서 구현한다
  • JAVA8 이전에는 상수, 추상메소드 만 선언 가능했지만 JAVA8 부터 디폴트메소드, 정적메소드 선언도 가능해졌다.
    • 상수: 인터페이스에서 값을 지정한다 (클래스에서 변경 불가능)
    • abstract 메소드 : 인터페이스에서 함수명, 파라미터 타입과 개수, 반환 타입만 지정한다. body는 클래스에서 구현한다
      • implements한 모든 클래스에서 abstract 메소드를 구현하지 않으면 에러가 발생한다.
    • default 메소드 : 인터페이스에서 기본적으로 body까지 지정한다. 클래스에서 오버라이딩하여 다시 재구현 가능하다
      • 구현체에 공통적으로 들어갈 코드를 default 메소드 body에 작성하여 반복되는 코드를 줄인다.
      • 이미 운영되는 시스템에서 추가요건으로 반영해야할 경우 default 메소드를 선택적으로 사용가능하다.
    • static 메소드 : 인터페이스에서 제공한다. (클래스에서 변경 불가능)

✋추상클래스

추상클래스 : 추상 메소드를 선언하여 상속을 통해 자손 클래스에서 완성하도록 유도하는 클래스이다

추상클래스의 문법


public abstract class AbstractClass {
  // 필드
  private String name;
  private String id;

  // 생성자 
  public AbstractClass(String name, String id){
    this.name = name;
    this.id = id;
  }

  // Abstract 메소드
  abstract void MyMethod1();
  abstract void MyMethod2(int param);
  
}

✅ 추상 클래스 상속받기
public class RealClass extends AbstractClass {
  private String number;

  public RealClass(String name, String id, String number) {
    super(name, id); 
    this.number = number;
  }
  
  @Override
  void MyMethod1() {
  	...
  }
  
  @Override
  void MyMethod2(int param) {
  	...
  }
}
  • 상속을 위한 클래스로 new 키워드로 객체를 생성할 수 없다.
  • 추상클래스의 추상메소드는 body 부분이 없는 미완성 메소드이다. 상속받은 클래스에서 구현해야한다.
  • 추상클래스를 상속받은 경우 추상메소드를 반드시 모두 구현해야한다. 하나라도 구현하지 않는다면 상속받은 클래스를 추상클래스로 지정해야한다.
  • abstract 키워드로 선언하고, extends 키워드로 일반 클래스에 상속한다.

✋추상클래스 VS 인터페이스

추상클래스 : IS - A
인터페이스 : HAS - A

  • A,B 클래스에서 공통적으로 필요한 기능있다면 👉 추상클래스 C에서 일반 메소드를 작성하여 자식 클래스에서 사용한다
    • A extends C
      B extends C
  • 자바는 하나의 클래스만 상속 가능하므로 👉 A,B 클래스가 서로다른 추상클래스 C,D를 상속할 때, 공통된 기능이 필요할 경우 인터페이스 E를 implements 한다
    • A extends C implements E
      B extends D implements E

0개의 댓글