본문 바로가기
TIL

내일배움캠프 10주차 Java 상속

by 율량동박씨 2024. 6. 20.

오늘의 키워드

  • 상속
  • 객체지향기법
  • 부모클래스
  • 자식클래스
  • 재사용성

오늘의 내용

  • 상속
    • 이미 만들어진 클래스를 수정하지 않고 재사용할 수 있도록 해주는 기능이다
    • 상속을 통해 새로운 클래스를 만들 때 기존 클래스의 기능을 그대로 사용할 수 있으며, 필요에 따라 새로운 기능을 추가할 수도 있다
    • 상속을 받는 클래스를 자식클래스 또는 서브클래스라고 하며, 상속을 해주는 클래스를 부모클래스 또는 슈퍼클래스라고 한다
    • 서브클래스는 클래스 이름과 상속받을 슈퍼클래스를 표기하는 헤더 부분, 멤버변수, 메서드, 생성자로 구성되는 바디 부분으로 구성된다
    • 서브클래스는 슈퍼클래스의 모든 멤버변수와 메서드를 포함하기 때문에, 서브클래스에 정의되지 않은 멤버변수나 메서드도 슈퍼클래스에 존재하면 사용할 수 있다 이는 코드의 가독성, 재사용성, 신뢰성을 높이는 데 큰 도움이 된다

예제 코드

부모클래스 (슈퍼클래스)

class Car {
    private String make;
    private String model;
    private int year;

    public Car(String make, String model, int year) {
        this.make = make;
        this.model = model;
        this.year = year;
    }

    public String startEngine() {
        return year + " " + make + " " + model + "'s engine is starting.";
    }

    public String stopEngine() {
        return year + " " + make + " " + model + "'s engine is stopping.";
    }

    public String info() {
        return "Car: " + year + " " + make + " " + model;
    }
}

 

자식클래스 (서브클래스)

class ElectricCar extends Car {
    private int batterySize;

    public ElectricCar(String make, String model, int year, int batterySize) {
        super(make, model, year);
        this.batterySize = batterySize;
    }

    @Override
    public String startEngine() {
        return super.info() + "'s electric motor is starting.";
    }

    @Override
    public String info() {
        return "Electric Car: " + super.info() + " with a " + batterySize + "-kWh battery";
    }
}

class GasolineCar extends Car {
    private int fuelTankSize;

    public GasolineCar(String make, String model, int year, int fuelTankSize) {
        super(make, model, year);
        this.fuelTankSize = fuelTankSize;
    }

    @Override
    public String info() {
        return "Gasoline Car: " + super.info() + " with a " + fuelTankSize + "-gallon fuel tank";
    }
}

 

테스트 클래스

public class Main {
    public static void main(String[] args) {
        ElectricCar tesla = new ElectricCar("Tesla", "Model S", 2023, 100);
        GasolineCar toyota = new GasolineCar("Hyundai", "Sonata", 2023, 15);

        System.out.println(tesla.info());
        System.out.println(tesla.startEngine());
        System.out.println(tesla.stopEngine());

        System.out.println(Hyundai.info());
        System.out.println(Hyundai.startEngine());
        System.out.println(Hyundai.stopEngine());
    }
}

코드 설명

  • Car 클래스: 부모클래스로, 모든 자동차의 공통적인 속성과 메서드를 정의한다 startEngine, stopEngine, info 메서드를 통해 자동차의 기본 동작을 구현한다
  • ElectricCar 클래스GasolineCar 클래스: Car 클래스를 상속받아 구체적인 자동차의 속성과 메서드를 구현한 서브클래스이다 각각 전기차와 가솔린차의 특성을 반영하여 info 메서드를 재정의한다
  • Main 클래스: 테스트 클래스에서 ElectricCar와 GasolineCar의 인스턴스를 생성하고, 각 메서드를 호출하여 상속과 오버라이딩의 결과를 확인한다

오늘의 회고

 프로젝트 개인작업이 완료되고 오랜만에 Java공부를 해봤는데 Spring만 하다 오랜만에 하니 너무 어색했다...... 하루에 못해도 30분 이상은 해줘야 되는데 날씨가 더워져 게을러지니 문제다. 내일부터는 소셜로그인 작업에 들어간다. 아직 직접 구현해본적이 없는 부분이라 작업 기간이 얼마나 걸릴지는 감이 안 잡히는데 최종 마감기한은 월요일 오후 2시라 주말에도 공부를 해야 할 지도