# Abstract Class( 추상 클래스 )
- 추상 클래스랑 클래스에 선언에 `abstract` 키워드가 쓰여진 경우
- 추상 메서드를 포함하지 않을수도 있다.
- `abstract` 메서드가 있다면 무조건 `abstract` 클래스로 선언해주어야한다
- 클래스와 동일하게 static, final, protected, private 등 모든 선언이 가능하다.
```java
public abstract class Unit {

    abstract void move():
}

```
- 추상 메서드를 상속받는 클래스들은 abstract 메서드를 모두 구현해야한다.


# Interface ( 인터페이스 )
- 인터페이스는 선언할때 `interface`로 선언한다
- 메서드에는 `public abstract`가 생략된다.
- 인스턴스변수에는 `public static final`이 생략 된다.
- 자바 8부터는 static, default를 통해 메서드를 구현할 수 있다.
- 다중 여러개의 인터페이스를 구현 할 수 있다.
```java
public interface Moveable {

    void move();
}

```


# 차이점
- 사용하는 용도가 다르다
- Interface
    - 특정 클래스의 행동을 알려주고 싶은데, 어떤 식으로 구현이 되는지는 신경쓰지 않는경우
    - 서로 관련성이 없는 클래스들이 비슷한 행동을 사용하는 경우

- abstract class
    - 클래스들 간의 관련성이 높을 때 중복 된 코드를 관리하기 위해
    - 클래스 들의 중복 코드(메서드, 필드) 가 많고 public 이외의 접근제어자 사용이 필요할떄
    - 템플릿 메서드 패턴에서 주로 사용

'Java' 카테고리의 다른 글

Java Default GC(8,11)  (0) 2021.06.22
Java Gc  (0) 2021.06.22
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기