본문 바로가기

Study

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

 

추상 메소드 (abstract method)

public abstract class 메소드명();

 

- 미완성된 메소드로 몸통부 { }가 구현되어 있지 않은 메소드

 

* 자식 클래스에서 오버라이딩을 통해 완성된다

* 메소드 사용의 통일성을 확보하고 표준화된 틀을 제공할 목적으로 사용한다

 

 

 

추상 클래스 (abstract class)

public abstract class 클래스명 {

}

 

- 미완성된 클래스

일반필드 + 일반메소드 + 추상메소드(생략가능)

 

* 추상메소드가 없어도 추상클래스로 만들 수 있다

- 개념적 : 이 클래스가 미완성된 클래스라는 걸 부여할 목적으로

- 프로그래밍적 : 객체 생성이 불가하게끔 하고자 할 때


* 추상메소드를 포함한 클래스는 반드시 추상클래스로 명시한다

 

* 추상메소드가 존재하는 추상클래스를 쓰는 이유
- 부모클래스에 추상메소드가 존재할 경우

  자식클래스에서 강제로 오버라이딩해서 동일한 패턴의 메소드를 가지게 된다
  각 자식 클래스마다 실행시킬 내용은 다르지만 동일한 형태의 메소드로 구현했으면 할 때
=> 메소드 통일성 확보 목적
=> 표준화된 틀을 제공할 목적

 

* 추상클래스는 미완성 클래스이기 때문에 객체 생성 불가하지만 레퍼런스 변수로는 사용이 가능하다

(다형성 적용시켜서 부모타입으로 자식 객체를 받아주는 형태는 가능)

 

* 추상메소드가 존재하는 추상클래스를 상속받는 순간 부모클래스에 있던 추상메소드를 강제로 오버라이딩해야 됨

 

 

 


인터페이스 (interface) 

only 상수필드 +  only 추상메소드

 

* 인터페이스에서는 public static와 abstract를 작성할 필요가 없다

 

 

extends 일반클래스 -> extends 추상클래스 -> implements 인터페이스
오른쪽으로 갈수록 강제성이 더 짙어짐 ( == 규약이 더 세진다 )