05-05 상속 - 개발새발 작성 일기

개발새발자·2023년 10월 28일
2

자바 개념

목록 보기
2/15

자바에는 상속이라는 기능이 있는데 이는 어떤 class의 기능에 추가 기능을 넣고 싶을 때 사용한다.
예를 들어 동물이라는 class를 하나 만들었다고 가정하자.

class Animal {
    String name;
    int height; // 키
    int weight; // 몸무게
    ...

    void setName(String name) {
        this.name = name;
    }
}

이 Animal 클래스를 부모클래스라 부르긴 하지만 처음에 용어는 중요하지 않다.
동물마다 공통점인 큰 틀을 이 Animal에 넣는다.

이제 울음소리도 추가하고 싶다
근데 울음소리가 있는 얘가 있고 없는 얘가 있다.
이럴 경우 Animal 클래스 안에 짤 것 인가
(물론 지금처럼 하나의 코드를 추가하는 것은 큰 영향을 주지는 않지만 나중에 커다란 프로젝트를 진행하게 되었을 때 울음소리 같은 기능들이 엄청나게 많아질 거고 효율적으로 코드를 짜기 위해서는 부모클래스에 전부 추가하는 것보다는 상속의 기능을 사용하는 것이 더 좋다)
이렇게 공통점이 아닌 부분은 Animal 클래스 안에 추가하기 보다는 상속의 개념을 사용해서 코드를 짜본다

강아지의 울음소리에 대한 클래스를 추가해보자

class Animal {
    String name;
	int height; // 키
    int weight; // 몸무게
    ...
    
    void setName(String name) {
        this.name = name;
    }
}

class Dog extends Animal {
    void onomatopoeia() { // 울음소리(onomatopoeia) 메소드
        System.out.println(name+" 멍멍");
    }
}

public class SampleInheritance {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.setName("poppy");
        System.out.println(dog.name);
        dog.onomatopoeia();
    }
}

poppy
poppy 멍멍

이런 출력값을 얻을 수 있다

그럼 이번에는 고양이의 울음소리도 추가해보자

class Animal {
    String name;

    void setName(String name) {
        this.name = name;
    }
}

class Dog extends Animal {
    void onomatopoeia() {
        System.out.println(name+" 멍멍");
    }
}

class Cat extends Animal {
    void onomatopoeia() {
        System.out.println(name+" 야옹");
    }
}
public class SampleInheritance {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.setName("poppy");
        System.out.println(dog.name);
        dog.onomatopoeia();

        Cat cat = new Cat();
        cat.setName("kitten");
        System.out.println(cat.name);
        cat.onomatopoeia();
    }
}

poppy
poppy 멍멍
kitten
kitten 야옹

Dog클래스랑 Cat클래스가 거의 겹치는 것 같은데 이를 합칠 순 없을까

class Animal {
    String name;

    void setName(String name) {
        this.name = name;
    }
}

class Onomatopoeia extends Animal {
    String sound;

    void setSound(String sound) {
        this.sound = sound;
    }
    void show() {
        System.out.println(name + "'s sound : " + sound);
    }
}
public class SampleInheritance {
    public static void main(String[] args) {
        Onomatopoeia dog = new Onomatopoeia();
        dog.setName("poppy");
        dog.setSound("멍멍");
        dog.show();
        Onomatopoeia cat = new Onomatopoeia();
        cat.setName("kitten");
        cat.setSound("야옹");
        cat.show();

    }
}

poppy's sound : 멍멍
kitten's sound : 야옹

profile
바삭하고 촉촉한 쿠키로 살자

0개의 댓글