2021-01-06
인터페이스는 상속과는 달리 두 가지 인터페이스를 한 개의 클래스 내에 모두 구현할 수 있다. 오늘은 이와 같은 방법을 알아보도록 하자.
우선 아래 예제 인터페이스 두 가지 animal / human을 준비하였다.
package iInterface;
public interface animal {
void species();
void sex();
}
package iInterface;
public interface human {
void name();
void age();
}
큰 특징 없이 각 인터페이스별 추상 메서드를 2개씩 선언해 주었다. 이제 구현 클래스로 가서 구체적인 메서드 코드를 작성해보도록 하자.
package iInterface;
public class integrated implements human, animal {
private String name;
private int age;
private String sex;
private String species;
public integrated(String name, int age, String species, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
this.species = species;
}
//생성자를 통해 각 인간의 정보와 동물의 정보를 부여받는다.
// 휴먼 인터페이스 구현 부분
@Override
public void name() {
System.out.println("저의 이름은 " + name + " 입니다.");
}
@Override
public void age() {
System.out.println("저의 나이는 " + age + " 입니다.");
}
// 동물 인터페이스 구현부분
@Override
public void species() {
System.out.println("이 동물은 " + species + " 입니다.");
}
@Override
public void sex() {
System.out.println("이 동물은 " + sex + " 입니다.");
}
}
클래스 선언부만 조금 다른데 implements뒤에 자신이 구현하고자 하는 인터페이스를 구분자 , 를 통해서 나열하여 코드를 작성해주면 된다. 이후 각 인터페이스별 추상 메서드의 내용을 구현해주면 된다.
(사실 처음에 말했듯이... 그냥 하나의 클래스의 원하는 인터페이스들을 구현해주면 된다.)
이후 메인클래스로 가서 방금 만든 구현 클래스를 실행해보도록 하자.
package iInterface;
public class main {
public static void main(String[] args) {
integrated it = new integrated("king", 25, "Lion", "수컷");
//생성자로 데이터를 입력받는다.
it.name();
it.age();
System.out.println("________________");
System.out.println();
it.species();
it.sex();
}
}
코드를 보면 단 하나의 it라는 객체가 생성된 것을 확인할 수 있으며, 생성자에 animal / human 모두의 매개값이 부여되는 것을 확인할 수 있다. 이후 해당 두 인터페이스를 단 하나의 클래스 변수로 접근할 수 있는 것을 확인 할 수 있으며, 실행시켜 보아도 컴파일 상에 오류없이 정상적으로 콘솔창에 생성자를 통해 입력된 데이터가 출력되는 것을 확인 할 수 있다.