본문 바로가기
Java

[Java] 인터페이스와 default 메서드

by 스응 2023. 2. 13.
728x90
728x90

인터페이스 (Interface)

  - 구현된 것이 아무 것도 없는, 밑그림만 있는 기본 설계도

  - 기능 중심 설계

      : 클래스/프로그램이 제공하는 기능을 명시적으로 선언함

  - 표준

      : 기능을 정의해두면, 어떤 클래스든 가져와서 사용할 수 있음

  - 클라이언트 코드와의 약속 (강제성이 있는 약속)

  - 클래스/프로그램이 제공하는 명세

  - 구현하는 클래스가 어떤 메서드를 반드시 구현해야 하는지를 지시함

      → 모든 클래스는 인터페이스의 모든 메서드를 구현해야 함

  - 추상 클래스보다 추상화 정도가 더 높음 → 더 유연하게 코드 설계 가능

#  인터페이스 정의

  - 인터페이스는 멤버 변수를 가질 수 없고, 상수만을 가질 수 있음

  - 인터페이스는 일반 메서드를 가질 수 없고, 추상 메서드만을 가질 수 있음

      → 'abstract' 키워드를 생략해도 컴파일러가 추상 메서드라고 인지함

#  인터페이스 장점

  1) 다형성

      : 하나의 객체를 그 객체의 클래스 타입으로 볼 수도 있고, 구현된 인터페이스 타입으로 볼 수도 있음

      - 다른 클래스들과의 결합도를 낮추고, 유연성을 높일 수 있음

  2) 다중 상속

      : 기본적으로 Java는 클래스의 다중 상속을 지원하지 않으나, 인터페이스는 여러 개 구현할 수 있음

          → 다중 상속과 유사한 효과를 얻음

  3) 추상화

      : 인터페이스는 구현과는 독립적인 동작 명세를 제공함

          → 시스템의 특정 부분을 구현 세부사항으로부터 분리함

               높은 수준에서 시스템을 이해하고 설계할 수 있음

 

// 인터페이스의 정의

public interface 인터페이스명 {
    public static final 자료형 상수명 = 값;
    public abstract void 메서드명();
    // == public void 메서드명();
}

---------------------------------------------------
// 인터페이스의 구현

public class 클래스명 [extends 부모클래스] implements 인터페이스명1, ... {
    // 인터페이스의 추상 메서드 오버라이드
    @Override
    public void 메서드명(){
        ...
    }
}

#  인터페이스 구현

  - 인터페이스를 구현한 클래스는 업 캐스팅과 다운 캐스팅이 가능함

      · 업 캐스팅 : 인터페이스명 참조변수 = new 클래스명();

      · 다운 캐스팅 : (클래스명) 참조변수

  - 하나의 클래스에 여러 인터페이스를 구현할 수 있음 (콤마로 연결)

#  단일 책임의 원칙

  - 하나의 클래스는 하나의 목적을 위해 설계됨

  - 하나의 인터페이스는 하나의 목적을 위해 설계됨

  ⇒ 내부의 메서드 수가 적을수록 좋음

 

default 메서드

  - 기존에는 인터페이스에 추상 메서드만 정의할 수 있었음

      → 사용하지 않을 메서드도 재정의해야만 함 

      → default 키워드를 추가해서 정의한 메서드는 필요할 때만 가져와서 재정의해도 됨 (구버전에는 X)

  - 후크 메서드와 유사함

      : 구현부는 있지만, 그 안에 실행 코드가 없는 메서드

 

public interface 인터페이스명 {

    // default 메서드
    default public void down() {};

}

 

 


기타 메모

  - DAO (Data Access Object, 데이터 접근 객체)
  - DTO (Data Transfer Object, 데이터 전송 객체)

 

320x100
반응형

'Java' 카테고리의 다른 글

[Java] Object 클래스  (0) 2023.02.14
[Java] 인터페이스 - DAO 구현  (0) 2023.02.13
[Java] String 클래스의 메서드  (0) 2023.02.13
[Java] 배열 - 오름차순 정렬  (0) 2023.02.11
[Java] 추상 클래스  (0) 2023.02.11

댓글