Please Enable JavaScript!
Gon[ Enable JavaScript ]

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

자바(JAVA)

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

 

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

 

1. 인터페이스 작성 방법

 

인터페이스 클래스 작성방식은 아래와 같습니다. 인터페이스에서 포함될수 있는 것들은 상수와 메서드 원형뿐입니다. 그리고 두가지 멤버 변수는 public static final public abstract 이어야 합니다. 보통 생략해서 많이 사용하죠.  

 

interface 인터페이스이름 {

      public static final 타입 상수이름 = ;

      public abstract 메서드이름(매개변수목록);

}


// 실제 예제 
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 하는 것은 상속이 아니라 구현한다고 해야 합니다. 이렇게 두개 이상의 구현 가능한 인터페이스를 콤마(,) 로 구분해서 추가하시면 됩니다. 아래 소스와 같이 인터페이스에서 구현해야 할 함수는 클래스에서 필히 추가해야 겠죠.

 

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 로 인터페이스를 하나 이상 추가하는 것이죠.

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개 겠죠. 이렇게 상속받은 상위 인터페이스 항목도 전부 합쳐서 구현해야 합니다.

 

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 키워드와 콤마를 이용해서 여러 개 인터페이스를 지정하시면 됩니다.

 

public interface Animals extends IBird, IFlay {
	public void go();
	public void run();
}

 

5. 인터페이스 사용하는 이유

 

흔히 인터페이스 클래스는 DB 연결에 많이 사용합니다. DB 의 종류는 많습니다. 프로젝트에서 전체 프로그램을 완성해 가는 시점에 MySql 에서 Oracle 로 바뀌었다면 어떻게 해야 할까요? 인터페이스로 구현하지 않았다면 모든 참조 소스는 다 바꿔야 합니다. 하지만 인터페이스를 참조해서 구현했다면 Oracle 연결 클래스만 바꾸면 끝나겠죠. 아래 처럼 소스에서는 IDBConnect.connect() 함수를 사용하겠죠. MySql 에서 Oracle 로 바뀐다면 OracleConn 으로 대체 해주시면 간단하게 해결 되겠죠.

 

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() {}
}
Posted by 녹두장군

댓글을 달아 주세요