추상화
- 추상화는 인터페이스와 추상클래스를 통해서 할 수 있다.
- 인터페이스와 추상클래스만 구현부가 없는 메소드를 가질 수 있다.
- 추상화는 인터페이스와 추상클래스를 통해 메소드 재정의를 강제한다.
인터페이스
- 구현클래스가 반드시 구현할 기능을 정의할 때 사용한다.
- 동일한 사용법을 가진 구현클래스가 여러개이면 인터페이스를 사용한다.
- 인터페이스는 구현클래스를 구현할 때 표준(기준, 스펙)이 된다.
- 인터페이스에 정의된 구현부가 없는 메소드는 구현클래스에서 기능을 구현할 때(메소드 재정의)
- 구현메소드의 접근제한자, 반환타입, 메소드명, 매개변수의 타입을 어떻게 정의해야 하는지 알려주는 것이다.
- 따라서, 인터페이스에 정의된 구현부가 없는 메소드와 구현클래스의 구현메소드는 메소드 선언부가 같다.
(메소드 선언부가 같다는 것은 사용법이 같아진다는 말과 같다)
- 결국 같은 인터페이스를 구현한 구현클래스들은 구체적인 구현 내용은 다를 수 있지만 사용방법은 완전히 동일하다.
추상클래스
- 구현클래스의 구현부담을 감소시키기 위해서 사용한다.
- 구현클래스에 상관없이 동일한 구현 내용을 가지는 것은 추상클래스에서 구현한 후 상속으로 내려보내고, 구현클래스마다 구체적인 구현내용이 다른 것은 구현부가 없는 메소드 상태로 두면 각각의 구현클래스마다 자신에게 맞게 구현부가 없는 메소드를 재정의하게 한다. (구현 내용이 동일한 기능은 상속받아서 사용하고, 구현 내용이 다른 것만 구현클래스는 구현하면 된다)
- 추상클래스는 인터페이스와 구현클래스를 연결하는 다리 역할을 수행한다.