1.추상 클래스
1. 1추상 클래스란?
- 미완성 설계도. 미완성 메서드를 갖고 있는 클래스
abstract class Player{
abstract void play(int pos);
abstract void stop();
}
1.2 추상메서드
- 미완성 메서드. 구현부가 없는 메서드이다.
- 꼭 필요하지만 자손마다 다르게 구현될 것으로 예상되는 경우 작성한다.
- 강제성을 띄기 때문에 꼭 필요한 메서드만 작성한다.
1.3 추상클래스의 작성
- 여러 클래스에 공통적으로 사용될 수 있는 추상클래스를 바로 작성하거나 기존 클래스의 공통 부분을 뽑아서 추상 클래스를 만든다.
- 기존 클래스의 공통 부분을 뽑아서 추상 클래스를 만들게 되면 추상클래스를 이용해서 더욱 객체 지향적인 사용이 가능해진다.(다형성)
2. 인터페이스
2.1 인터페이스란?
- 추상메서드의 집합이다. 즉 인터페이스는 일종의 추상클래스이다.
- 추상클래스와 달리 몸통을 갖춘 일반 메서드 또는 멤버변수를 구성원으로 가질 수 없다.
- 오직 추상메서드와 상수만을 멤버로가질 수 있다.
- 밑그림만 그려져 있는 “기본 설계도” 라고 할 수 있다.
- 다른 클래스를 작성하는데 도움을 줄 목적으로 작성한다.
2.2 인터페이스의 작성
- 키워드로 class 대신 interface를 사용하는 것 빼곤 class와 다른게 없다.
- 접근제어자로 public 또는 default를 사용할 수있다.
interface 인터페이스이름{
public static final 타입 상수이름 = 값;
public abstrct 메서드이름(매게변수목록);
}
- 모든 멤버변수는 public static final 이어야 하며, 이를 생략할 수 있다.
- 모든 메서드는 public abstract 이어야 하며, 이를 생략할 수 있다.
단, static메서드와 디폴트 메서드는 예외(JDK1.8부터)
- 모든 멤버들에게 적용되는 만큼 생략하여 작성하는 경우가 많다.
- JDK1.8 이후에는 static메서드와 디폴트 메서드의 추가를 허용하는 방향으로 변경되었다.
2.3 인터페이스의 상속
2.4 인터페이스의 구현
- 인터페이스도 그 자체로는 인스턴스를 생성할 수 없다.
- 구현한다는 의미의 키워드
implements
를 사용한다.
class 클래스이름 implements 인터페이스 이름{
}
- 만일 구현하는 인터페이스의 메서드 중 일부만 구현한다면
abstract
를 붙여서 추상클래스로 선언해야한다.
- 상속과 구현을 동시에 할 수도 있다.
2.5 인터페이스의 장점
- 개발시간을 단축시킬 수 있다.
- 표준화가 가능하다.
- 서로 관계없는 클래스들에게 관계를 맺어 줄 수 있다.
- 독립적인 프로그래밍이 가능하다.
2.6 인터페이스의 이해
- 클래스를 사용하는 쪽과 클래스를 제공하는 쪽이있다.
- 메서드를 사용(호출)하는 쪽(User)에서는 사용하려는 메서드의 선언부만 알면된다.(내용은몰라도 된다. )
- 즉 하나의 잘 정리된 명세서가 있다는 것이다.