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

2023. 2. 13. 23:20·Java/Base
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 > Base' 카테고리의 다른 글

[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
'Java/Base' 카테고리의 다른 글
  • [Java] Object 클래스
  • [Java] 인터페이스 - DAO 구현
  • [Java] String 클래스의 메서드
  • [Java] 배열 - 오름차순 정렬
스응
스응
    반응형
    250x250
  • 스응
    이서영의 개발 블로그
    스응
  • 전체
    오늘
    어제
  • 글쓰기 관리
    • 분류 전체보기 (383)
      • Java (134)
        • Base (54)
        • Spring Boot (37)
        • JSP (16)
        • Swing (GUI) (20)
        • Design Pattern (7)
      • C# (13)
      • PHP (18)
      • SQL (27)
      • Vue.js (10)
      • Tailwind CSS (4)
      • TypeScript (7)
      • HTML & CSS (27)
      • JavaScript (26)
      • jQuery (10)
      • Android (3)
      • - - - - - - - - - - - - - - (0)
      • Hotkeys (5)
      • CS (30)
      • etc. (13)
      • Error Note (14)
      • Team Project (24)
        • Airlines Web Project (12)
        • University Web Project (6)
        • Strikers 1945 GUI Project (6)
      • My Project (18)
        • Library Web Project (8)
        • Pet Shopping Mall GUI Project (10)
  • 블로그 메뉴

    • Home
    • Write
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    git
    SEO
    Android
    C#
    http
    tailwindcss
    java
    개발일지
    CSS
    jQuery
    면접
    SQL
    vuejs
    zapier
    php
    Wordpress
    오블완
    cs
    HTML
    티스토리챌린지
    Hotkeys
    SpringBoot
    jsp
    js
    typeScript
    errorNote
    Codeigniter
    Swing
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
스응
[Java] 인터페이스와 default 메서드
상단으로

티스토리툴바