Notice
Recent Posts
Recent Comments
«   2024/09   »
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
Archives
Today
Total
관리 메뉴

충분히 쌓여가는

상속이냐 포함이냐 (클래스간의 관계 설정) 본문

Java/객체지향

상속이냐 포함이냐 (클래스간의 관계 설정)

빌드이너프 2023. 6. 5. 00:43

클래스로 작성하는데 있어 상속관계를 맺어 줄 것인지 포함관계를 맺어 줄 것인지 결정하는 것이 어려울 수 있다

상속관계: A는 B이다
포함관계: A는 B를 가지고 있다

 

 

이전 글에서 사용한 Circle의 예를 들어보면 Circle(원)이라는 클래스가 Point(점)을 가지고 있다가 더 자연스럽기 때문에 포함관계라고 할 수 있다(대부분의 경우에 포함관계)

 

상속

class MyPoint {
    int x;
    int y;
}

class Circle extends MyPoint { // 상속
    int r;
}


public class InheritanceTest {
    public static void main(String[] args) {
        Circle c = new Circle();
        c.x = 1;
        c.y = 2;
        c.r = 3;
        System.out.println(c.x);
        System.out.println(c.y);
        System.out.println(c.r);
    }
}


1
2
3

 

포함

class MyPoint {
    int x;
    int y;
}

class Circle  { // 포함
    MyPoint p = new MyPoint(); // 참조변수의 초기화
    int r;
}


public class InheritanceTest {
    public static void main(String[] args) {
        Circle c = new Circle();
        c.p.x = 1;
        c.p.y = 2;
        c.r = 3;
        System.out.println(c.p.x);
        System.out.println(c.p.y);
        System.out.println(c.r);
    }
}


1
2
3

 

 

변외

생성자의 초기화

Mypoint p; 까지만 해주면 저장공간이 안생겨서 초기화를 해준 것이 아니다

class MyPoint {
    int x;
    int y;
}

class Circle {
    MyPoint p;
    int r;
}

 

저장공간을 따로 만들어 생성자를 초기화 해주어야 한다

class MyPoint {
    int x;
    int y;
}

class Circle {
    MyPoint p;
    int r;
    
    Circle() {
        p = new Mypoint(); // 생성자 초기화
    }
}