Abstract

Leutbing·2023년 7월 29일
0

Abstract

데이터 추상화(Data Abstraction)

굳이 몰라도 되는 디테일한 정보는 숨기고 꼭 필요한 정보만 공개하는 과정이다.

추상 클래스, 인터페이스를 사용하여 데이터 추상화가 가능하다.

Abstract

해당 클래스/메소드가 추상 클래스/추상 메소드임을 명시하는 예약어
추상 클래스 : 아직 완성되지 않은 클래스
추상 메소드 : 추상클래스 또는 인터페이스에서 사용 가능한, 껍데기만 있는 메소드

  • 클래스나 메소드 앞에 abstract를 붙여서 추상 클래스 or 추상 메소드임을 명시
  • abstract는 접근 제어자 앞이나 뒤에 사용할 수 있다.
  • 클래스에 추상 메소드가 포함되어 있는 경우 반드시 클래스에 abstract를 작성해야한다.
  • 추상 클래스는 추상 메소드를 가질 수도 있고 가지지 않을 수도 있다.
  • 추상 클래스는 객체를 생성할 수 없다.
  • 추상 클래스는 상속한 자식 클래스로는 객체를 만드는 것이 가능하다.
  • 추상 메소드가 추상클래스가 있다고 한다면 자식 클래스에서는 추상 메소드를 반드시 구현해야된다.

작성법

// abstract를 접근 제어자 앞에 작성
abstract 접근 제어자 class 클래스명 {
	abstract 접근 제어자 반환형 메소드명();
}

// abstract를 접근 제어자 뒤에 작성
접근 제어자 abstract class 클래스명 {
	접근 제어자 abstract 반환형 메소드명();
}

참고 블로그

ex) 예시 폴더구조

Camera는 추상클래스이고 FactoryCam, SpeedCam은 Camera 추상클래스를 상속 받는다.

// Camera.java

package chap_08.camera;

public abstract class Camera {
    public void takePicture(){
        System.out.println("사진을 촬영합니다.");
    }

    public void recordVideo(){
        System.out.println("동영상을 녹화합니다.");
    }

    //추상 메소드 선언 즉, 구현해야 하는 메소드
    public abstract void showMainFeature();
}
//FactoryCam.java

package chap_08.camera;

public class FactoryCam extends Camera {
    @Override
    public void showMainFeature() {
        System.out.println("화재 감지");
    }
}
//SpeedCam.java

package chap_08.camera;

public class SpeedCam extends Camera{

    @Override
    public void showMainFeature() {
        System.out.println("속도 측정, 번호 인식");
    }
}
package chap_08;

import chap_08.camera.Camera;
import chap_08.camera.FactoryCam;
import chap_08.camera.SpeedCam;

public class _01_AbstractClass {
    public static void main(String[] args) {
//        Camera camera = new Camera(); 카메라는 객체로 만들 수 없다. 추상클래스이기 때문에

//        FactoryCam factoryCam = new FactoryCam();
        Camera factoryCam = new FactoryCam(); //추상 클래스로명으로도 객체 생성 가능
        factoryCam.showMainFeature();

//        SpeedCam speedCam = new SpeedCam();
        Camera speedCam = new SpeedCam();
        speedCam.showMainFeature();

    }
}

0개의 댓글