추상 클래스와 인터페이스

mingggkeee·2022년 1월 24일
0

Java

목록 보기
8/20

추상 클래스

  • 자손 클래스에서 반드시 재정의해서 사용되기 때문에 조상의 구현이 무의미한 메서드
    • 메서드의 선언부만 남기고 구현부는 세미콜론으로 대체
    • 구현부가 없다는 의미로 abstract 키워드를 메서드 선언부에 추가
    • 객체를 생성할 수 없는 클래스이다.
    • ex) abstract class XXX

추상 클래스의 특징

  • abstract 클래스는 상속 전용의 클래스
    • 클래스에 구현부가 없는 메서드가 있으므로 객체 생성할 수 없음
    • 하지만 상위 클래스 타입으로써 자식을 참조할 수는 있다.
  • 조상 클래스에서 상속받은 abstract 메서드를 재정의하지 않는다면 자식 클래스도 abstract 클래스로 선언되어야함.

추상 클래스를 사용하는 이유

  • (메서드)구현의 강제를 통해 프로그램의 안정성 향상
  • interface에 있는 메서드 중 구현할 수 있는 메서드를 구현해 개발의 편의 지원

인터페이스

인터페이스 상속

  • 클래스와 마찬가지로 인터페이스도 extends를 이용해 상속이 가능
  • 클래스와 다른 점은 인터페이스는 다중 상속이 가능
    • 헷갈릴 메서드 구현 자체가 없기때문!

인터페이스 구현과 객체 참조

  • 클래스에서 implements 키워드를 사용해서 interface 구현
  • implements한 클래스는 모든 abstract 메서드를 override해서 구현하거나, 구현하지 않을 경우에는 abstract 클래스로 표시해야함
  • 여러 개의 interface implements 가능
  • 다형성은 조상 클래스 뿐 아니라 조상 인터페이스에도 적용

인터페이스는 왜 필요?

  • 구현의 강제로 표준화 처리 -> 손쉬운 모듈 교체 지원
  • 인터페이스를 통한 간접적인 클래스 사용으로 손쉬운 모듈 교체 지원
  • 서로 상속의 관계가 없는 클래스들에게 인터페이스를 통한 관계 부여로 다형성 확장
  • 모듈 간 독립적 프로그래밍이 가능 -> 개발 기간 단축

서로 상속의 관계가 없는 클래스들에게 인터페이스를 통한 관계 부여로 다형성 확장

default method

  • 인터페이스에 선언 된 구현부가 있는 일반 메서드
    • 메서드 선언부에 default modifier 추가 후 메서드 구현부 작성
      • 접근 제한자는 public으로 한정됨

    • 필요성
      • 기존에 interface 기반으로 동작하는 라이브러리의 interface에 추가해야 하는 기능이 발생
      • 기존 방식으로라면 모든 구현체들이 추가되는 메서드를 override 해야함
      • default 메서드는 absract가 아니므로 반드시 구현 해야 할 필요는 없어짐



  • method 우선 순위
    • super class의 method 우선 : super class가 구체적인 메서드를 갖는 경우 default method는 무시됨
    • interface간의 충돌 : 하나의 interface에서 default method를 제공하고 다른 interface에서도 같은 이름의 메서드(default 유무와 무관)가 있을 때 sub class는 반드시 override해서 충돌 해결..!!

static method

  • interface에 선언된 static method
    • 일반 static 메서드와 마찬가지로 별도의 객체가 필요없음
    • 구현체 클래스 없이 바로 인터페이스 이름으로 메서드에 접근해서 사용 가능하다
profile
만반잘부

0개의 댓글