안녕하세요! 오늘은 자바 프로그래밍에서 중요한 개념인 '상속'에 대해 알아보겠습니다. 

상속은 객체 지향 프로그래밍의 핵심 원칙 중 하나로, 기존 클래스의 속성과 메소드를 새로운 클래스에 전달하는 것을 말합니다. 

이를 통해 코드의 중복을 줄이고 재사용성을 높일 수 있습니다. 

실생활 예시를 통해 상속을 자세하고 쉽게 이해해봅시다.

1. 상속이란 무엇인가?
상속은 기존 클래스를 확장하여 새로운 클래스를 생성하는 기법입니다. 

새로운 클래스는 기존 클래스의 속성과 메소드를 물려받아 사용할 수 있으며, 필요한 경우 추가 속성과 메소드를 정의할 수 있습니다. 

이를 통해 코드 중복을 줄이고, 클래스 간 관계를 명확히 할 수 있습니다.

예시: 동물 클래스와 상속을 사용한 포유류, 조류 클래스 구현하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public class Animal {
    String name;
    int age;
 
    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }
 
    public void introduce() {
        System.out.println("이 동물의 이름은 " + name + "이고, 나이는 " + age + "입니다.");
    }
}
 
public class Mammal extends Animal {
    String furColor;
 
    public Mammal(String name, int age, String furColor) {
        super(name, age); //부모클래스의 생성자 호출
        this.furColor = furColor;
    }
 
    public void showFurColor() {
        System.out.println("이 포유류의 털 색깔은 " + furColor + "입니다.");
    }
}
 
public class Bird extends Animal {
    boolean canFly;
 
    public Bird(String name, int age, boolean canFly) {
        super(name, age); // 부모 클래스의 생성자 호출
        this.canFly = canFly;
    }
 
    public void showFlyingAbility() {
        if (canFly) {
            System.out.println("이 조류는 날 수 있습니다.");
        } else {
            System.out.println("이 조류는 날 수 없습니다.");
        }
    }
}
 
cs
위의 예시에서는 동물을 나타내는 Animal 클래스를 생성하고, 상속을 사용하여 포유류(Mammal)와 조류(Bird) 클래스를 구현했습니다. 이때, Mammal과 Bird 클래스는 Animal 클래스의 속성(name, age)과 메소드(introduce)를 상속받았으며, 각각의 고유한 속성(furColor, canFly)과 메소드(showFurColor, showFlyingAbility)를 추가로 정의했습니다.
또한 Mammal과 Bird 클래스의 생성자에서 'super()' 키워드를 사용해 부모 클래스인 Animal의 생성자를 호출했습니다. 이를 통해 부모 클래스의 속성을 초기화할 수 있습니다.

 

2. 상속 사용하기
상속하려는 클래스에 'extends' 키워드를 사용하여 기존 클래스를 명시합니다.
'super()'를 사용하여 부모 클래스의 생성자를 호출할 수 있습니다. 

이를 통해 부모 클래스의 속성을 초기화할 수 있습니다.
위에서 작성한 예제를 통해 상속된 클래스를 사용하는 방법을 살펴봅시다.

1
2
3
4
5
6
7
8
9
10
11
12
public class Main {
    public static void main(String[] args) {
        Mammal mammal = new Mammal("호랑이"5"주황색");
        mammal.introduce(); // 부모 클래스인 Animal의 메소드 사용
        mammal.showFurColor(); // Mammal 클래스의 고유 메소드 사용
 
        Bird bird = new Bird("참새"2true);
        bird.introduce(); // 부모 클래스인 Animal의 메소드 사용
        bird.showFlyingAbility(); // Bird 클래스의 고유 메소드 사용
    }
}
 
cs
이 예제에서는 Mammal과 Bird 객체를 생성하고, 부모 클래스인 Animal의 메소드(introduce)와 각각의 클래스의 고유 메소드(showFurColor, showFlyingAbility)를 사용했습니다.

3. 'super' 키워드 사용하기

 

