인터페이스 작성 및 구현
인터페이스의 멤버들의 제약사항
- 모든 멤버변수는 public static final (상수)이어야 하며, 이를 생략할 수 있다.
- 모든 메서드는 public abstract (추상 메서드)이어야 하며, 이를 생략할 수 있다.
추상클래스와 달리 몸통을 갖춘 일반 메서드 또는 멤버변수를 구성원으로 가질 수 없다.
public interface Movable {
void move(int x, int y); // (1)
}
public class Person implements Movable{
// void move(int x, int y) { // (2)
// }
@Override
public void move(int x, int y) {
}
}
(1) 인터페이스에 생략된 제어자는 컴파일러가 자동적으로 추가해준다. 그래서 실제로는 public void move(int x, int y); 이다
(2) 오버라이딩 할 때는 조상의 메서드보다 넓은 범위의 접근 제어자를 지정해야 하기 때문에 인터페이스를 구현하는 클래스에서는 오버라이딩한 메서드의 접근 제어자를 반드시 public으로 해야한다.
인터페이스를 이용한 다형성
void fly(Movable movable){
}
매개변수 타입이 인터페이스라는 것은 메서드 호출 시 해당 인터페이스를 구현한 클래스의 인스턴스를 매개변수로 제공해야한다는 것이다.
Movable fly(){
Person person = new Person();
return person;
}
리턴타입이 인터페이스라는 것은 메서드가 해당 인터페이스를 구현한 클래스의 인스턴스를 반환한다는 것이다.
인스턴스의 장점
1. 개발 시간을 단축시킬 수 있다.
2. 표준화가 가능하다.
3. 서로 관계없는 클래스들에게 관계를 맺어 줄 수 있다.
4. 독립적인 프로그래밍이 가능하다.
- 클래스와 클래스 간의 직접적인 관계를 인터페이스를 이용해 간접적인 관계로 변경하면, 한 클래스의 변경이 관련된 다른 클래스에 영향을 미치지 않는다.
참고: 자바의 정석 - 남궁성
🤞자바의 정석 스터디 7일차 p375-402🤞
728x90
'JAVA' 카테고리의 다른 글
| [JAVA] ArrayList vs LinkedList (0) | 2022.12.14 |
|---|---|
| [JAVA] Collections Framework 인터페이스 (0) | 2022.12.12 |
| [JAVA] 제어자(modifier)와 다형성(polymorphism) (0) | 2022.12.07 |
| [JAVA] 오버라이딩 (overriding) (0) | 2022.12.03 |
| [JAVA] 생성자와 변수의 초기화 (0) | 2022.12.01 |
댓글