티스토리 뷰
인터페이스 (interface)
추상을 미완성 설계도라고 본다면 인터페이스는 설계도이며, 보통(?) 다른 클래스를 쓸 때 도움을 주기 위해 사용된다.
모든 멤버변수는 상수와 추상 메서드만 가질 수 있다.
※ jdk1.8 부터 static 메서드와 디폴트(default) 메서드도 가질 수 있게 되었다.
다중 상속이 가능하다.
클래스 작성과 같이 인터페이스 이름 앞에 키워드 'interface'를 작성하면 된다.
interface 인터페이스이름 {
public static final 타입 상수이름 = 값 ; // 상수
public abstract 메서드 이름(매개변수 목록); // 추상메서드이기 때문에 {} 없음
}
인터페이스는 인스턴스 생성이 안되며 implements로 다른 클래스에서 구현한다.
interface 인터페이스이름 {void method(int a);}
class 클래스이름 implements 인터페이스이름 {
}
인터페이스의 장점
개발시간 단축
→ 인터페이스를 먼저 작성하게되면 메서드를 선언부만 알 수 있으면 메서드를 호출하는 쪽에서도 작업이가능하다.
표준화 가능
→ 기본 틀(설계)를 인터페이스로 작성한 다음 인터페이스를 구현하여 프로그램을 작성하도록 하여 일관되고 정형화된 프로그램의 개발이 가능하다.
서로 관계없는 클래스들에게 관계를 맺어 줄 수 있다.
→ 서로 상속관계에 있지도않고, 같은 조상클래스를 가지고 있지 않은 아무런 관계없는 클래스들에게 하나의 인터페이스를 공통적으로 구현하도록 함으로써 관계를 맺어 줄 수 있다.
독립적인 프로그래밍이 가능
→ 클래스의 선언과 구현을 분리시킬 수 있어 실제ㄱ 구현에 독립적인 프로그램을 작성하는 것이 가능하다.
간단한 예제
interface Parseable {
// 추상 메서드 public abstract 생략
void parse(String fileName);
}
class ParserManager {
// 리턴타입이 Parseable 인터페이스이다.
// getParser 메서드는 main 클래스에 보면 있다. !!
public static Parseable getParser(String type){
// 매개변수 type의 값에 따라 반환타입이 다름
if (type.equals("XML")) {
return new XMLparser();
} else {
Parseable p = new HTMLparser();
return p;
// 위 두줄을 줄이면 return new HTMLparser();
}
}
}
// XMLparser와 HTMLparser 클래스에서 인터페이스 Parseable 구현 (메서드 내용 구현)
class XMLparser implements Parseable {
public void parse(String fileName) {
System.out.println(fileName + "XML parsing completed.");
}
}
class HTMLparser implements Parseable {
public void parse(String fileName) {
System.out.println(fileName + "HTML parsing completed.");
}
}
class ParseableRest {
public static void main(String[] args) {
Parseable parser = ParserManager.getParser("XML");
parser.parse("docment.xml");
parser = ParserManager.getParser("HTML");
parser.parse("docment2.html");
}
}
/* 실행 결과
docment.xmlXML parsing completed.
docment2.htmlHTML parsing completed.
*/
'study > Java' 카테고리의 다른 글
람다 (Lambda) (0) | 2023.02.03 |
---|---|
쓰레드 (Thread) (0) | 2023.01.02 |
추상 클래스 & 메서드 (0) | 2022.12.22 |
제어자 (modifier) (0) | 2022.12.20 |
오버라이딩 (overriding) (0) | 2022.12.17 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 배열
- django-environ
- git공부
- django.contrib.auth
- git 공부
- 한글 형태소 분석기
- git
- django
- 웹페이지
- Django tutorial
- 회원가입
- 면접을 위한 CS 전공 지식 노트
- Java
- 혼자 공부하는 파이썬
- 커맨드 객체
- musma
- Magazine K
- Python
- 검색 결과 내 페이지네이션
- 암호화
- 디자인 패턴
- authenticate()
- 환경 변수 설정
- error: failed to push some refs to 'https://github.com/
- 톰캣
- 회원 로그인
- API
- Spring
- python3
- path variable
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함