'super' 키워드는 하위 클래스에서 상위 클래스에 접근할 때 사용합니다.

 'super'를 사용하는 주요 경우는 다음과 같습니다.

 

  • 상위 클래스의 생성자를 호출하여 속성을 초기화할 때: 하위 클래스의 생성자에서 'super()'를 사용해 상위 클래스의 생성자를 호출할 수 있습니다. 이를 통해 상위 클래스의 속성 초기화를 수행할 수 있습니다.
  • 상위 클래스의 메소드를 호출할 때: 하위 클래스에서 상위 클래스의 메소드를 오버라이딩(재정의)했을 경우, 'super'를 사용해 원래의 상위 클래스 메소드를 호출할 수 있습니다.

    예시를 통해 'super' 키워드 사용법을 살펴봅시다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public class Animal {
    String name;
    int age;
 
    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
 
   public void introduce() {
        System.out.println("이 동물의 이름은 " + name + "이고, 나이는 " + age + "입니다.");
    }
}
 
public class Mammal extends Animal {
    String furColor;
 
    public Mammal(String name, int age, String furColor) {
        super(name, age); // 부모 클래스의 생성자 호출
        this.furColor = furColor;
    }
 
    // Mammal 클래스에서 introduce 메소드를 오버라이딩(재정의)
    @Override
    public void introduce() {
        super.introduce(); // 부모 클래스의 introduce 메소드 호출
        System.out.println("이 포유류의 털 색깔은 " + furColor + "입니다.");
    }
}
 
public class Main {
    public static void main(String[] args) {
        Mammal mammal = new Mammal("호랑이"5"주황색");
        mammal.introduce(); // 오버라이딩된 Mammal 클래스의 introduce 메소드 사용
    }
}
cs
이 예제에서는 Mammal 클래스에서 부모 클래스인 Animal의 introduce() 메소드를 오버라이딩(재정의)했습니다. 그리고 오버라이딩된 introduce() 메소드 내부에서 super.introduce()를 사용해 원래의 부모 클래스의 introduce() 메소드를 호출했습니다. 이렇게 super 키워드를 사용하면, 하위 클래스에서 상위 클래스의 메소드를 호출할 수 있습니다.

결과적으로 이 예제에서는 Mammal 객체의 introduce() 메소드를 호출하면 다음과 같은 출력을 얻을 수 있습니다.

1
2
3
이 동물의 이름은 호랑이이고, 나이는 5입니다.
이 포유류의 털 색깔은 주황색입니다.
 
cs

 

4. 상속의 장점
상속을 사용하면 다음과 같은 장점이 있습니다.

  1.  코드의 중복을 줄일 수 있습니다: 상위 클래스의 속성과 메소드를 하위 클래스에서 재사용할 수 있으므로 코드 중복을 줄일 수 있습니다.
  2.  클래스 간 관계를 명확히 할 수 있습니다: 클래스 간의 상속 관계를 통해 객체 지향 설계에서 클래스 간의 관계를 명확히 할 수 있습니다.
  3.  유지 보수가 용이합니다: 상위 클래스의 변경이 하위 클래스에 자동으로 반영되므로, 유지 보수가 용이합니다.

이상으로 자바의 상속에 대한 설명을 마칩니다. 상속은 객체 지향 프로그래밍의 핵심 원칙 중 하나이므로 이를 이해하고 활용하면 코드의 중복을 줄이고 클래스 간 관계를 명확히 할 수 있습니다. 다음에는 다양한 자바 프로그래밍 기법을 소개하겠습니다. 감사합니다!

 

 

'[JAVA] > ┃ⓑ KEYWORDS' 카테고리의 다른 글

[JAVA] 추상화 (Abstraction)  (0) 2023.03.19
[JAVA] 오버로딩(Overloading) vs 오버라이딩(Overriding)  (0) 2023.03.19
[JAVA] 캡슐화(Encapsulation)  (0) 2023.03.18
[JAVA] this  (0) 2023.03.18
[JAVA] 생성자(Constructor)  (0) 2023.03.18