쏭식
Ssongcode;
쏭식
전체 방문자
오늘
어제
  • 분류 전체보기 (106)
    • JAVA (21)
      • Basic (21)
    • Kotlin (14)
      • Basic (14)
    • Android (64)
      • Basic (24)
      • JETPACK (30)
      • Compose (8)
      • 파고들기 (2)
    • Project (4)
    • etc (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 코테
  • 코딩테스트
  • 기초100제
  • 객체지향
  • 변수
  • compose
  • 알고리즘
  • Adapter
  • 자료구조
  • DataBinding
  • 코드업100제
  • 상속
  • 자바
  • 배열
  • 코틀린코테
  • AAC
  • 코틀린
  • Jetpack
  • Android
  • Room
  • Kotlin
  • 리사이클러뷰
  • 메소드
  • 백준
  • ViewModel
  • livedata
  • workmanager
  • 프로젝트회고
  • 컴포즈
  • mvvm

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
쏭식

Ssongcode;

[JAVA-basic] 상속(2)
JAVA/Basic

[JAVA-basic] 상속(2)

2021. 8. 18. 17:45

 전 글에 이어서 포함관계의 예시를 살펴보자.

Deck클래스
Card클래스
메인클래스

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
    'JAVA/Basic' 카테고리의 다른 글
    • [JAVA-basic] 제어자
    • [JAVA-basic] 오버라이딩
    • [JAVA-basic] 상속
    • [JAVA-basic] 변수의 초기화
    쏭식
    쏭식

    티스토리툴바