12장 추상 클래스와 인터페이스
12.1 추상클래스 (abstract class)
- 클래스이며 인터페이스일 수는 없다.
- 추상클래스는 class 앞에 abstract가 붙은 class를 의미한다.
- 추상매서드는 추상적인 매서드 즉, 구체적인 정의가 없는 매서드이다. (미완성 매서드 의미)
- 인터페이스는 매서드가 모두 100% 추상매서드 여야한다. 또한 모든 매서드가 static final이여야하고, 접근지정자가 public 이여야한다.
- 일반 클래스는 객체를 생성할 수 있다. (붕어빵 객체 생성 가능)
- 추상 클래스와 인터페이스는 그러나 붕어빵을 생성할 수 없는데 왜 사용할까? 뒤에서 설명함
- 하나도 안가지고 있어도 추상클래스로 정의할 수 있을까? => 정의해도 되고 정의 안해도된다.
- 하지만 멀쩡한 클래스에 abstract 붙일 필요는 없다.
- 완성에서 완성도 가능하나, 미완성된 부모클래스를 자식클래스에서 완성하는 것(구현)도 오버라이딩에 해당한다.
- 완성과 미완성의 구분 => 중괄호의 존재
- 자식 클래스가 반드시 오버라이딩 제대로 했음을 보장할 수 있다.
- 추상클래스는 기계가 아니고 기계부품이기 때문에 기계를 만드는 역할을 한다.
- 방법1은 직접 클래스를 정의 => 객체를 여러개 만들 때는 이 방법이 유리
- 방법2는 익명 클래스로 정의 => 객체를 한번만 쓰고 말 때는 이 방법이 유리
12.2 인터페이스 (interface)
- 추상클래스의 특수한 케이스
- 디폴트 메서드와 static 메서드를 제외하고 모든 메서드는 abstract로 정의해야한다.
- 인터페이스가 맞는다 = 입력 출력이 맞는다. (입력과 출력을 연결하는 고리)
- 미완성에서 완성시키는 의미는 구현하기 (implements) 이다.
- 인터페이스를 상속받는 순간 구현할 것들만 있다.
- 인터페이스는 다중상속이 가능하다. => 모든 필드는 public static final이다. 즉, 사용할 때 A.m / B.m 으로 사용하기 때문에 모호성이 생기지 않는다.
- extends 쓰고 implement를 사용해야한다.
- 클래스가 클래스를 상속받을 때 extends
- 클래스가 인터페이스를 상속받을 때 implements
- 인터페이스가 인터페이스를 상속 받을 때 extends
- 인터페이스가 클래스를 구현하는 것은 성립할 수 없다.
- 인터페이스 모든 메서드 구현할때는 public으로만 선언할 수 있다.
- 다형성이 있기 때문에 인터페이스를 개발한 것이다.
- 디폴트 메서드는 완성된 메서드를 집어 넣겠다는 의미이다.
https://www.youtube.com/@doit4312/playlists
Do it 자바 완전 정복 동영상 강의
Do it 자바 완전 정복 동영상 강의입니다.
www.youtube.com
위 강의를 듣고 작성하였습니다.