Programing Language/Java

[Java] 클래스의 추상화(Abstraction)

vinedpillar 2022. 7. 4. 20:48

추상화(Abstraction)

  • 기존 클래스들의 공통적인 요소를 뽑아 상위 클래스를 만들어 정의하는 것을 뜻합니다.

  • 오브젝트와 관계된 성질이나 특성 중 본질적인 공통점을 찾아 추출하여 개략적으로 작성하고 그 외의 요소는 생략합니다.

  • 이후 추상화된 클래스를 상속 받는 클래스에서 생략된 내용을 구체화합니다. 

  • 이에 따라 추상화된 클래스는 다음과 같은 특징을 갖게 됩니다.
    • 상속 계층에서 상위에 위치 할 수록 추상화의 정도가 높고, 아래로 내려갈수록 구체화의 정도가 높아집니다.
    • 상층부일수록 공통적인 속성과 기능들이 정의되며, 하층부일 수록 세부적인 속성과 기능들이 정의됩니다.

  • 추상화를 사용하는 이유는 아래 3가지로 정리할 수 있습니다.
    • 추상화는 시스템 구축 전 아직 만들어지지 않은 시스템의 구조과 구성을 가시적으로 볼 수 있게 만들어 줍니다.
    • 완성되지 않아도 미리 구조를 확인할 수 있기 때문에 설계 변경 시 유연하게 대응할 수 있습니다.
    • 같은 속성과 기능임에도 다른 변수나 메서드를 사용하는 낭비, 오류를 줄일 수 있습니다.

  • 자바에서 추상화를 적용하는 방법은 아래와 같습니다.
    • 추상 제어자(abstract)를 클래스, 메서드 앞에 붙여 추상화 되었다는 것을 선언합니다.
    • 추상된 클래스의 경우 구체적인 기능이 없기 때문에 인스턴스를 생성할 수 없습니다.
    • 추상화된 메서드는 메서드 시그니처(메서드 이름, 매개변수 유형)만 선언합니다.
    • 클래스에서 하나라도 추상화된 메서드가 존재한다면 클래스 자체가 추상 클래스로 인식됩니다.
추상 클래스 선언

접근제어자 abstract 클래스이름 {
    // 필드
    // 컨스트럭터
    // 메서드
}


추상메서드 선언

접근제어자 abstract 메서드이름(매개변수, ... );

 

추상화된 클래스 구성 예시

// 추상 클래스 선언
public abstract class Computer {
    // 추상 메서드 선언 
    // 메서드도 구조는 동일, 내용은 선언하지 않음 
    // 메서드 바디({ ... })도 생략
    public abstract void display();
    public abstract void operation();
}