Day 25 - Inheritance

haxxru log;·2026년 4월 6일
post-thumbnail

이 글은 2026년 4월 6일 작성된 글입니다.

오늘은 자바 객체지향 개념 중 상속, 오버라이딩, 추상 클래스, 형변환,
객체 상태 저장
에 대해 학습했다.
특히 오리 시뮬레이션 예제를 통해 상속 구조의 장점과 한계, 그리고
추상 클래스의 역할을 이해할 수 있었다.


1. 상속과 코드 재사용

여러 클래스에서 같은 기능을 사용할 때 부모 클래스를 만들고 상속을
사용하면 코드 중복을 줄일 수 있다.

예를 들어 오리 클래스가 있을 때 기본 동작을 부모 클래스에 정의한다.

class 오리 {
    void 날다() {
        System.out.println("오리가 날개로 날아갑니다.");
    }
}

그리고 다른 오리들은 이를 상속받는다.

class 흰오리 extends 오리 { }

class 청둥오리 extends 오리 { }

상속 구조

오리
 ├ 흰오리
 └ 청둥오리

이렇게 하면 공통 기능을 부모에서 관리할 수 있다.


2. 메서드 오버라이딩

상속받은 클래스는 부모의 메서드를 재정의(Override) 할 수 있다.

예를 들어 고무오리는 날 수 없기 때문에 날다 메서드를 수정한다.

class 고무오리 extends 오리 {
    void 날다() {
        System.out.println("저는 날 수 없어요.");
    }
}

이렇게 하면 같은 메서드 이름이지만 각 객체에 맞는 동작을 수행하게
된다.


3. 상속 구조의 한계

상속만으로는 모든 문제를 해결할 수 없다.

예를 들어

  • 일반 오리 → 날 수 있음
  • 고무 오리 → 날 수 없음
  • 로봇 오리 → 날 수 없음 + 수영 방식 다름

이처럼 다양한 동작이 섞이면 상속 구조가 복잡해지고 중복 코드가 생길 수
있다.

그래서 객체지향에서는 구성(Composition) 이라는 방식도 사용한다.

구성은

객체 안에 다른 객체를 포함하는 방식

으로 더 유연한 설계를 만들 수 있다.


4. 추상 클래스

추상 클래스는 공통 구조만 정의하고 구현은 자식 클래스에 맡기는
클래스
이다.

예시

abstract class 무기 {
    abstract void 공격();
}

자식 클래스는 반드시 이 메서드를 구현해야 한다.

classextends 무기 {
    void 공격() {
        System.out.println("칼로 공격합니다.");
    }
}

추상 클래스는 리모콘의 버튼 설계도와 비슷하다.\
버튼은 정의되어 있지만 실제 동작은 각 기기가 구현한다.


5. 형변환과 객체 타입

자바에서는 부모 타입으로 자식 객체를 참조할 수 있다.

사람 a사람 = new 홍길동();

이것을 업캐스팅(자동 형변환) 이라고 한다.

반대로 자식 타입으로 바꾸는 경우에는 명시적 형변환이 필요하다.

홍길동 a홍길동 = (홍길동)a사람;

이때 실제 객체가 해당 타입이 아니면 런타임 오류가 발생할 수 있다.


정리

오늘 학습한 핵심 개념

  • 상속은 코드 재사용을 위한 중요한 기능이다
  • 메서드 오버라이딩을 통해 클래스별 동작을 다르게 만들 수 있다
  • 상속만으로는 구조가 복잡해질 수 있어 구성 방식도 함께 사용한다
  • 추상 클래스는 공통 인터페이스 역할을 한다
  • 자바의 형변환은 자동형변환과 명시적 형변환으로 나뉜다

객체지향 설계에서는 중복을 줄이고 확장 가능한 구조를 만드는 것
중요하다.

오늘은 컨디션이 좋지 않아 집중을 하지 못했다.
컨디션 괜찮을 때 다시 복습을 해야 할 거 같다.

0개의 댓글