추상화
객체의 공통적인 속성과 기능을 추출하여 정의하는 것
- 기존 클래스들의 공통적인 요소들을 뽑아내서 추상 클래스를 만들어 내는 것
- 기존 객체들의 공통적인 기능들을 뽑아서 인터페이스를 만들어 내는 것
장점
- 코드의 중복을 줄일 수 있다.
- 효과적으로 클래스 간의 관계를 설정할 수 있다.
- 유지/보수가 용이
추상 클래스
-
추상 메서드가 포함되어 있으면, 자동으로 추상 클래스가 된다.
-
추상 클래스에는 변수나 메서드의 선언부만 작성하고, 이를 상속받는 하위 클래스에서 메서드의 구현부를 작성해준다.
=> 오버라이딩
=> 상속받는 하위 클래스에 따라 구현부가 달라지기 때문에, 더욱 유연하게 프로그래밍을 할 수 있다.
-
상속계층도의 상층부에 위치할 수록 추상화 정도가 높고, 아래로 갈수록 구체화된다.
-
상층부에 가까울수록, 더 공통적인 속성과 기능들이 정의되어 있다.
final 제어자
- 필드, 메서드, 지역 변수, 클래스 앞에 붙을 수 있다. => 변경 불가한 성질을 부여
- 클래스 : 변경, 확장, 상속이 불가한 클래스
- 메서드 : 오버라이딩 불가
- 변수 : 변경 불가
인터페이스
-
내부의 모든 필드 변수는 public static final
(상수) 이다.
-
Java 8 이후에 추가된 default/static 메서드를 제외하고는, 내부의 메서드는 public abstract
이다.
-> 인터페이스에 제어자가 항상 내포되어 있기 때문에, 생략해도 상관없다!
-
클래스가 인터페이스를 구현한다 = 인터페이스의 추상 메서드를 반드시 구현하도록 강제한다
-
인터페이스는 다중 구현이 가능하다.
인터페이스 vs 추상 클래스
- 인터페이스가 추상 클래스보다 더 높은 추상성을 가진다.
- 추상 클래스: 추상 메서드를 하나 이상 포함한다는 점 외에는 기본적으로 일반 클래스와 동일하다.
- 인터페이스: 추상 메서드와 상수만을 멤버로 가질 수 있다.
- 존재 목적이 다르다.
- 추상 클래스: 추상 클래스를 상속받아, 확장시키는 것이 목적
- 인터페이스: 추상 메소드의 구현을 강제하여, 인터페이스를 구현한 객체들에게 동일한 동작을 약속하는 것이 목적
[참고]
https://theheydaze.tistory.com/608