본문 바로가기
내일배움캠프

내일배움캠프 9일차 TIL - Java 상속에 대해 알아보자

by Kiwimel0n 2024. 1. 4.
  • 오늘의 키워드

상속 extends, 관계

  • 오늘 배운 내용 정리

상속의 사전전 정의는 부모가 자식에게 물려주는 행위를 말한다.

객체지향 프로그램에서도 부모클래스의 필드와 메서드를 자식 클래스에게 물려줄 수 가 있다.

상속을 사용하면 적은 양의 코드로 새로운 클래스를 작성 또는 공통적인 코드를 관리하여 코드의 추가와 변경이 쉬워진다.

이러한 특성으로 상속 사용시 코드의 중복이 제거되고 재사용성이 크게 증가하여 생산성과 유지보수성이 매우 유리하다.

 

  • 상속

클래스 간의 상속은 extends 키워드를 사용하여 정의

public class 자식클래스 extends 부모클래스 {

}

extends의 키워드를 보았을 때 상속의 개념을 확장의 개념으로 이해해야한다.

 

※ 부모클래스, 자식 클래스라는 용어에 현혹되어 '부모가 자식보다가 큰 사람이니까 부모 클래스도 마찬가지로 자식 클래스 보다 큰 범위겠지?'  라고 생각하면 안된다.

 

1.  부모 클래스에 새로운 필드와 메서드가 추가되면 자식클래스는 이를 상속받아 사용할 수 있다.

2. 자식 클래스에 새로운 필드와 메서드가 추가되어도 부모 클래스는 어떠한 영향도 받지 않는다.

3. 따라서 자식 클래스의 멤버 개수는 부모 클래스보다 항상 같거나 많다.

 

예제로 8일차 자동차 클래스를 부모클래스로 해서 상속을 구현해 보겠다.

 

public class Car {

    String company; // 자동차 회사
    private String model; // 자동차 모델
    private String color; // 자동차 색상
    private double price; // 자동차 가격

    double speed;  // 자동차 속도 , km/h
    char gear = 'P'; // 기어의 상태, P,R,N,D
    boolean lights; // 자동차 조명의 상태

    public String getModel() {
        return model;
    }

    public void setModel(String model) {
        this.model = model;
    }

    public double gasPedal(double kmh, char type) {
        changeGear(type);
        speed = kmh;
        return speed;
    }

    public double brakePedal() {
        speed = 0;
        return speed;
    }

    public char changeGear(char type) {
        gear = type;
        return gear;
    }

    public boolean onOffLights() {
        lights = !lights;
        return lights;
    }

    public void horn() {
        System.out.println("빵빵");
    }

}

 

이렇듯 속성(필드), 생성자, 행위(메서드)로 구성된 자동차 클래스를가져왔다.

 

자식 클래스로는 스포츠카라는 클래스가 extends Car 를 통해 자동차 클래스의 자식클래스로 만들어졌다.

public class SportsCar extends Car{
    String engine;
    public void booster() {
        System.out.println("엔진 " + engine + " 부앙~\n");
    }
}

 

 

main 메서드를 사용하여 테스트를 해보면

public class Main {
    public static void main(String[] args) {
        // 부모 클래스 객체에서 자식 클래스 멤버 사용
        Car car = new Car();
        // car.engine = "Orion"; // 부모클래스는 자식클래스의 
        						//  멤버(필드와 메서드)를 사용할 수 없어 오류가 생긴다.
        // car.booster(); // 오류

        // 자식 클래스 객체 생성
        SportsCar sportsCar = new SportsCar();
        sportsCar.engine = "Orion";
        sportsCar.booster();

        // 자식 클래스 객체에서 부모 클래스 멤버(필드 + 메서드) 사용
        sportsCar.company = "GENESIS"; // 자식클래스가 부모의 company 필드를 가져와 GENESIS로 변경한다.
        sportsCar.setModel("GV80"); // 자식클래스가 부모의 필드를 가져와 model을 GV80으로 변경한다.
        System.out.println("sportsCar.company = " + sportsCar.company); 
        // sportsCar.company = GENESIS 가 출력된다.
        System.out.println("sportsCar.getModel() = " + sportsCar.getModel());
        // sportsCar.getModel() = GV80 이 출력된다.
        System.out.println();

        sportsCar.horn();
        // 자식클래스인 sportsCar가  부모클래스인 Car의 메서드 horn을 가져와서 빵빵을 출력한다.
        System.out.println(sportsCar.changeGear('D'));
    }	// 자식클래스인 sportsCar가 부모클래스인 Car의 메서드 ChangeGear를 사용하여 D를 리턴해서 출력한다.
}

 

이렇게하여 자식클래스와 부모클래스의 상속관계를 간단하게 알아보았다.

  • 오늘의 회고

자바의 상속이라는 것이 객체지향에서 얼마나 큰 의미가 있는 것인지 조금이나마 이해하게되었고 이것을 잘 이용하는 것이 좋은 개발자의 첫걸음이라는 것 같다. 내일은 이 상속에 관하여 깊게 복습을 하여 내것으로 만들어낼 것이다.