본문 바로가기

Dev. Java

자바 다중상속 인터페이스 다루는 방법

자바에서 다중상속은 인터페이스만 가능합니다. 자바는 클래스를 두 가지 이상 상속하지 못합니다. 그럼 아래 소개될 내용은 인터페이스에 대한 내용이 겠죠. 인터페이스는 일종의 추상클래스이며 클래스처럼 메서드를 가질 수 있지만 기능을 구현할 수 없습니다. 그리고 멤버변수도 가질 수 없으며 상수만 가능합니다.

 

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() {}
}


[출처] 녹두장군 블로그 http://mainia.tistory.com/2139