전 글에 이어서 포함관계의 예시를 살펴보자.
Deck클래스를 작성하는데 Card클래스를 재사용하여 포함관계로 작성하였다.
카드 한 덱은 52장의 카드로 이루어져 있으므로
Card클래스를 크기가 52인 배열로 처리하였다.
그리고, random()을 사용하여 shuffle()을 실행할 때 마다 결과가 다르게 나타나게 하였다.
여기서 중요한 점이 있다.
pick()은 Card객체 배열 cardArr에 저장된 Card객체 중에서 하나를 꺼내서 반환한다.
Card객체 배열은 참조변수 배열이고, 이 배열에 실제로 저장된 것은 객체가 아니라 객체의 주소다.
따라서 반환형이 Card pick(int index)로 Card의 주소를 반환하는 것이다.
예를 들어, index의 값이 0이고, cardArr[0]의 값이 0x200이라면 pick(0)은 다음과 같은 과정으로 계산된다.
return cardArr[index];
return cardArr[0];
return 0x200;
단일 상속
자바에서는 둘 이상의 클래스로부터 상속을 받을 수 없고, 오직 단일 상속만 허용한다.
예를 들어, TV클래스와 VCR클래스가 있을 때, 이 두 클래스로 부터 상속을 받는 TVCR클래스를 작성할 수 없다.
다중상속을 허용하면 복합적인 기능을 가진 클래스를 쉽게 작성할 수 있다는 장점이 있지만,
클래스간의 관계가 매우 복잡해진다는 것과
서로 다른 클래스로부터 상속받은 멤버간의 이름이 같은 경우 구별할 수 있는 방법이 없다는 단점을 가지고 있다.
자바에서는 다중삭송의 이러한 문제점을 해결하기 위해 다중상속의 장점을 포기하고 단일상속만을 허용한다.
단일 상속이 하나의 조상 클래스만을 가질 수 있기 때문에 다중상속에 비해 불편한 점도 있지만,
클래스 간의 관계가 보다 명확해지고 코드를 더욱 신뢰할 수 있게 만들어 준다는 점에서 다중상속보다 유리하다.
Object클래스 - 모든 클래스의 조상
Object클래스는 모든 클래스 상속계층도의 최상위에 있는 조상클래스이다.
다른클래스로부터 상속 받지 않는 모든 클래스들은 자동적으로 Object클래스로부터 상속받게 하였다.
예를 들어 다음과 같은 코드가 있다고 가정해보자.
class Tv{ ... }
다른 클래스로부터 상속을 받지 않는 Tv클래스이다.
위의 코드를 컴파일해보면 자동적으로 extends Object를 추가하여 상속받도록 되어있다.
class Tv extends Object { ...}
만일 다른 클래스로분터 상속을 받는다고 하더라도 상속계층도를 따라 조상클래스,
조상클래스의 조상클래스를 찾아 올라가다보면 결국 마지막 최상위 조상은 Object클래스일 것이다.
그동안 toString() 이나 equals(Object o) 와 같은 메소드를 정의하지 않고도 사용할 수 있었던 이유도
이 메소드들이 Object클래스에 정의된 것들이기 때문이다.
'JAVA > Basic' 카테고리의 다른 글
[JAVA-basic] 제어자 (0) | 2021.08.20 |
---|---|
[JAVA-basic] 오버라이딩 (0) | 2021.08.19 |
[JAVA-basic] 상속 (0) | 2021.08.18 |
[JAVA-basic] 변수의 초기화 (0) | 2021.08.15 |
[JAVA-basic] 생성자 (0) | 2021.08.13 |