-
학원 DAY 15. 추상화, 인터페이스, 추상클래스기록 2022. 10. 2. 20:50
<< 추상화 (Abstract) >>
의미 - 구현부가 없는 메소드(추상 메소드)를 정의하는 것.
목적 - 하위 클래스(구현 클래스)들이 반드시 구현할 기능을 추상메소드를 사용해서 추상화한다.
사용법이 동일한 하위 객체를 만들기 위함이다. (메소드 재정의를 강제 시키기 때문)
(* 구현 클래스란? 구현 메소드로 구성된 클래스. 추상화된 메소드를 보유할 수 없다.)
추상화는 공통된 속성과 기능을 모아서 추상클래스나 인터페이스를 정의하는 것이다.
공통 속성은 변수나 상수로 표현하고, 기능은 추상메소드로 표현한다.
<< 인터페이스(Interface) >>
- 추상화의 수단이다.
- 하위 구현클래스에 특정한 메소드가 반드시 존재하도록 강제할 때 사용한다.
- 모든 하위 구현클래스의 사용법을 통일시키는 표준으로 사용된다.
- 하위 구현클래스가 구현할 기능의 사양을 정의한다.
(구현부가 없는 메소드는 반환타입, 메소드명, 매개변수의 종류를 지정한다. <-- 메소드의 사양)
- 하위구현클래스는 인터페이스에 정의된 추상화된 메소드를 반드시 재정의해야한다. (반대로, 상속에서는 메소드 재정의를 하든지 안하든지 상관할 수 없다.)
- 하위구현클래스는 동시에 여러개의 인터페이스를 구현할 수 있다.
- 인터페이스 이름에는 -able이 붙는 경우가 많다.
- 상수와 구현부가 없는 메소드를 포함할 수 있다.(Java 8부터는 구현부가 있는 디폴트 메소드도 포함할 수 있다.)
- new연산자를 사용해서 객체 생성할 수 없다. (객체가 만들어지기는 하지만 내가 new로 만들 수 없음)
- 인터페이스에 정의되는 추상메소드는 접근제한자와 abstract 키워드를 보통 생략한다. (인터페이스에 한해서)
- 인터페이스 간 상속이 가능한데 상속받은 인터페이스가 추상메서드를 구현하는 것이 아니라, 인터페이스를 구현하는 클래스가 추상메서드를 구현해야 하는 것이다.
+ 상속의 목적 : 반복코드 제거, 하위클래스의 빠른 개발, 공통속성과 공통기능의 재사용성 증가, 유지보수성 향상
+ 인터페이스 구현 목적 : 사용방법이 동일한 하위 객체를 만들게 하는 것
=> 객체지향 개발방법(SOLID) 5대 원칙 중 인터페이스 분리 원칙(ISP)
클래스는 자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다는 원리이다.
불필요한 인터페이스를 구현하지 말고, 하나의 인터페이스 안에 너무 많은 기능을 넣어놓지 말 것.
인터페이스를 분리하고 인터페이스 몇 개를 합해서 새로운 인터페이스를 만들 수 있고, 그것을 구현하면 된다.
+ 인터페이스는 표준, 사양으로서 메소드 재정의를 강제하는 역할을 하기도 하지만, 클래스가 무엇을 구현할 수 있는지 알려주는 역할을 하기도 한다.
< 추상클래스 >
- 구현메소드와 추상메소드를 모두 포함할 수 있는 클래스다.
- 일반 구현클래스의 모든 구성요소(멤버변수, 클래스변수, 생성자, 멤버메소드, 클래스메소드)를 포함할 수 있다. (일반클래스와의 차이점 : 일반클래스 구성요소 + 추상메서드도 포함할 수 있다.)
- new연산자를 이용해서 객체 생성할 수 없다. (객체가 만들어지기는 하지만 내가 new로 만들 수 없음)
추상클래스는 추상 메소드가 포함되어 있는 미완성 설계도이기 때문에 객체를 생성할 수 없다.
- 추상클래스는 상속을 통해 하위클래스에 의해서만 완성될 수 있다.
- 클래스 선언부에 abstract 키워드를 포함한다.
- 추상클래스에 정의되는 추상메소드는 반드시 abstract 키워드를 포함해야 한다.
빨간색 박스 안의 내용이 동일하다. 이를 아래와 같이 추상클래스를 통해 이러한 코드 중복을 해결할 수 있다.
추상클래스는 인터페이스와 구현 클래스의 중간이다.
'기록' 카테고리의 다른 글
학원 DAY 17. API, Object, 접근제한자 (0) 2022.10.02 학원 DAY 16. 상속과 구현 (0) 2022.10.02 학원 DAY 14. 메소드 재정의(오버라이딩) (0) 2022.10.02 학원 DAY 14. 강제클래스 형변환 (0) 2022.10.02 학원 DAY 13. 클래스 형변환 (0) 2022.10.02