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이 자동 저장된다.
아니면 생성자에서라도 초기화해줘야 함
'프로그래밍 언어 > 자바의 정석 기초편' 카테고리의 다른 글
자바의 정석 기초편 ch7-7~9 오버라이딩 (0) | 2022.08.17 |
---|---|
자바의 정석 기초편 ch7-5,6 단일 상속, Object클래스 (0) | 2022.08.17 |
자바의 정석 기초편 ch7-1,2 상속 (0) | 2022.08.16 |
자바의 정석 기초편 ch6-38~41 변수의 초기화, 멤버변수의 초기화 (0) | 2022.08.03 |
자바의 정석 기초편 ch6-36,37 생성자 this(), 참조변수 this (0) | 2022.08.02 |