가자미의 개발이야기
인터페이스에 쓰이는 문법과 추상 클래스 본문
a. public
인터페이스 안에 선언되는 추상 메소드는 기본적으로 public이다.
왜냐면 외부 클래스들이 접근해야 하기 때문이다.
interface Printable {
public void print(String doc);
}
b. 상수 선언 가능
인터페이스는 인스턴스를 생성할 수 없기 때문에 인스턴스 변수를 선언할 수 없다.
하지만 상수는 선언 가능하다. 이때 public static final 선언은 기본으로 된다.
interface Printable {
public static final int PAPER_WIDTH=70;
}
c. 추상 메소드 구현
인터페이스에 선언된 추상 메소드는 구현한 모든 클래스 내에서 구현 해줘야 한다.
이를 해결하려면 인터페이스를 상속시켜 새로운 추상 메소드를 추가한 새로운 인터페이스를 활용해야한다.
예를 들어 핸드폰인터페이스는 문자와 전화 메소드가 있다. 이를 통해 다양한 기종을 감당할 수 있지만
핸드폰 인터페이스에 웹서핑 메소드를 추가하는 순간 일부 기종이 웹서핑을 지원하지 않으면서 문제가 생긴다.
이때 핸드폰 인터페이스를 상속한 웹서핑핸드폰 인터페이스를 더 만들어 거기에 웹서핑 추상 메소드를 만들면
전 기종의 핸드폰에서 웹서핑핸드폰 인터페이스를 구현할 수 있게 된다.
#한걸음 더 : 디폴트 메소드
만약 수많은 인터페이스에 추상 메소드를 추가해야되는 경우? 일일히 다 상속 인터페이스를 만들 수는 없다...
그럴땐 인터페이스에 default 메소드를 선언해서 그 기능을 사용해야되는 클래스만 그 안에 오버라이딩으로 메소드를 정의하면 됩니다!
이때 주의할점은 다른 추상메소드와 다르게, 몸통선언을 해줘야된다는점!! { }!!!
d. static 메소드 선언
인터페이스에서도 static 메소드를 선언가능!
인터페이스에서 스태틱 메소드 호출 방법은 default 메소드를 통해 접근!
e. instaceof
인터페이스도 instanceof 연산 가능!
이때 참조변수가 해당 인터페이스를 구현하느냐를 묻는 연산이다.
(직접구현 및 간접구현 모두 true)
f. 빈 인터페이스로 클래스 구분
추상 메소드가 없는 인터페이스를 구현하는 행위로 클래스를 분류할 수 있다.
g. 추상 클래스
추상 메소드를 가지고 있는 클래스를 추상 클래스라고 한다.
이때 클래스와 해당 메소드 모두 abstract를 붙여주고
(인터페이스의 추상메소드는 쓰지 않지만, 추상 클래스의 추상 메소드는 abstract를 반드시 써야한다.)
참조는 가능하지만 인스턴스는 생성 불가능하다.
이런 경우는 이 추상 클래스를 상위 클래스로 냅두고 상속받는 클래스들이 불완전한 추상 메소드를 구현해주기를 바라는 것이다.
결국 추상 메소드는 하위 클래스가 구현해주기를 바라는 것 아닐까?
'Java > 자바 기본 문법' 카테고리의 다른 글
자바 가상머신 (0) | 2021.01.11 |
---|---|
자바의 예외처리 try catch, throw (0) | 2021.01.11 |
자바 인터페이스의 개념과 사용하는 이유 (0) | 2021.01.08 |
자바의 final 선언와 @Override (0) | 2021.01.07 |
자바 상속의 목적 (0) | 2021.01.07 |