250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- til #데이터베이스 #sql
- 자바
- 함바그
- 도메인별
- jvm
- 계층형
- 스파르타코딩클럽 #개발자 #백엔드
- Framework
- 캡슐화
- 패키지구조
- 내일배움캠프
- 스터디카페
- 사전캠프
- 키오스크
- static
- 요시
- 스파르타코딩클럽
- 스파르타코딩클럽 #사전캠프
- Java
- springboot
- 메모리구조
- 깃헙
- 프레임워크
- 깃
- Til
- Spring
- 스프링부트
- optional
- 스파르타사전캠프
- 레퍼클래스
Archives
- Today
- Total
John's Code Journey
[JAVA] 다형성(Polymorphism) 본문
728x90
🧠 다형성이란?
"같은 이름(메서드, 변수 등)인데 여러 가지 형태로 동작하는 것"
→ "하나의 타입(부모)으로 여러 타입(자식)을 다룰 수 있는 것"
자바에서 다형성은 주로 상속 + 메서드 오버라이딩 + 업캐스팅을 통해 실현됨
🎯 다형성의 힘
- 코드 재사용 증가
- 유지보수 쉬움
- 확장성 좋아짐
- 다양한 객체를 하나의 타입으로 처리 가능!
✅ 다형성 기본 예제
1. 부모 클래스
class Animal {
public void sound() {
System.out.println("동물이 소리를 냅니다.");
}
}
2. 자식 클래스들 (오버라이딩)
class Dog extends Animal {
@Override
public void sound() {
System.out.println("멍멍!");
}
}
class Cat extends Animal {
@Override
public void sound() {
System.out.println("야옹~");
}
}
3. 다형성 사용 (업캐스팅 + 오버라이딩)
public class Main {
public static void main(String[] args) {
Animal a1 = new Dog(); // 업캐스팅
Animal a2 = new Cat();
a1.sound(); // 멍멍!
a2.sound(); // 야옹~
}
}
🔥부모 타입(Animal)으로 객체를 선언했지만, 실제 동작은 자식 클래스의 sound() 메서드가 실행됨 → 다형성
👇 다형성 = 업캐스팅 + 오버라이딩
개념 | 설명 |
업캐스팅 | 자식 객체를 부모 타입으로 참조 |
오버라이딩 | 자식 클래스가 부모의 메서드를 재정의 |
다형성 | 부모 타입으로 여러 자식 객체를 다룰 수 있음 |
📦 배열, 매개변수에 쓰는 다형성
Animal[] animals = {
new Dog(),
new Cat(),
new Dog()
};
for (Animal a : animals) {
a.sound(); // 각각의 자식 클래스에 맞게 동작!
}
public class SoundTest {
public static void makeSound(Animal animal) {
animal.sound();
}
public static void main(String[] args) {
makeSound(new Dog()); // 멍멍!
makeSound(new Cat()); // 야옹~
}
}
🔁 오버로딩 vs 오버라이딩 차이
구분 | 오버로딩 (Overloading) | 오버라이딩 (Overriding) |
위치 | 같은 클래스 | 부모-자식 관계 |
조건 | 메서드 이름 같고, 매개변수 다름 | 이름, 매개변수, 리턴타입 모두 같아야 |
키워드 | 없음 | @Override |
🔐 다형성 + 인터페이스
interface RemoteControl {
void turnOn();
}
class TV implements RemoteControl {
public void turnOn() {
System.out.println("TV 켬");
}
}
class Radio implements RemoteControl {
public void turnOn() {
System.out.println("라디오 켬");
}
}
public class Main {
public static void main(String[] args) {
RemoteControl rc1 = new TV();
RemoteControl rc2 = new Radio();
rc1.turnOn(); // TV 켬
rc2.turnOn(); // 라디오 켬
}
}
🧠 핵심 정리
- 다형성 = 하나의 부모 타입으로 여러 자식 객체를 다룰 수 있음
- 업캐스팅 + 오버라이딩 조합으로 구현
- 유지보수, 확장성, 유연성 ↑
- 인터페이스나 추상 클래스에서도 다형성 자주 사용
'IT공부 > JAVA' 카테고리의 다른 글
[JAVA] Optional - Null 다루기 (0) | 2025.04.24 |
---|---|
[JAVA] 캡슐화(Encapsulation) (0) | 2025.04.23 |
[JAVA] interface - 표준화의 시작 (1) | 2025.04.23 |
[JAVA] final - 변하지 않는 값 (0) | 2025.04.23 |
[JAVA] Static - 클래스가 공유하는 공간 (0) | 2025.04.23 |