인터페이스
클래스를 이용하여 다중 상속을 할 경우 메소드 출처의 모호성 등 여러가지 문제가 발생할 수 있어 자바에서는 클래스를 통한 다중 상속은 지원하지 않음
- 다른 클래스를 작성할 때 기본이 되는 틀을 제공하면서, 다른 클래스 사이의 중간 매개 역할까지 담당하는 일종의 추상 클래스를 의미함
- 추상 메소드와 상수만을 포함할 수 있음(변수 가질 수 없음)
- 다중 상속 지원
- 모든 메소드는 선언부만 존재
- 구현 클래스는 선언된 모든 메소드를 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 |