[강의] Java 상속(Inherit)

Jerry·2025년 7월 14일

Topic

Inherit
Overriding
Overload

What I Learned

상속(Inherit)

개념

부모 클래스(상위 클래스)의 속성과 메소드를 자식 클래스(하위 클래스)가 상속받아 사용할 수 있게 해주는 객체 지향 기법
→ 코드의 재사용성과 확장성을 높여주는 핵심적인 문법

목적

클래스의 재사용, 연관된 일련의 클래스들에 대한 공통적인 규약 정의

pros

  1. 보다 적은 양의 코드로 새로운 클래스 작성 가능
  2. 코드를 공통적으로 관리하기 때문에 코드의 추가 및 변경 용이
  3. 코드의 중복을 제거하여 프로그램의 생산성/유지보수에 크게 기여

is-a 관계 (상속)

"A는 B다"라는 뜻, 자식 클래스가 부모 클래스를 상속받는 관계이다. 이 때 부모의 클래스는 자식보다 더 추상적으로 설계되어야 한다. (사람 -> 학생, 직장인, 사용자 등등)
예시) 학생은 사람이다. / 사과는 과일이다. / 토끼는 동물이다. 역으로는 성립되지 않는다

class Animal {}
class dog extends Animal {}

has-a realtion (포함)

"A는 B를 포함한다"라는 뜻으로 A 클래스 안에 B 클래스 타입의 필드가 있는 포함 관계
이 때 A는 B보다 넓은 범위를 가져야한다
예시) 교실엔 책상이 있다. / 숲엔 나무가 있다. / 사람이 폰을 가지고 있다.
포함되는 객체를 멤버 변수로 선언

class Engine()

class Car {
	private Engine engine;

특징

  1. 모든 클래스는 Object 클래스의 후손
  2. 부모 클래스의 생성자, 초기화 블록은 상속 안 됨
    • 부모 클래스에 기본 생성자 있는 경우: super() 생략 가능 (자동 삽입)
    • 부모 클래스에 파라미터 있는 생성자만 있는 경우: 반드시 super(파라미터) 명시 필요
    • this()를 쓰는 경우 super()를 쓸 수 없음
  3. 부모의 private 멤버는 상속은 되지만 직접 접근 불가

오버라이딩(Overriding)

개념

  • 부모 클래스에서 정의한 메소드를 자식 클래스에서 재정의하여, 자식 클래스의 객체가 해당 메소드를 호출했을 때 자식 클래스의 메소드가 실행되는 기능입니다.
  • 해당 메커니즘을 동적 바인딩(Dynamic binding)이라고 합니다.
    → 동적 바인딩: 실행될 메소드가 실행 시점에 결정되는 개념

특징

  • 이름, 매개변수, 리턴타입이 모두 같아야 합니다.
  • 부모보다 같거나 더 넓은 접근 제어자만 허용됩니다.
  • 부모보다 같거나 더 구체적인 예외만 선언 가능합니다.
  • private, final 메소드는 오버라이딩할 수 없습니다.
  • @Override 어노테이션 명시가 권장됩니다.

오버로딩(Overloading)

개념

  • 같은 이름의 메소드를 매개변수만 다르게 해서 여러 개를 정의하는 문법
  • 이름은 같지만, 매개변수의 타입, 갯수, 순서가 다르면 자바가 각각 다른 메소드로 인식합니다.
  • 메소드의 리턴 타입은 오버로딩 조건과 관계 없습니다.

super 키워드(부모 생성자, 부모 접근 연산)

개념

  • 상속 받은 자식에서 부모 생성자나 부모의 멤버에 접근할 수 있는 키워드
  • super() 부모 클래스의 생성자 호출, 자식 생성자에서 가장 첫 줄에 사용 (명시하지 않으면 자동 생성)
  • super. 부모 클래스의 메소드나 필드에 접근하는 키워드 (오버라이드 되어도 부모 메소드 호출이 가능)
profile
Backend engineer

0개의 댓글