프로그래밍 언어/Java

[Java] 클래스 상속과 포함관계

happy_life 2022. 6. 23. 13:25

목차

1. 클래스 상속

1.1. 상속이란?

1.2. 단일 상속

1.3 Object 클래스 - 모든 클래스의 조상

2. 포함관계

2.1. 포함관계란?

 

 

1. 상속

1.1. 상속이란?

기존 클래스의 맴버와 메서드를 다른 클래스에 모두 물려주는 것을 말한다. 상속을 하는 클래스를 부모 클래스, 상속을 받는 클래스를 자식 클래스라고 한다.

부모 클래스  상속을 해주는 클래스
자식 클래스 상속을 받는 클래스

 

상속은 extends 키워드를 사용한다.

 

코드 예제

public class InherentEx1 {
    public static void main(String[] args) {
        Child child = new Child();
        System.out.println("child.lastName = " + child.lastName);
        child.Shout();
    }
}

class Parent {
    String lastName = "Kim";
}

class Child extends Parent {
    void Shout() {
        System.out.println("나는 Child 입니다.");
    }
}

class Child에는 lastName이라는 맴버변수가 없다. 하지만 그럼에도 불구하고 참조할 수 있는데 이는 Parent 클래스를 상속받았기 때문이다.

자식 클래스는 또한 자신만의 메서드나 맴버변수를 추가하여 부모 클래스를 확장할 수 있다.

즉, 자식은 부모의 맴버와 메서드를 모두 사용 + 자신만의 맴버와 메서드를 확장시켜 모두 사용할 수 있다. 물론 자식에서 새로 생성된 맴버나 메서드는  부모에 영향을 주지 않는다.

 

1.2. 단일 상속

자바에서는 오직 하나의 조상으로부터만 클래스를 상속받을 수 있다. 여러 명의 부모는 있을 수 없다는 것이다.

다중 상속을 허용하면 서로 다른 클래스로부터 많은 기능들을 활용할 수 있다. 하지만 클래스의 관계가 매우 복잡해진다는 단점이 있다.

 

 

1.3 Object 클래스 - 모든 클래스의 조상

모든 클래스의 조상인 클래스가 있다. 바로 Object 클래스이다. 다른 클래스로부터 상속 받지 않은 모든 클래스들은 자동으로 Object클래스로부터 상속받게 되어있다.

class Tv{}

--> class Tv{} extends Object {}

 

 

2. 포함관계

2.1 포함관계란?

클래스를 재사용하는 방법에 상속 외에 포함관계라는 것도 있다. 포함관계를 맺는 것은 한 클래스의 맴버변수로 다른 클래스의 타입을 참조하는 것을 말한다.

예를 들어서 정사각형과 사각형, 꼭지점의 관계를 살펴보자.

 

정사각형은 사각형이다.

정사각형은 사각형의 범위에 포함된다. 이럴 때는 상속관계이다.

 

정사각형에는 꼭지점이 있다.

정사각형에는 꼭지점이 있다. 이럴 때는 포함관계이다. 

 

이제 코드를 통해 이해해보자.

 

코드예제

public class InherentEx2 {
    public static void main(String[] args) {
        // 꼭지점 배열
        Point[] points = {
                new Point(0,0),
                new Point(5,0),
                new Point(0,5),
                new Point(5,5)
        };

        FourSquare fourSquare = new FourSquare(points);
        fourSquare.PrintPoints();
        	//point (x, y) = (0,0)
		//point (x, y) = (5,0)	
		//point (x, y) = (0,5)
		//point (x, y) = (5,5)
    }
}

// 꼭지점
class Point {
    int x;
    int y;
    // 생성자
    Point(int x, int y) {
        this.x = x;
        this.y = y;
    }
}

// 사각형
class Square {
    Point[] points = new Point[4];

}

// 정사각형
class FourSquare extends Square{
    //Point[] points = new Point[4]; 상속받음
    //생성자
    //정사각형 객체에서 생성자를 통해 초기화되면서 꼭지점이 들어가게 된다.
    FourSquare(Point[] points){
        this.points = points;
    }

    void PrintPoints() {
        for (Point point : points) {
            System.out.println("point (x, y) = (" + point.x +"," + point.y +")");
        };
    }
}

 

꼭지점은 정사각형과 포함관계이므로  정사각형의 맴버변수로 갖고 있다. 

정사각형 객체에서 생성자를 통해 초기화되면서 꼭지점이 들어가게 된다.

 

 

'프로그래밍 언어 > Java' 카테고리의 다른 글

[Java] super란?  (0) 2022.06.23
[Java] 오버라이딩과 오버로딩 그리고 그 차이점  (0) 2022.06.23
[Java] 변수의 초기화  (0) 2022.06.23
[Java] 생성자란?  (0) 2022.06.22
[Java] 오버로딩이란?  (0) 2022.06.22