자바에서 다중상속은 인터페이스만 가능합니다. 자바는 클래스를 두 가지 이상 상속하지 못합니다. 그럼 아래 소개될 내용은 인터페이스에 대한 내용이 겠죠. 인터페이스는 일종의 추상클래스이며 클래스처럼 메서드를 가질 수 있지만 기능을 구현할 수 없습니다. 그리고 멤버변수도 가질 수 없으며 상수만 가능합니다.
1. 인터페이스 작성 방법 |
▼ 인터페이스 클래스 작성방식은 아래와 같습니다. 인터페이스에서 포함될수 있는 것들은 상수와 메서드 원형뿐입니다. 그리고 두가지 멤버 변수는 public static final 과 public abstract 이어야 합니다. 보통 생략해서 많이 사용하죠.
interface 인터페이스이름 { public static final 타입 상수이름 = 값; public abstract 메서드이름(매개변수목록); } |
1 2 3 4 5 6 7 8 9 10 | // 실제 예제 interface IBird { public static final int TIGAER = 1 ; final int DOG = 3 ; // public static final int DOG=3; static int RABIT = 2 ; // public static final int RABIT=2; public void eat(); public void travel(); } |
2. 클래스 인터페이스 구현하기 |
▼ 자바 클래스는 부모클래스 하나만 상속할수 있습니다. extends 를 이용한 클래스 상속은 하나만 되고 두개 이상은 인터페이스만 됩니다. 인터페이스를implements 하는 것은 상속이 아니라 구현한다고 해야 합니다. 이렇게 두개 이상의 구현 가능한 인터페이스를 콤마(,) 로 구분해서 추가하시면 됩니다. 아래 소스와 같이 인터페이스에서 구현해야 할 함수는 클래스에서 필히 추가해야 겠죠.
1 2 3 4 5 6 7 8 9 10 11 12 13 | class Animals implements IBird, IFlay { @Override public void eat() { // TODO Auto-generated method stub } @Override public void travel() { // TODO Auto-generated method stub } } |
▼ 이외에 상속과 구현을 동시에 할수도 있습니다. extends 키워드를 이용해 클래스 하나와 implements 로 인터페이스를 하나 이상 추가하는 것이죠.
1 2 3 4 5 6 7 8 9 10 11 12 13 | class Animals extends Unit implements IBird { @Override public void eat() { // TODO Auto-generated method stub } @Override public void travel() { // TODO Auto-generated method stub } } |
3. 인터페이스 확장하는 방법 |
▼ 인터페이스는 인터페이스를 통해서 확장시킬수 있습니다. 추상화를 통해 좀더 상위 개념이 있다면 인터페이스로 하나 뽑아 내고 하위 인터페이스에서 상속 받으시면 아래와 같은 구조가 됩니다. 상속을 위한 키워드는 extends 가 되겠죠. 만약 클래스가 Hockey 인터페이스를 구현할려면 Sports 에 있는 두개의 함수와Hockey 에 있는 4개의 함수를 합쳐 총 6개가 되어야 합니다. Football 은 5개 겠죠. 이렇게 상속받은 상위 인터페이스 항목도 전부 합쳐서 구현해야 합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | interface Sports { public void setHomeTeam(String name); public void setVisitingTeam(String name); } interface Football extends Sports { public void homeTeamScored( int points); public void visitingTeamScored( int points); public void endOfQuarter( int quarter); } interface Hockey extends Sports { public void homeGoalScored(); public void visitingGoalScored(); public void endOfPeriod( int period); public void overtimePeriod( int ot); } |
4. 인터페이스 다중상속 |
▼ 자바 클래스는 하나의 부모 클래스를 상속할수 있지만 인터페이스는 다중 상속이 가능합니다. extends 키워드와 콤마를 이용해서 여러 개 인터페이스를 지정하시면 됩니다.
1 2 3 4 | public interface Animals extends IBird, IFlay { public void go(); public void run(); } |
5. 인터페이스 사용하는 이유 |
▼ 흔히 인터페이스 클래스는 DB 연결에 많이 사용합니다. DB 의 종류는 많습니다. 프로젝트에서 전체 프로그램을 완성해 가는 시점에 MySql 에서 Oracle 로 바뀌었다면 어떻게 해야 할까요? 인터페이스로 구현하지 않았다면 모든 참조 소스는 다 바꿔야 합니다. 하지만 인터페이스를 참조해서 구현했다면 Oracle 연결 클래스만 바꾸면 끝나겠죠. 아래 처럼 소스에서는 IDBConnect.connect() 함수를 사용하겠죠. MySql 에서 Oracle 로 바뀐다면OracleConn 으로 대체 해주시면 간단하게 해결 되겠죠.
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 | interface IDBConnect { public void conncet(); public void open(); public void select(); } class MysqlConn implements IDBConnect { @Override public void conncet() {} @Override public void open() {} @Override public void select() {} } class OracleConn implements IDBConnect { @Override public void conncet() {} @Override public void open() {} @Override public void select() {} } |
'Dev. Java' 카테고리의 다른 글
소스 수정 기본 프로세스 (0) | 2016.04.13 |
---|---|
Java EE와 Java SE의 차이점 (0) | 2016.02.13 |
코딩 잘하는 10가지 방법 (0) | 2015.01.20 |
ArrayList 활용 예제 (0) | 2015.01.18 |
[예외처리] throw / throws , try-catch-finally 예외처리 (0) | 2014.12.31 |