본문 바로가기
프로그래밍 언어/자바의 정석 기초편

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

by life grow 2022. 8. 17.

7-3 포함 관계

 

클래스의 관계는 상속, 포함으로 크게 나눌 수 있다.

포함이란 클래스의 멤버로 참조변수를 선언하는 것.

2번은 포함관계 즉 circle이 point를 포함하는 것이다.

 

저장공간이 3개인 것은 1, 2번이 같다. (x, y, z)

그러나 구조적인 차이가 있다.

 

변수를 호출할 때

1은 c.x, c.y, c.r

2는 c.c.x, c.c.y, c.r

 

코드를 보고 그림이 어떻게 그려지는지 그릴 줄 알아야 한다.

 

어느 쪽이 더 좋은 건 아니지만

오른쪽이 더 복잡도가 줄어든다.

 

작은 단위의 클래스를 만들고, 이들을 조합해서 클래스를 만든다.

 

자동차라는 클래스를 만들 때, 멤버들을 다 쓰지 말고

Engine, Door[] 같이 작은 단위 클래스를 만들고 그것들을 포함시키자.

그러면 복잡도가 줄어들고 Engine, Door[]가 재사용될 수도 있다.

 

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

 

상속관계: ~은 ~이다.(is-a)

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

 

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

간단한 방법은 문장을 만들고 상속과 포함  둘 중에 어느 쪽이 더 자연스러운지 보는 것이다.

 

대부분의 경우 포함관계이다.

상속은 여러 가지 제약이 있기 때문에 꼭 필요할 때만 사용한다.

 

프로그래밍은 설계 + 코딩이다.

이 문제를 어떻게 해결할 것인가?

내가 원하는 대로 프로그램을 만들려면 어떻게 해야 하나?

설계는 그리기다. 자꾸 그려봐야 한다.

그런 작업들을 안 하고 코딩하면 정확한 코딩이 안 나오고

좋은 코드도 나오지 않는다.

 

MyPoint p; < 참조변수의 초기화를 안 해주면

p는 null이고 뒤에 0x200의 저장공간도 없는 것이다.

그럼 저장공간은 r 한 개밖에 없는 것이다.

 

MyPoint p = new MyPoint(); < 이렇게 참조변수의 초기화를 해줘야 한다.

참조형 타입의 변수를 초기화해주지 않으면 기본 값으로 null이 자동 저장된다.

아니면 생성자에서라도 초기화해줘야 함