본문 바로가기
Spec UP - Backend/나도코딩의 자바기본편

Chap_08. 추상 클래스(AbstractClass)

by TIS_Ha 2023. 5. 10.
반응형

데이터 추상화(Data Abstraction)는 불필요한 정보는 숨기고 꼭 필요한 정보만 공개하는 과정을 말한다.

abstract 키워드를 통해 추상클래스와 추상메소드를 생성할 수 있다.

1) 추상클래스 :  아직 완성되지 않은 클래스이기 때문에 객체로 만들수 없고 클래스를 상속해서 구체적으로 동작을 정의해야만 객체로 만들 수 있다.
2) 추상메소드 : 추상클래스 또는 인터페이스에서 사용가능한 껍데기만 있는 메소드이다.

추상클래스는 아래와 같이 abstract 키워드를 추가하여 생성한다.

public abstract class Camera { ... }

위와 같이 추상클래스 Camera를 생성하고 다른 클래스에서 Camera 객체를 생성하려고 하면 아래와 같이 오류가 발생된다.

추상 클래스는 아직 완성되지 않은 클래스이기 때문에 객체를 생성할 수 없는 것이다.

이를 이용해 Abstract 키워드를 통해 객체를 생성하지 못하도록 막기도한다.


일반적으로는 추상클래스 내에 추상 메소드를 함께 정의한다.

추상 메소드는 아래와 같이 abstract 키워드를 추가하여 선언한다.

public abstract void showMainFeature();

일반 메소드의 경우 메소드를 선언하고 실제 실행할 명령을 입력하지만,

추상 클래스에서 정의하는 추상메소드는 메소드를 선언만 하고 실행할 명령은 입력하지 않는다.

대신 해당 클래스를 상속하는 자식클래스에서 추상 메소드를 구현해야하는 것이다.

 

그래서 FactoryCam 클래스를 생성하여 Camera 클래스를 상속하게되면 아래와 같이 "Implement methods" 메소드를 구현하라는 오류가 발생된다.

위 과정에 따라 자식클래스에서 메소드를 구현하게 되면 자동으로 @override 된 메소드가 생성되며 해당 메소드 내에 실행할 명령을 입력해준다.

위와 같이 Camera 추상 클래스를 상속받는 FactoryCam (화재 감지 카메라), SpeedCam(과속단속 카메라)를 생성하고 추상 메소드를 구현해 주었다.

 


다시 _01_AbstractClass 클래스에서 확인해보면 FactoryCam과 SpeedCam 클래스의 객체를 생성할 수 있는 것을 볼 수 있다.(Camera 클래스는 추상클래스이므로 여전히 객체 생성이 불가하다)

 

데이터 추상화를 위해서 추상 클래스를 만들 수 있으며 추상 클래스는 아래와 같은 특징을 가진다.

  • 추상클래스는 완성되지 않은 클래스이기 때문에 객체를 생성할 수 있다.
  • 추상클래스를 상속한 자식 클래스로는 객체를 생성할 수 있다.
  • 추상클래스는 추상메소드를 가질 수도 있고 가지지 않을 수도 있다.
  • 추상 클래스에 추상메소드가 있다면 자식클래스는 반드시 추상 메소드를 구현해야한다.

 

반응형

댓글