[JAVA] 인터페이스(interface)

2023. 8. 12. 13:29·Programming Language/JAVA
목차
  1. 인터페이스
  2. 사용 이유
  3. 인터페이스의 선언
  4. 인터페이스의 구현

인터페이스

클래스를 이용하여 다중 상속을 할 경우 메소드 출처의 모호성 등 여러가지 문제가 발생할 수 있어 자바에서는 클래스를 통한 다중 상속은 지원하지 않음

  • 다른 클래스를 작성할 때 기본이 되는 틀을 제공하면서, 다른 클래스 사이의 중간 매개 역할까지 담당하는 일종의 추상 클래스를 의미함
  • 추상 메소드와 상수만을 포함할 수 있음(변수 가질 수 없음)
  • 다중 상속 지원
  • 모든 메소드는 선언부만 존재
  • 구현 클래스는 선언된 모든 메소드를 overriding함

사용 이유

ex) 한국인을 위한 번역기를 만들 예정, 그러나 전세계 언어가 너무 많아서 업무를 나눠서 한 친구는 영어 번역 클래스를, 한 친구는 중국어 번역 클래스를 생성하기로 함

결과물 1

/**
* @author 팀원1
*/
public class EnglishTrans {
public String koreanToEnglish(String str) {
//TODO: 한국어를 영어로 번역
}
public String englishToKorean(String str) {
//TODO: 영어를 한국어로 번역
}
}

결과물 2

/**
* @author 팀원2
*/
public class ChineseRendering {
public String translateChinese(String str) {
//TODO: 한국어를 중국어로 번역
}
public String translateKorean(String str) {
//TODO: 중국어를 한국어로 번역
}
}

⇒ 호출 : 메서드명, 클래스명이 다름, 이 클래스들을 사용하면 아래와 같이 코드를 사용할 수 있음

EnglishTrans trans = new EnglishTrans();
String str = trans.koreanToEnglish(str);
// TODO: Business Login
...
ChineseRendering rendering = new ChineseRendering();
String str = rendering.translateChinese(str);
// TODO: Business Login
...

 

⇒ 인터페이스 사용하는 경우

// 공통 사용 인터페이스
public interface Translation {
// 한국어를 번역하다
public String translate(String str);
// 한국어로 번역하다
public String translateInto(String str);
}

결과물 1

**
* @author 팀원1
*/
public class EnglishTranslation implements Translation {
@Override
public String translate(String str) {
//TODO: 한국어를 번역
}
@Override
public String translateInto(String str) {
//TODO: 한국어로 번역
}
}

결과물 2

/**
* @author 팀원2
*/
public class ChineseTranslation implements Translation {
@Override
public String translate(String str) {
//TODO: 한국어를 번역
}
@Override
public String translateInto(String str) {
//TODO: 한국어로 번역
}
}

호출

Translation trans = new EnglishTranslation();
String str = trans.translate(str);
// TODO: Business Login
...
Translation trans = new ChineseTranslation();
String str = trans.translate(str);
// TODO: Business Login
...

 

인터페이스의 선언

  • 접근 제어자와 함께 interface 키워드 사용
  • 인터페이스의 모든 필드는 public static final이어야 함
  • 모든 메소드는 public abstract이어야 함
접근제어자 interface 인터페이스이름 {
public static final 타입 상수이름 = 값;
...
public abstract 메소드이름(매개변수목록);
...
}

 

인터페이스의 구현

  • 자신이 직접 인스턴스 생성 불가
  • class 클래스 이름 implements 인터페이스 이름 { … } 문법을 통해 구현
interface Animal { public abstract void cry(); } // 인터페이스 선언
class Cat implements Animal { // 인터페이스 구현
public void cry() {
System.out.println("냐옹냐옹!");
}
}
class Dog implements Animal { // 인터페이스 구현
public void cry() {
System.out.println("멍멍!");
}
}
public class Polymorphism03 {
public static void main(String[] args) {
Cat c = new Cat();
Dog d = new Dog();
c.cry();
d.cry();
}
}
// 실행 결과
냐옹냐옹!
멍멍!
저작자표시 비영리 변경금지 (새창열림)

'Programming Language > JAVA' 카테고리의 다른 글

[JAVA] Call By Value와 Call By Reference  (0) 2023.08.15
[JAVA] 지역 변수 & 전역 변수 & static(정적) 변수  (0) 2023.08.15
[JAVA] 가비지 컬렉션(Garbage Collection)  (0) 2023.08.01
[JAVA] JVM  (0) 2023.08.01
[JAVA] Stream(스트림)  (0) 2023.07.19
  1. 인터페이스
  2. 사용 이유
  3. 인터페이스의 선언
  4. 인터페이스의 구현
'Programming Language/JAVA' 카테고리의 다른 글
  • [JAVA] Call By Value와 Call By Reference
  • [JAVA] 지역 변수 & 전역 변수 & static(정적) 변수
  • [JAVA] 가비지 컬렉션(Garbage Collection)
  • [JAVA] JVM
woojin._.
woojin._.
여러가지 개발을 해보며 발생하는 이야기들에 대한 블로그입니다:)
  • woojin._.
    Jin's Dev Story
    woojin._.
  • 전체
    오늘
    어제
    • 분류 전체보기 (827)
      • Tools (25)
        • eGovFrame (3)
        • GeoServer (3)
        • QGIS (2)
        • LabelImg (2)
        • Git (6)
        • GitHub (1)
        • Eclipse (7)
        • Visual Studio (1)
      • Web & Android (121)
        • SpringBoot (37)
        • Three.js (2)
        • Spring Data JPA (9)
        • 스프링 부트 쇼핑몰 프로젝트 with JPA (25)
        • Thymeleaf (4)
        • Spring Security (15)
        • Flutter (29)
      • Programming Language (61)
        • JAVA (27)
        • JavaScript (14)
        • Dart (2)
        • Python (15)
        • PHP (3)
      • Database (43)
        • PostgreSQL (32)
        • MYSQL (7)
        • Oracle (3)
        • MSSQL (1)
      • SERVER (17)
        • TCP_IP (3)
        • 리눅스 (7)
        • AWS (7)
      • Coding Test (443)
        • 백준[JAVA] (106)
        • 프로그래머스[JAVA] (260)
        • 알고리즘 고득점 Kit[JAVA] (3)
        • SQL 고득점 Kit[ORACLE] (74)
      • CS 지식 (49)
        • [자료구조] (14)
        • [네트워크] (12)
        • [데이터베이스] (10)
        • [알고리즘] (9)
        • [운영체제] (4)
      • 기타 (6)
      • 자격증 & 공부 (62)
        • 정보처리기사 (2)
        • SQLD (6)
        • 네트워크관리사 2급 (5)
        • 리눅스마스터 1급 (44)
        • 리눅스마스터 2급 (1)
        • ISTQB (3)
        • 시스템보안 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 인기 글

  • 태그

    시큐리티
    baekjoon
    pcce 기출문제
    postgresql
    리눅스
    스프링 부트 쇼핑몰 프로젝트 with JPA
    Linux
    스프링
    Java
    spring
    DB
    backjoon
    CS
    자바
    데이터
    리눅스마스터
    JPA
    리눅스마스터 1급
    Flutter
    Spring Security
    python
    Oracle
    programmers
    플러터
    springboot
    프로그래머스
    백준
    CS지식
    데이터베이스
    스프링부트
  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
woojin._.
[JAVA] 인터페이스(interface)

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.