-
Interface의 개념JAVA/Interface 2020. 10. 11. 00:59
Interface
- 추상 메소드로만 이루어져 있다."{}"가 없다.
- 아래처럼 중괄호가 없고 메소드의 프로토타입만 선언되어 있으면 추상 메소드이다.
예) public abstract void speedDown(int speed);
- 추상메소드를 사용하는 이유는 앞으로 추가되거나 구현되어야하는 기능의 설계 역할을 하며
실제 기능은 구현하지 않고 메소드 프로토타입만 구현하는 것을 말한다.
- 추상 메소드는 건축물에서 구조를 이루는 철근과도 같고 설계도와 같은 역할을 한다.
- 외부에 공개할 메소드를 등록하는 목적으로도 사용된다.
- 하나의 컴포넌트가 다양한 형태로 구현되어야 할 경우 인터페이스를 이용하면 콤포넌트의
사용법이 상당히 단순해진다.
- 인터페이스를 구현한 클래스는 인터페이스 상에 있는 추상 메소드를 전부 구현해야 한다.
- 인터페이스상에 있는 메소드를 하나라도 구현하지 않으면 인터페이스를 상속받은 클래스는
추상클래스가 된다.
- A a_obj = new A(); 인터페이스는 객체를 만들 수 없다. 따라서 반드시 그 인터페이스를
구현한 클래스의 객체를 받아 사용하게 되어 있다.
A memo; // A인터페이스 형 참조 변수 memo 선언
memo = new C1(); // C1은 A라는 인터페이스를 전부 구현한 클래스이다.
- 인터페이스에 선언된 메소드를 호출하면 그 인터페이스를 구현한 클래스의 메소드가
자동으로 호출된다.
- 인터페이스를 이용하면 인터페이스를 구현하는 클래스들은 메소드의 형태가 같기 때문에
같은 메소드명을 이용하면서 다양한 구현을 할 수 있다.
이것은 마치 My-SQL용으로 개발된 프로그램을 Oracle 용으로 변경시에 JDBC 드라이버만
변경하면 프로그램이 작동하는 것과 같은 이치이다.1. Interface의 구현
Inter.java
InterImpl.java
프로그램 실행결과
소스 파일
2 - (1). 인터페이스의 참조
- 인터페이스를 이용하여 메소드만 호출하는 경우는 인터페이스 타입을 그대로 사용한다.
- 각 클래스의 멤버 변수에 접근하는 경우는 그 클래스 타입으로 형 변환을 해주어야 한다.
- 인터페이스에 변수를 선언한다면 주로 상수를 선언한다.
- 메소드만 선언되는 경우가 대부분이다.
- 인터페이스 타입 객체 = new 인터페이스 구현 클래스프로그램 실행결과
소스 파일
2 - (2). 인터페이스의 참조
Myinfointer.java
Myinfo.java
Myinfouse.java
프로그램 실행결과
소스 파일
2 - (2). 인터페이스의 참조
인터페이스에도 abstract를 쓸 수 있지만 안쓰는 것이 일반적이다.
① 직접 객체생성 불가
② 미구현 함수는 모두 구현해야 한다.
③ 구현 함수는 앞에 반드시 퍼블릭 붙인다.인터페이스를 사용하면, 권한 등에 제한을 줄 수 있다.
아래의 예제를 보자.
프로그램 실행결과
소스 코드
더보기// 관리자 인터페이스 interface MainAdmin { public void AdminA(); public void AdminB(); public void AdminC(); public void AdminD(); } interface ASite{public void AdminA();} // A지점 관리자 인터페이스 interface BSite{public void AdminB();} // B지점 관리자 인터페이스 interface CSite{public void AdminC();} // C지점 관리자 인터페이스 interface DSite{public void AdminD();} // D지점 관리자 인터페이스 class ASite1 extends Franchise implements ASite {} class BSite1 extends Franchise implements BSite {} class CSite1 extends Franchise implements CSite {} class DSite1 extends Franchise implements DSite {} class Franchise implements MainAdmin { public void AdminA() { System.out.println("A지점 관리자 입니다."); } public void AdminB() { System.out.println("B지점 관리자 입니다."); } public void AdminC() { System.out.println("C지점 관리자 입니다."); } public void AdminD() { System.out.println("D지점 관리자 입니다."); } } public class AdminInterfaceTest { public static void main(String[] args) { ASite a1 = new ASite1(); a1.AdminA(); //a1.AdminB(); // 호출 불가. 에러 발생 //a1.AdminC(); // 호출 불가. 에러 발생 //a1.AdminD(); // 호출 불가. 에러 발생 } }
'JAVA > Interface' 카테고리의 다른 글
상속을 이용하여 도형의 넓이 구하기 (0) 2020.10.11 익명 (0) 2020.10.11 상속과 다중 인터페이스 (0) 2020.10.11 다중 상속 (0) 2020.10.11