추상화(Abstraction)
- 기존 클래스들의 공통적인 요소를 뽑아 상위 클래스를 만들어 정의하는 것을 뜻합니다.
- 오브젝트와 관계된 성질이나 특성 중 본질적인 공통점을 찾아 추출하여 개략적으로 작성하고 그 외의 요소는 생략합니다.
- 이후 추상화된 클래스를 상속 받는 클래스에서 생략된 내용을 구체화합니다.
- 이에 따라 추상화된 클래스는 다음과 같은 특징을 갖게 됩니다.
- 상속 계층에서 상위에 위치 할 수록 추상화의 정도가 높고, 아래로 내려갈수록 구체화의 정도가 높아집니다.
- 상층부일수록 공통적인 속성과 기능들이 정의되며, 하층부일 수록 세부적인 속성과 기능들이 정의됩니다.
- 추상화를 사용하는 이유는 아래 3가지로 정리할 수 있습니다.
- 추상화는 시스템 구축 전 아직 만들어지지 않은 시스템의 구조과 구성을 가시적으로 볼 수 있게 만들어 줍니다.
- 완성되지 않아도 미리 구조를 확인할 수 있기 때문에 설계 변경 시 유연하게 대응할 수 있습니다.
- 같은 속성과 기능임에도 다른 변수나 메서드를 사용하는 낭비, 오류를 줄일 수 있습니다.
- 자바에서 추상화를 적용하는 방법은 아래와 같습니다.
- 추상 제어자(abstract)를 클래스, 메서드 앞에 붙여 추상화 되었다는 것을 선언합니다.
- 추상된 클래스의 경우 구체적인 기능이 없기 때문에 인스턴스를 생성할 수 없습니다.
- 추상화된 메서드는 메서드 시그니처(메서드 이름, 매개변수 유형)만 선언합니다.
- 클래스에서 하나라도 추상화된 메서드가 존재한다면 클래스 자체가 추상 클래스로 인식됩니다.
추상 클래스 선언
접근제어자 abstract 클래스이름 {
// 필드
// 컨스트럭터
// 메서드
}
추상메서드 선언
접근제어자 abstract 메서드이름(매개변수, ... );
추상화된 클래스 구성 예시
// 추상 클래스 선언
public abstract class Computer {
// 추상 메서드 선언
// 메서드도 구조는 동일, 내용은 선언하지 않음
// 메서드 바디({ ... })도 생략
public abstract void display();
public abstract void operation();
}
'Programing Language > Java' 카테고리의 다른 글
[Java] 인터페이스의 상속 및 다형화(Interface Inheritance & Polymorphism) (0) | 2022.07.06 |
---|---|
[Java] 추상 제어자와 추상 클래스(Abstract Modifier & Abstract Class) (0) | 2022.07.04 |
[Java] 오버로딩(Overloading) (0) | 2022.07.04 |
[Java] 클래스의 다형화(Polymorphism) (0) | 2022.07.01 |
[Java] 오버라이드(Override) (0) | 2022.07.01 |