일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- java
- 다익스트라
- 파이썬
- 객체지향 프로그래밍
- queue
- OS
- 큐
- 유니크 키
- 데드락
- error
- SW Expert Academy
- OOP
- 디바이스 입출력
- unionfind
- integretion test
- 자료구조
- 스택
- 캡슐화
- DFS
- BFS
- 코딩 테스트
- stack
- springboot
- 프로세스
- Python
- 운영체제
- DP
- 백준 #
- 논리 메모리
- 백준
- Today
- Total
middlefitting
[OOP] 다형성이란 무엇일까 본문
다형성이란 객체지향의 4대원칙중 하나로 다형성을 잘 이해해야 객체지향을 잘 이해할 수 있다고 합니다.
다형성이란 단어 그대로 여러가지 형태를 가질 수 있는 능력을 말합니다.
다른 말로는 조상 타입의 참조 변수로 자손 타입의 객체를 다룰 수 있는 것을 말합니다.
"부모는 자식을 품을 수 있다" 라는 문장을 통해 좀 더 편하게 외우실 수 있습니다.
다형성 예시
import java.util.Objects;
public class Parent {
String house;
}
class Child extends Parent{
public Child(String house) {
this.house = house;
}
void print_variable() {
System.out.println(house);
}
}
class main_logic {
public static void main(String[] args) {
Child child = new Child("Seoul");
Parent parent = child;
System.out.println(parent.house); // Seoul
System.out.println(child.house); // Seoul
}
}
이렇게 Parent 참조변수로 Child의 객체를 담을 수 있는 것을 확인하실 수 있습니다.
대신 Parent 참조변수를 통해 Child 객체를 담았을 때는 Parent의 멤버만 사용할 수 있습니다.
즉 위 코드에서 다음과 같은 코드는 에러가 발생할 것입니다.
child.print_variable(); //OK
parent.print_variable(); //ERROR
왜냐하면 Parent 클래스에는 해당 멤버가 정의되어 있지 않으니 사용할 수가 없는 것입니다.
참조변수는 마치 리모컨과 같아 자신이 정의한 멤버만 사용할 수 있습니다.
다형성의 장점
기능이 제한된다는 점에서 부모 참조변수에 자식을 담는 것이 큰 효용이 없어보일수도 있는데요,
다형성은 어마어마한 장점을 제공합니다.
그것은 같은 부모를 가지는 다양한 형태의 자식 인스턴스들을 부모 참조변수를 통해 한번에 처리할 수 있다는 것입니다.
즉 아래와 같은 코드가 가능해집니다.
import java.util.Objects;
public class Parent {
String house = "Seoul";
}
class Child1 extends Parent{
String job;
}
class Child2 extends Parent{
String age;
}
class ParentUtil {
static void homeTown(Parent parent) {
System.out.println(parent.house);
}
}
class main_logic {
public static void main(String[] args) {
Child1 child1 = new Child1();
Child2 child2 = new Child2();
ParentUtil.homeTown(child1);
ParentUtil.homeTown(child2);
}
}
Child1 의 인스턴스와 Child2의 인스턴스는 서로 다른 멤버를 가지지만,
Parent의 자식으로서 house라는 멤버를 공통으로 가지고 있습니다.
이에 ParentUtil 클래스에 정의된 메소드에서 그들을 공통으로 처리하는 것입니다.
Parent의 참조변수로 담길 수 있는 모든 객체들은 house 인스턴스 변수를 가지고 있으니 그것을 출력하는 간단한 메소드입니다.
위의 코드는 매우 간단한 코드이지만 이처럼 다형성을 잘 이용한다면 클래스를 단계별로 잘 분리해서
그들의 공통적인 부분을 한번에 처리할 수 있습니다.
참고문헌
자바의정석 - 남궁성
'JAVA' 카테고리의 다른 글
Java 메서드 오버라이딩에 관하여 (0) | 2023.03.12 |
---|---|
[OOP] Java 추상화 이해하기 (0) | 2023.02.23 |
[OOP] Java 상속에 관하여 (0) | 2023.02.20 |
[OOP] 캡슐화란 무엇일까 (0) | 2023.02.17 |
[OOP] 참조변수 super와 생성자 super() 알아보기 (0) | 2023.02.16 |