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