인터페이스
# 클래스와 인터페이스의 관계
우리가 어플, 게임, 전화, 문자 등의 기능이 있는 스마트폰을 갖고있는데,
부모님에게 전화기라고 소개를 하게되면, 부모님은 전화기로만 그 스마트폰을 이용하게되고
꼬맹이에게 게임기라고 소개하게되면, 꼬맹이는 누군가한테 실수로 전화&문자할 일 없이, 게임기만을 이용하게 된다.
여기서 스마트폰은 클래스이고, 전화기, 게임기는 인터페이스라고 생각하면된다.
한 인스턴스가 게임기만을 쓰고자 할때는, 그 게임기 인터페이스를 타입으로 지정하면 되는 것이다. (이럴때 그 인스턴스는 다른 기능의 메서드에 접근하지 못한다.)
# implement : 구현하다
변수의 타입으로 인터페이스를 지정하면, 그 인터페이스를 구현하는 클래스를 대입할 수 있다.
이제 세가지 상황을 코드로 봐볼 것이다.
1. 기본
2. 한 클래스가 두 인터페이스를 구현하는 경우
3. 다양한 인터페이스, 다양한 클래스가 있는 경우
1. 기본
interface I{}
class C implements I {} // 클래스 C가 인터페이스 I를 구현하고 있다.
public class Main {
public static void main(String[] args) {
I obj = new C(); // 변수의 타입이 I인 변수에 C 클래스를 인스턴스화해서 담을 수 있다.
}
}
이렇게 되면 인터페이스 I의 메서드들을 obj가 쓸 수 있게 된다.
2. 이번에는 한 클래스가 두 인터페이스를 구현하는 경우를 봐보자.
interface I2 {
public String A(); //인터페이스 I2는 메서드A()의 정의를 강제.
}
interface I3 {
public String B(); //인터페이스 I3는 메서드B()의 정의를 강제.
}
class D implements I2,I3 { //클래스의 데이터 타입으로 어떤 인터페이스를 사용한다는 것은 그 클래스가 인터페이스에서 정의한 멤버들만을 사용할수있다는것을 정의.
public String A() { //구현.
return "A";
}
public String B() { //구현.
return "B";
}
}
public class Main {
public static void main(String[] args) {
D obj = new D();
I2 objI2 = new D(); //클래스 D의 인스턴스 objI2는 마치 자기가 인터페이스 I2인 것처럼 행세중.
I3 objI3 = new D(); //클래스 D에서 인터페이스 I3이 갖고있는 메서드만 쓰려고 하려한다면 이렇게 인스턴스변수를 선언하는게 좋아.
obj.A(); //obj는 데이터 타입이 D기 때문에 D가 정의하고있는 모든 메서드 접근 가능
obj.B();
objI2.A(); //objI2.B(); 데이터 타입이 I2이기 때문에 마치 메서드 A()만을 가지고있는 것처럼 동작하게됨.
objI3.B(); //objI3.A(); 데이터 타입이 I3이기 때문에 메서드A()에는 접근하지 못하는 것이다.
}
}
3. 마지막으로 다양한 인터페이스, 다양한 클래스가 있는 경우를 봐보겠다.
가정에선 아빠이고, 직업은 프로그래머이며, 신도인 Steve가 있고
가정에서 엄마이고, 직업은 프로그래머인 Rachel이 있다.
workspace에서는 Steve와 Rachel의 다른 면은 필요치않고 프로그래머의 기능만 보게 된다.
만약 Steve가 coding을 하게되면 빠르게 한다는 "fast"를 출력하게되고
만약 Rachel이 coding을 하게되면 우아하게 한다는 "elegance"를 출력하게 된다.
interface father{}
interface mother{}
interface programmer{
public void coding();
}
interface believer{}
class Steve implements father, programmer, believer{
public void coding() {
System.out.println("fast");
}
}
class Rachel implements mother, programmer{
public void coding() {
System.out.println("elegance");
}
}
public class workspace{
public static void main(string[] args) {
programmer employee1 = new Steve();
programmer employee2 = new Rachel();
employee1.coding();
employee2.coding();
//같은 coding()메서드를 호출하지만 객체에 따라 다른 형태로 결과가 도출되는 것이 다형성이라는 것.
}
}
'언어 > Java' 카테고리의 다른 글
기초 #8. 인터페이스 (+익명 구현 객체) (0) | 2020.08.31 |
---|---|
기초 #7. 중첩 클래스(인스턴스 멤버 클래스, 정적 멤버 클래스, 로컬 클래스) (0) | 2020.08.30 |
기초 #5. 추상클래스 (ex. 계산기 프로그램) (0) | 2020.08.22 |
기초 #4. 상속과 다형성 (0) | 2020.08.21 |
기초실습 #2. 학생 점수 프로그램, 차량 관리 프로그램 (0) | 2020.08.16 |