STUDY/Java

[Java] 인터페이스 (Interface)

ofijwe 2024. 10. 26. 14:43
반응형

📒 abstract class

1️⃣ abstract class 의미

  • 자손 클래스에서 반드시 재정의해서 사용되기 때문에 조상의 구현이 무의미한 메서드
    • 메서드의 선언부만 남기고 구현부는 세미콜론으로 대체
    • 구현부가 없다는 의미로 abstract 키워드를 메서드 선언부에 추가
    • 객체를 생성할 수 없는 클래스라는 의미로 클래스 선언부에 abstract 추가
  • 공통 분모를 뽑아 상속 구조
  • 상속 관계 정의를 통한 클래스 정비
  • 관계를 통한 객체 활용

2️⃣ abstract class 특징

  • abstract 클래스는 상속 전용 클래스
    • 자식은 abstract method 재정의할 책임
    • 클래스에 구현부가 없는 메서드가 있으므로 객체를 생성할 수 X
    • 상위 클래스 타입으로써 자식을 참조 가능
  • 조상 클래스에서 상속받은 abstract 메서드를 재정의 하지 않은 경우
    • 클래스 내부에 abstract 메서드가 있는 상황이므로 자식 클래스는 abstract 클래스로 선언되어야 함.

3️⃣ abstract class 사용 이유

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

📒 interface

1️⃣ 인터페이스 의미

  • 서로 다른 두 시스템, 장치, 소프트웨어 따위를 서로 이어주는 부분, 또는 그런 접속 장치
  • GUI(Graphic User Interface): 프로그램과 사용자 사이의 접점

2️⃣ 인터페이스 작성

  • 인터페이스 작성
    • 최고 수준의 추상화 단계 : 일반 메서드는 모두 abstract 형태
    • 클래스와 유사하게 interface 선언
    • 멤버 구성
      • 모든 멤버변수는 public static final이며, 생략 가능
      • 모든 메서드는 public abstract이며, 생략 가능

3️⃣ 인터페이스 상속

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

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

  • 인터페이스 구현과 객체 참조
    • 클래스에서 implements 키워드를 사용해 interface 구현
    • implements한 클래스는 모든 abstract 메서드를 override해서 구현
      • but, 구현하지 X → abstract 클래스로 표시
    • 여러 개의 interface implements 가능
    • 다형성은 조상 클래스 뿐 아니라 조상 인터페이스에도 적용
    • interface와의 관계도 is a 관계이지만 좀 더 세부적으로 is able to라고 함

📒 interface의 필요성

1️⃣ 인터페이스의 필요성

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

2️⃣ default method

  • 인터페이스에 선언된 구현부가 있는 일반 메서드
    • 메서드 선언부에 default modifier 추가 후 메서드 구현부 작성(public으로 한정됨)
  • 필요성
    • 기존에 interface 기반으로 동작하는 라이브러리의 interface에 추가해야 하는 기능 발생
    • abstract 메서드는 모든 구현체들이 추가되는 메서드를 override 해야 함.
    • default 메서드는 abstract가 아니므로 반드시 구현해야 할 필요는 없어짐.
  • 충돌
    • JDK1.7 이하 → interface method에 구현부가 없으므로 충돌이 없었음
    • JDK1.8 이후 → default method가 생기면서 동일한 이름을 갖는 구현부가 있는 메서드 충돌
    • 우선순위
      • super class의 method 우선 → super class가 구체적인 메서드를 갖는 경우 default method는 무시됨
      • interface간의 충돌 → 하나의 interface에서 default method를 제공하고 다른 interface에서도 같은 이름의 메서드(default 유무와 무관)가 있을 때 sub class는 반드시 override해서 충돌 해결

3️⃣ static method

  • interface에 선언된 static method
    • 일반 static 메서드와 마찬가지로 별도의 객체 필요 X
    • 구현체 클래스 없이 바로 인터펭시ㅡ 이름으로 메서드에 접근해서 사용

4️⃣ private method

  • interface에 body를 가지는 메서드가 등장하면서 공통적으로 처리할 모듈 발생
    • 외부로 공개할 필요 X 메서드 지정을 위해 private method 추가
    • defaul 키워드를 사용하지 않으며 static 처리 가능
반응형