상속이란?
일반적으로 상속은 부모가 가지고 있는 재산을 자식에게 물려주는 것을 말한다. 자식은 특별한 노력 없이 부모가 물려준 재산을 갖게된다.
객체 지향 프로그래밍에서도 부모 역할의 상위 객체와 자식 역할의 하위 객체가 있다.
상위 객체는 자기가 가지고 있는 필드와 메소드를 하위 객체에게 물려주어 하위 객체가 사용할 수 있도록 해준다.

상속은 상위 객체를 재사용해서 하위 객체를 쉽고 빨리 설계할 수 있도록 도와주고, 이미 잘 개발된 객체를 재사용해서 새로운 객체를 만들기 때문에 반복된 코드의 중복을 줄여준다.
사용법
기본 문법
- extends 키워드를 사용하여 상속 선언
- 자식 클래스는 부모 클래스의 필드(변수)와 메서드(함수) 를 물려받아 사용
- 자식 클래스는 필요에 따라 자신만의 필드와 메서드 추가
class 자식클래스명 extends 부모클래스명 {
// 자식 클래스만의 필드, 메서드 작성
}
예제 코드 )
실행 결과 >>
바둑이가 먹고 있습니다.
바둑이가 짖고 있습니다.
다형성이란 ?
다형성(Polymorphism) 은 '많은 형태를 가질 수 있음'을 의미하며, 같은 타입의 참조 변수로 여러 타입의 객체를 가리킬 수 있는 객체지향의 핵심 개념
즉,
- 하나의 인터페이스(타입)로 여러 구현체(객체)를 다룰 수 있게 해 주어
- 코드의 유연성, 확장성, 유지보수성을 높임
다형성을 사용하는 이유
1. 유지보수가 쉬움 : 코드 수정 없이 객체 교체만으로 동작을 바꿀 수 있음
2. 코드의 재사용성 : 같은 타입의 배열이나 리스트로 다양한 객체를 관리 가능
3. 인터페이스 기반 설계 : 확장성 좋은 프로그램 설계의 핵심
다형성의 두가지 형태
1. 오버로딩(Overloading) - 정적(컴파일 타임) 다형성
다음 코드처럼 같은 이름의 메서드를 매개변수타입, 개수, 순서만 다르게 선언하여 다양한 형태로 사용하는 것이다.
2. 오버라이딩(Overriding) - 동적(런타임) 다형성
부모 클래스의 메서드를 자식 클래스에서 재정의하여 상황에 맞게 동작을 변형하는 것임
이렇게 클래스를 선언한 뒤,
이걸 실행해보면..
Animal 타입의 sound()가 호출될 것 같지만,
실행 시 실제 참조하는 Dog의 sound()가 호출되어
"멍멍!"이 출력됨. 이를 동적 바인딩(Dynamic Binding)이라고 함.
이해하기 쉬운 예제
페이먼트로 예제를 들었을때가 가장 이해하기 쉬웠음
분석 >>
Payment 인터페이스(부모 타입)로 KakaoPay, CreditCard(자식 객체)를 가리키며 pay() 호출payment.pay() 구문은 컴파일 시 Payment 타입으로 확인되지만, 실행 시점에 실제 객체(KakaoPay, CreditCard)의 pay() 메서드가 호출됨
→ 동적 바인딩(런타임 다형성)
다형성 정리
다형성은 코드를 재사용하고, 유지보수를 쉽게하고, 인터페이스 기반 설계를 하기 위해 사용하는 것.
오버로딩과 오버라이딩으로 구현하는데, 둘이 헷갈려서 이렇게 외웠음:
- 오버로딩은 똑같은 이름의 메서드를 매개변수만 다르게 여러 개 만드는 것.
- 오버라이딩은 상속과 관련, 부모 메서드를 자식 클래스에서 재정의(다시 작성)하는 것.
상속은 이론만 들어도 느낌이 빡오지만 다형성은 직접 코드를 짜야 느껴짐 ㅜㅜ
끝

'Study > Java' 카테고리의 다른 글
| 정적 멤버와 static (0) | 2025.07.08 |
|---|---|
| 인스턴스 멤버와 this (0) | 2025.07.08 |
| 접근제어자 (0) | 2025.07.08 |
| 캡슐화(Encapsulation) (0) | 2025.07.06 |
| JAVA 기본 개념(배열, 연산자, 조건문, 반복문) (0) | 2025.07.06 |