자바의정석

[자바의 정석 - 기초편] ch7-3,4 클래스 간의 관계, 상속과 포함

유호야 2022. 3. 18. 16:33
반응형

ch7-3 포함 (compositie) 관계

클래스는 1) 상속 관계와 2) 포함 관계가 있을 수 있다.

c.c.x
c.c.y

코드를 보고 그림을 그릴 줄 알아야 한다.

 

포함이란?
- 클래스의 멤버로 참조변수를 선언하는 것
- 작은 단위의 클래스를 만들고, 이 들을 조합해서 클래스를 만든다. 

 


ch7-4 클래스 간의 관계 결정하기

언제 상속하고 언제 포함하는지는 어떻게 결정할까?

상속관계 '~은 ~이다. is-a

포함관계 ~은 ~을 가지고 있다. has-a

상속은 여러가지 제약이 많기 때문에, 꼭 필요한 경우만 하고
일반적으로 포함을 사용하는 경우가 대부부 90% 이다. 

 


실습

 - 상속 관계인 경우

package ch07;

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 = 2;
		c.y = 3;
		c.r = 1;
		
		System.out.println(c.x);
		System.out.println(c.y);
		System.out.println(c.r);
	}

}

 

- 포함 관계인 경우

class Circle {
	MyPoint m = new MyPoint();
}

c.m.x와 같은 형태로

그림을 그려보면

m이 또 다른 x, y를 가리키게 된다.

package ch07;

class MyPoint {
	int x;
	int y;
	
}

class Circle {
	MyPoint m = new MyPoint();
	int r;
}

public class InheritanceTest {

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

}

 

c가 가리키는 객체의 m에 접근해야 한다. 


참조변수의 초기화
참조변수를 선언만 해 놓으면, 즉 객체를 생성하지 않으면 
저장 공간이 하나가 된다.

또는 생성자에서 초기화를 해주어야 저장공간이 생긴다.

반응형