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
- 자바
- 시(hour)
- ThreeWayPartition
- 알고리즘
- 병합정렬
- 자바스크립트
- map
- list
- degien pattern
- spring
- 디자인패턴
- 초(second)
- 시간더하기
- 매일프로그래밍
- 생년
- 조인
- 곱 최대값
- oracle
- java
- boot
- 파사드패턴
- 스트레티지패턴
- jQuery
- 분(minute)
- SpringBoot
- Flyweight Pattern
- json
- 널체크
- JavaScript
- SSL설정
Archives
- Today
- Total
만들어가는 세상
[JAVA] 다형성(polymorphism) 개념 및 이해하기 본문
[JAVA] 다형성(polymorphism) 개념
- 다형성이란?
다형성은 상속과 깊은 관계가 있다. 객체지향개념에서 다형성이란 '여러 가지 형태를 가질 수 있는 능력'을 의미하며 자바에서는 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록함으로써 다형성을 프로그램적으로 구현하였다.
인터페이스와 상속은 둘 다 다형성이라는 객체지향 프로그래밍의 특징을 구현하는 방식이다.
다형성: 하나의 객체를 여러 개의 타입으로, 하나의 타입으로 여러 종류의 객체를 여러 가지 모습으로 해석될 수 있는 성격이라고 생각하면 된다.
Java에서 다형성은 상속과 인터페이스를 통해 이루어진다. 다형성의 의미는 하나의 객체를 다양한 시선(타입)으로 바라볼 수 있게 한다는 의미이다. 중요한 것은 다양한 타입으로 본다는 사실 자체가 아니라 다양한 타입으로 객체를 바라보게 되면 호출할 수 있는 메소드 역시 타입에 따라 달라진다는 것이다. 상속의 오버라이딩을 설명하면서 오버라이딩을 하게 되면 컴파일러는 실제 객체의 메소드를 바라보는 것이 아니라. 변수 선언 타입의 메소드를 본다.
Mouse m = new WheelMouse( );
실제 객체가 WheelMouse이지만 컴파일러는 Mouse 타입의 메소드가 정상적으로 호출되고 있는지에만 관심을 두게 된다.
- 인터페이스가 상속보다 다형성에 더욱 유연함을 제공한다.
인터페이스는 클래스의 선언 뒤에서 여러 개의 인터페이스를 구현할 수 있게 할 수 있다. 이런 이유 때문에 하나의 객체를 여러 개의 타입으로 바라보는 다형성에는 상속보다 인터페이스가 더 큰 유연함을 제공한다고 할 수 있다.
예제
class Casting {
public static void main(String args[]) {
Car car = null;
FireEngine fe = new FireEngine();
FireEngine fe2 = null;
fe.water();
car = fe; // car =(Car)fe;에서 형변환이 생략된것이며 다형성입니다.
fe2 = (FireEngine)car; //자손타입 ← 조상타입
fe2.water();
}
}
class Car {
String color;
int door;
void drive() {// 운전
System.out.println("drive");
}
void stop() {// 멈추는 기능
System.out.println("stop");
}
class FireEngine extends Car { // 소방차
void water() {// 물을 뿌리는 기능
System.out.println("water");
}
}
정리
A obj =new B();
b클래스를 인스턴스 하였지만 A 클래스 행세를 한것입니다.
A 클래스의 데이터를 사용합니다.
B 클래스가 A클래스를 상속하여 오버라이딩한 메소드가 있다면 B클래스의 오버라이딩한 메소드를 호출합니다.
이밖에 VO 클래스에서 private String test를 getter setter형태로 처리하는 로직을 많이 볼수있습니다.
private List<String> test 가 될수도 있으며, private String[] test 가 될수있습니다. 이러한 코드가 모두 다형성입니다.
'IT > JAVA' 카테고리의 다른 글
[JAVA] 파일에서 확장자만 가져오기 (1) | 2020.03.10 |
---|---|
[JAVA]LIST MAP 객체 JSON 변환 (0) | 2019.11.26 |
[JAVA] full calendar 서버 및 UI 로직 입니다. (0) | 2019.11.19 |
[JAVA] 이미지 썸네일(image Thumbnail) 만들기 (0) | 2019.10.24 |
[JAVA] JSON으로 여러 객체에 데이터 처리하기 (0) | 2018.06.25 |
Comments