008. 인터페이스

Cornchip·2022년 9월 27일
0

bitcamp

목록 보기
8/11
post-thumbnail

목차
1. 필요성
2. 문법
3. 상속과 추상클래스



1. 필요성

1) 기존 방식 : 규격화가 안 된 경우

  • 비슷한 기능을 하는 메서드를 클래스마다 다르게 표현한다.
  • 메서드를 호출할 때마다 확인해야 한다.

  • 메서드 형식
    = method signature
    = function prototype
    • 메서드명
    • 파라미터 선언
    • 리턴 타입
    • 메서드 body는 없다!

2) 개선 방식 : 메서드 호출을 규격화 한 경우

  • 비슷한 목록을 다루는 메서드의 호출 규칙을 정의한다.
  • 규칙에 따라 메서드를 정의한다.
  • 교체하더라도 메서드 규격이 같기 때문에 코드 변경을 최소화할 수 있다.

인터페이스 : 메서드 사용법을 규격화하기


3) 특징

  • interface : 메서드의 사용 규칙
  • concrete : 규칙에 따라 만들어진 클래스
            인터페이스
                |
클래스 >>>>>>>> call >>>>>>>> (인터페이스 규칙이 적용된) 클래스
- caller                                - callee
- client                                - implementer(구현체)

  • 인터페이스에 정의되는 필드는 모두 상수이다.
    = public static final
  • 규칙이라는 것은 모름지기 공포되어야 한다.
    = 인터페이스에 정의되는 함수는 모두 public 이다.
  • 모든 메서드는 abstract 하다.
  • 위 두개는 생략이 가능하다.
    = public abstract


2. 문법

1) default 메서드

  • default method
  • 과거에 작성된 코드에 영향을 주지 않으면서 신규 규칙을 추가할 수 있는 문법

    public void m1() {} 의 형식을 가진다.
    기존형식 : public void m1();

  1. interface에 나중에 새 규칙이 필요해서 메서드를 추가했다.

  2. 새로 만드는 클래스들은 새 규칙에 맞춰서 추가된 메서드를 구현했다.

  3. 예전에 그 규칙을 따라 만든 다른 클래스들은 어떻게 할 것인가?

    모두 새 규칙을 추가로 구현할 것인가?

  4. 예전에 작성한 클래스에서 컴파일 오류가 나지 않도록 interface에서 미리 대충 구현해 둔다.

  5. 신규 프로젝트에서도 추가된 메서드를 구현한다.

  6. 이전 프로젝트 : 예전 프로젝트 소스로 변경될 필요가 없다.

    interface에서 새로 추가한 메서드로 일단 구현된 메서드이기 때문이다.
    추상 메서드가 아니다!

그것을 가능하게 하는게 바로 default method이다.


2) 구현 메서드 : private method 와 static method

  • interface에서 default 메서드에서 구현할 때 쓰기 위해 있는 구현메서드
  • static method
    • 인터페이스에 정의된 static 메서드는 인터페이스를 구현한 클래스를 통해 호출할 수 없다.
    • 또한 구현체의 레퍼런스를 통해서도 구현할 수 없다.

이런식으로 할꺼면 interface로 하지말고 그냥 class로 만드는 것이 더 낫다!



3. 상속과 추상클래스

1) 상속관계

  • 상속관계의 인터페이스들

    수퍼 인터페이스 <- 서브 인터페이스

  • 다중 인터페이스 구현

    두 인터페이스에 정의된 메서드가 중복되더라도 상관없다.
    단, 두 메서드의 signature가 같아야 한다.

  • 인터페이스는 다중상속도 가능하다.

    interface A extends (interface)B, (interface)C OK!

  • 리턴 타입이 다른 중복 메서드(오버로딩이 성립하지 않는 두 메서드)의 존재가 확인될 경우

    다중 상속을 허용하지 않는다!!

  • 이미 구현된 default 메서드를 다중 상속을 통해 중복으로 받아야 할 경우

    다중 상속이 불가능하다.


2) 추상클래스

  • interface를 따르는 abstract class 를 부모 클래스로 두면

    자식 클래스는 원하는 method만 상속받아 오버라이딩 하여 사용할 수 있다.
    = 인터페이스 구현을 간소화할 수 있다.


  • 서브 클래스에서 추상메서드를 구현한다.
  • 서브클래스가 메뉴처리의 세세한 부분을 구체적으로 정의한다.
    • 수퍼클래스에서 실행의 흐름을 정의하고
    • 서브클래스에서 세부적인 작업을 구체적으로 정의한다.
profile
cornchip

0개의 댓글