JAVA

[OOP] 상속(inheritance)

2023. 3. 6. 17:51
목차
  1. 정의
  2. 상속 구현 방법
  3. 클래스 간의 관계
  4. 포함관계
  5. 관계 결정하기
  6. 단일 상속
  7. Object 클래스

정의

기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것

 

  • 상속을 통해 보다 적은 양의 코드로 새로운 클래스를 작성할 수 있다.
  • 코드를 공통적으로 관리할 수 있기 때문에 코드의 추가 및 변경이 매우 용이
  • 이러한 특징으로 코드의 재사용성을 높이고 코드의 중복을 제거하여 프로그램의 생산성과 유지보수에 크게 기여

 

상속 구현 방법

class Child extends Parent {
	// ...
}

상속해 주는 클래스를 '조상 클래스', 상속받는 클래스를 '자손 클래스'라고 한다.

 

조상 클래스    부모 클래스, 상위 클래스, 기반 클래스
자손 클래스    자식 클래스, 하위 클래스, 파생된 클래스

자손은 조상의 모든 멤버를 상속받는다. (생성자, 초기화블록 제외)

자손 클래스의 멤버 개수는 조상 클래스보다 항상 같거나 많다.

 

조상 클래스의 변경은 자손 클래스에 영향을 미치지만, 자손 클래스의 변경은 조상 클래스에 아무런 영향을 주지 못한다.

 

자손 클래스의 인스턴스를 생성하면 조상 클래스의 멤버와 자손 클래스의 멤버가 합쳐진 하나의 인스턴스로 생성된다.

 

 

클래스 간의 관계

포함관계

한 클래스의 멤버변수로 다른 클래스 타입의 참조변수를 선언하는 것

 

  • 상속 이외에 클래스를 재사용하는 방법이다.
  • 작은 단위의 클래스를 먼저 만들고, 이들을 조합해서 하나의 커다란 클래스를 만든다.
class Point {
	int x;	// x좌표
    int y;	// y좌표
}

class Circle {
    int x;	// 원점의 x좌표
    int y;	// 원점의 y좌표
    int r;	// 반지름
}

// 위 Circle을 아래와 같이 변경할 수 있다.
class Circle {
    Point c = new Point();	// 원점
    int r;
}

 

관계 결정하기

상속관계를 맺을지 포함관계를 맺을지 정하기 위해서, '~은 ~이다(is-a)'와 '~은 ~을 가지고 있다(has-a)"를 넣어서 문장을 만들어 보면 된다.

 

원(Circle)은 점(Point)이다. - Circle is a Point.
원(Circle)은 점(Point)을 가지고 있다. - Circle has a Point.

두 문장 중 첫 번째 문장이 더 자연스럽다. 따라서 Circle 클래스와 Point 클래스 간의 관계는 포함관계가 보다 적절하다.

 

 

단일 상속

  • 자바에서는 오직 단일 상속만을 허용한다.
  • 다중상속이 필요하면 배중이 높은 클래스 하나만 상속관계로, 나머지는 포함관계로 할 수 있다.

 

 

Object 클래스

  • Object 클래스는 모든 클래스 상속계층도의 최상위에 있는 조상 클래스이다.
  • 조상이 없는 클래스는 자동적으로 Object 클래스를 상속받게 된다.
  • 모든 클래스는 Object 클래스에 정의된 11개의 메서드를 상속받는다.

'JAVA' 카테고리의 다른 글

[OOP] package와 import  (0) 2023.03.07
[OOP] 오버라이딩(overriding)  (0) 2023.03.06
[OOP] 변수의 초기화  (0) 2023.03.04
[OOP] 생성자(Constructor)  (0) 2023.03.03
[OOP] 오버로딩(overloading)  (0) 2023.03.03
  1. 정의
  2. 상속 구현 방법
  3. 클래스 간의 관계
  4. 포함관계
  5. 관계 결정하기
  6. 단일 상속
  7. Object 클래스
'JAVA' 카테고리의 다른 글
  • [OOP] package와 import
  • [OOP] 오버라이딩(overriding)
  • [OOP] 변수의 초기화
  • [OOP] 생성자(Constructor)
ewok
ewok
ewok
기록장
ewok
전체
오늘
어제
  • 분류 전체보기
    • 웹개발 교육
      • HTML
      • CSS
      • JavaScript
      • Database
      • Java
      • jQuery
      • Ajax
      • Bootstrap
      • jsp
      • Spring
      • MyBatis
      • 프로젝트
    • JAVA
    • SpringBoot
      • 기초
      • AWS
      • 개인프로젝트
    • Spring Security
    • JPA
    • 테스트코드
    • Error
    • CS
      • 컴퓨터 구조
      • 이산수학
    • 알고리즘
      • 정리
      • Java
    • SQL
    • 자격증
      • SQLD
      • 정보처리기사
    • Git

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • git bash
  • org.springframework.beans.factory.UnsatisfiedDependencyException
  • branch
  • this
  • 생성자
  • org.hibernate.tool.schema.spi.CommandAcceptanceException
  • sqld 자격증
  • base
  • sqld 합격
  • 버전 관리
  • 노랭이
  • SQLD
  • 브랜치
  • merge commit
  • GIT

최근 댓글

최근 글

hELLO · Designed By 정상우.
ewok
[OOP] 상속(inheritance)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.