기타/JAVA

[JAVA] 추상클래스 (abstract) / 인터페이스 (interface)

푸쿠이 2018. 7. 8. 20:01

ㅇ 추상클래스 (abstract class)

 
- abstract 클래스
 

1. 일반 클래스에 비해 약간 추상적이다. (일반 메소드 구현 가능)

2. 반드시 하나 이상의 추상 메소드를 가지며, 객체를 생성할 수 없다.

 

- abstract 메소드

 

정의만 되어있다.

 


 

 

- 용도

 

1. 실체 클래스들의 공통된 필드와 메소드의 이름을 통일할 목적

2. 실체 클래스를 작성할 때 시간을 절약: 실체 클래스는 추가적인 필드와 메소드만 선언

3. 실체 클래스 설계 규격을 만들고자 할 때: 필드와 메소드를 미리 정의하고 상속받아 작성

 

 

abstract 클래스를 상속하였으면, 그 클래스는 반드시 해야하는 것이 있다.

abstract 메소드들을 오버라이딩을 해주어야 하는데, 2가지 방법이 있다.

 

1. 하위 클래스를 abstract 로 선언한다.

하위 클래스도 추상클래스로 선언함으로써 반드시 오버라이딩을 하지 않아도 되게 한다.

 

2. abstract 메소드를 하위 클래스에서 오버라이딩한다.

 

 

ㅇ 인터페이스 (interface)

 

- interface 특징

 

1. 인터페이스 내에 존재하는 메소드는 무조건 public abstract 로 선언된다.

abstract 로 고정이기 때문에, 일반 메소드를 구현할 수 없다. 모두 추상 메소드이다.

 

2. 인터페이스 내에 존재하는 변수는 무조건 public static final 로 선언된다.

final 로 고정이기 때문에, 무조건 상수이다.

 

 

- interface는 이렇게도 사용할 수 있다.

 

interface 기반 상수표현 -> 자바의 다수 상수선언 방식이 있다.

public interface Week {
       // 무조건 public static final
       int MON = 1, TUE = 2, WED = 3, THU = 4, FRI = 5, SAT = 6, SUN = 7;
}

이 인터페이스를 implements한 클래스는 MON 이 1로 작동해서 1의 역할을 해줄 수 있다. (직관성?)