Java 개념

상속과 메소드 오버라이딩

ron_nie 2023. 7. 2. 15:28
728x90

1. 상속?

카메라 패키지 안에 클래스를 세개 만들었다.

Camera camera = new Camera();
FactoryCam factoryCam = new FactoryCam();
SpeedCam speedCam = new SpeedCam();

1-1. 왜 상속이 중요한가.

귀찮음을 사라지게 해주는게 가장 크다. 예를들어 위의 세개 클래스에 각각 메소드를 넣어보자

// Camera
public Camera() {
    this("카메라");
}

protected Camera(String name) {
    this.name = name;
}

public void takePicture() {
    // 사진 촬영
    System.out.println(this.name + " : 사진을 촬영합니다.");
}

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

모든 카메라에는 사진촬영 기능과 동영상 녹화 기능이 같이 들어있어야 한다. 하지만 클래스가 1억개라면 이걸 하나하나 적고 있는건 시간낭비 일듯.

그래서 상속이라는 것을 사용한다.

1-2. 상속의 이점

  1. 공통 클래스가 있고 다른 클래스를 추가해야할때
  2. 코드가 짧아짐

1-3. 사용법

자식에게 extends 부모 클래스이름 을 붙여주면 끝이다.

1-4. 코드 관찰

// Camera

public String name;

// 생성자 만들기
public Camera() {
    this("카메라");
}

protected Camera(String name) {
    this.name = name;
}

public void takePicture() {
    // 사진 촬영
    System.out.println(this.name + " : 사진을 촬영합니다.");
}
 public FactoryCam() {
        super("공장 카메라");
    }

    public void recordVideo(){
        // 동영상 녹화
        super.recordVideo();
        detectFire();
    }

    public void detectFire(){
        // 화재 감지
        System.out.println("화재를 감지합니다.");
    }
public SpeedCam() {
        super("과속단속 카메라");
    }

    public void takePicture(){
        // 사진 촬영
        super.takePicture();
        checkSpeed();
        recognizeLicensePlate();
    }

여기서 super은 아직 안배웠기 때문에 신경쓰지말자. 중요한건 사진 촬영과 동영상 녹화를 각각 따로 적어주지 않아도 자동으로 된다는 것이다.

추가적인 기능을 쓰고 싶다면 원하는 기능을 호출하면 된다,.

factoryCam.detectFire();
speedCam.checkSpeed();
speedCam.recognizeLicensePlate();

2. 메소드 오버라이딩

오버라이딩 이라는 것은 엎어쓰기를 의미한다.

2-1. 사용법

원하는 메소드를 자식 메소드에 붙여넣기 하고 내용을 알맞게 변환 하면된다.

2-2. 활용

만약 각각 다른 캠의 기능을 따로 출력하고 싶다면?

// 클래스 호출하기

Camera camera = new Camera();
FactoryCam factoryCam = new FactoryCam();
SpeedCam speedCam = new SpeedCam();
// Camera
public void showMainFeature() {
    System.out.println(this.name + "의 주요 기능 : 사진촬영, 동영상 녹화");
}

// FactoryCam
public void showMainFeature(){
    System.out.println(this.name + "의 주요 기능 : 화재감지");
}

// SpeedCam    
public void showMainFeature() {
    System.out.println(this.name + "의 주요 기능 : 속도 측정, 번호 인식");

}

이렇게 붙여넣기를 통해서 내용만 알맞게 수정하면 된다.

 

반응형