CS/OOP

인터페이스(Interface)와 추상 클래스(abstract class) [JAVA]

장그래 2021. 3. 15. 20:47
반응형

인터페이스(interface)

  • 사전적 정의
    • "서로 다른 두 시스템, 장치, 소프트웨어 따위를 서로 이어 주는 부분. 또는 그런 접속 장치" - 표준국어대사전

자바의 인터페이스

  • 함수를 미리 선언하고 구현은 비워놓은 추상 메소드
  • 함수 선언을 지켜서 구현하라는 약속
  • 인터페이스로 선언된 함수들은 다른 클래스에서 구현됨
    • 인터페이스의 장점 두 가지
      1. 이미 구현된 것들을 교체하기 쉬움
      2. 다중 상속을 해야 하는 경우에 사용 가능
    class 클래스이름 implement 인터페이스 이름
    {
       // 인터페이스에서 선언된 함수 구현 코드
    
      // 나머지 코드
    }
  • 인터페이스는 상속 관계의 부모 클래스와 유사하게 사용 가능
  • 인터페이스를 구현하는 클래스 객체도 인터페이스 변수에 저장하거나 인자로 전달 가능
  • 인터페이스는 부모 클래스인 것처럼 사용되지만, 실제 클래스는 아님
  • 인터페이스만으로 객체 생성 안됨
  • 인터페이스는 최소한의 기능으로 분리시키는 것이 구현클래스를 복잡하게 만들지 않는 설계 방법

다중 상속

  • 자바는 다중 상속을 할 수 없지만 인터페이스를 이용해서 비슷한 효과를 낼 수 있음
class 자식_클래스_이름 extends 부모_클래스_이름 implements 인터페이스_이름1, 인터페이스_이름 {
    // 인터페이스 구현 코드
    // 클래스 구현 코드

}

인터페이스 상속

  • 인터페이스는 다른 인터페이스를 상속할 수 있음
    • 클래스 상속 받는 것처럼 extends 사용
    interface C {
       void c();
    }
    
    interface D extends C {
       void d();
    }
    
  • 클래스에서 상속된 인터페이스를 구현한다면 부모와 자식 인터페이스에 있는 모든 함수를 구현해야함
  • 인터페이스 상속은 일반적이지는 않음

디폴트 메소드(default method)

  • "default"로 시작하는 함수(그 무엇보다 먼저 있어야 함)
  • 인터페이스에 함수 코드를 구현
    interface IAnimal{
        public String getSpecies();
        default public String getSound(){
            return "squeak";
        }
    }
  • 디폴트 메소드는 인터페이스에 새로운 내용이 추가되는 경우 기존에 작성한 인터페이스 구현 클래스를 그대로 사용할 수 이는 호환성을 보장
  • 디폴트 메소드를 이용하면 기존 코드를 수정하지 않고 사용 가능

추상 클래스(abstract class)

  • 추상 클래스는 선언만 하고 구현하지 않은 추상 메소드를 한 개 이상 포함
  • 한 개 이상의 추상 메소드가 존재하면 클래스도 abstract 키워드를 붙여서 선언
  • 추상 메소드와 일반 메소드가 함께 존재 가능

인터페이스 또는 추상 클래스

  • 인터페이스와 추상 클래스는 구현 클래스 또는 자식 클래스가 어떤 형태로 동작해야 하는지를 지정하는 목적으로 사용됨
  • 추상 클래스는 속성을 넣을 수 있음
  • 속성의 필요성을 고민해서 인터페이스와 추상 클래스 중에서 결정

출처 - 상명대 객체지향프로그래밍 강의

반응형

'CS > OOP' 카테고리의 다른 글

[OOP] 좋은 객체 지향 설계의 5가지 원칙이란?(SOLID)  (0) 2021.08.13
상속(inheritance) [JAVA]  (0) 2021.03.15
클래스들의 관계[JAVA]  (0) 2021.03.06
클래스(Class) [JAVA]  (0) 2021.02.24