10 다형성1

 1  10 다형성1-1
 2  10 다형성1-2
 3  10 다형성1-3
 4  10 다형성1-4
 5  10 다형성1-5
 6  10 다형성1-6
 7  10 다형성1-7
 8  10 다형성1-8
 9  10 다형성1-9
 10  10 다형성1-10
 11  10 다형성1-11
 12  10 다형성1-12
 13  10 다형성1-13
 14  10 다형성1-14
 15  10 다형성1-15
 16  10 다형성1-16
 17  10 다형성1-17
 18  10 다형성1-18
 19  10 다형성1-19
 20  10 다형성1-20
※ 미리보기 이미지는 최대 20페이지까지만 지원합니다.
  • 분야
  • 등록일
  • 페이지/형식
  • 구매가격
  • 적립금
자료 다운로드  네이버 로그인
소개글
10 다형성1에 대한 자료입니다.
본문내용
10. 다형성1
#1.인강/0.자바/2.자바-기본
[[/다형성 시작]]
[[/다형성과 캐스팅]]
[[/캐스팅의 종류]]
[[/다운캐스팅과 주의점]]
[[/instanceof]]
[[/다형성과 메서드 오버라이딩]]
[[/정리]]
다형성 시작
객체지향 프로그래밍의 대표적인 특징으로는 캡슐화, 상속, 다형성이 있다. 그 중에서 다형성은 객체지향 프로그래밍의
꽃이라 불린다.
앞서 학습한 캡슐화나 상속은 직관적으로 이해하기 쉽다. 반면에 다형성은 제대로 이해하기도 어렵고, 잘 활용하기는 더
어렵다. 하지만 좋은 개발자가 되기 위해서는 다형성에 대한 이해가 필수다.
다형성(Polymorphism)은 이름 그대로 "다양한 형태", "여러 형태"를 를 뜻한다.
프로그래밍에서 다형성은 한 객체가 여러 타입의 객체로 취급될 수 있는 능력을 뜻한다. 보통 하나의 객체는 하나의 타
입으로 고정되어 있다. 그런데 다형성을 사용하면 하나의 객체가 다른 타입으로 사용될 수 있다는 뜻이다. 지금은 이 내
용을 이해하기 보다는 참고만 해두자.
이제부터 본격적으로 다형성을 학습해보자.
다형성을 이해하기 위해서는 크게 2가지 핵심 이론을 알아야 한다.
**다형적 참조**
**메서드 오버라이딩**
먼저 다형적 참조라 불리는 개념에 대해 알아보자.
다형적 참조
다형적 참조를 이해하기 위해 다음과 같은 간단한 상속 관계를 코드로 만들어보자.
부모와 자식이 있고, 각각 다른 메서드를 가진다.
```java
package poly.basic;
public class Parent {
public void parentMethod() {
System.out.println("Parent.parentMethod");
}
}
```
java
package poly.basic;
public class Child extends Parent {
public void childMethod() {
System.out.println("Child.childMethod");
}
}
```
java
package poly.basic;
/**
* 다형적 참조: 부모는 자식을 품을 수 있다.
*/
public class PolyMain {
public static void main(String[] args) {
//부모 변수가 부모 인스턴스 참조
System.out.println("Parent -> Parent");
Parent parent = new Parent();
parent.parentMethod();
//자식 변수가 자식 인스턴스 참조
System.out.println("Child -> Child");
Child child = new Child();
child.parentMethod();
child.childMethod();
//부모 변수가 자식 인스턴스 참조(다형적 참조)
System.out.println("Parent -> Child");
Parent poly = new Child();
poly.parentMethod();
//Child child1 = new Parent(); 자식은 부모를 담을 수 없다.
//자식의 기능은 호출할 수 없다. 컴파일 오류 발생
//poly.childMethod();
}
}
```
**실행 결과**
```
Parent -> Parent
Parent.parentMethod
Child -> Child
Parent.parentMethod
Child.childMethod
Parent -> Child
Parent.parentMethod
```
그림을 통해 코드를 하나씩 분석해보자.
**부모 타입의 변수가 부모 인스턴스 참조**
**Parent Parent: parent.parentMethod()**
부모 타입의 변수가 부모 인스턴스를 참조한다.
`Parent parent = new Parent() `
`Parent ` 인스턴스를 만들었다. 이 경우 부모 타입인 `Parent `를 생성했기 때문에 메모리 상에 `Parent `만 생성
된다.(자식은 생성되지 않는다.)
생성된 참조값을 `Parent ` 타입의 변수인 `parent `에 담아둔다.
`parent.parentMethod() `를 호출하면 인스턴스의 `Parent ` 클래스에 있는 `parentMethod() `가 호출된
다.
**자식 타입의 변수가 자식 인스턴스 참조**
**Child Child: child.childMethod()**
자식 타입의 변수가 자식 인스턴스를 참조한다.
`Child child = new Child() `
`Child ` 인스턴스를 만들었다. 이 경우 자식 타입인 `Child `를 생성했기 때문에 메모리 상에 `Child `와
`Parent `가 모두 생성된다.
생성된 참조값을 `Child ` 타입의 변수인 `child `에 담아둔다.
`child.childMethod() `를 호출하면 인스턴스의 `Child ` 클래스에 있는 `childMethod() `가 호출된다.
여기까지는 지금까지 배운 내용이므로 이해하는데 어려움은 없을 것이다. 이제부터가 중요하다.
**다형적 참조: 부모 타입의 변수가 자식 인스턴스 참조**
**Parent Child: poly.parentMethod()**
부모 타입의 변수가 자식 인스턴스를 참조한다.
`Parent poly = new Child() `
`Child ` 인스턴스를 만들었다. 이 경우 자식 타입인 `Child `를 생성했기 때문에 메모리 상에 `Child `와
`Parent `가 모두 생성된다.
생성된 참조값을 `Parent ` 타입의 변수인 `poly `에 담아둔다.
**부모는 자식을 담을 수 있다.**
부모 타입은 자식 타입을 담을 수 있다.
`Parent poly `는 부모 타입이다. `new Child() `를 통해 생성된 결과는 `Child ` 타입이다. 자바에서 부모 타
입은 자식 타입을 담을 수 있다!
`Parent poly = new Child() `: 성공
반대로 자식 타입은 부모 타입을 담을 수 없다.
`Child child1 = new Parent() `: 컴파일 오류 발생
**다형적 참조**
지금까지 학습한 내용을 떠올려보면 항상 같은 타입에 참조를 대입했다. 그래서 보통 한 가지 형태만 참조할 수 있다.
`Parent parent = new Parent() `
`Child child = new Child() `
그런데 `Parent ` 타입의 변수는 다음과 같이 자신인 `Parent `는 물론이고, 자식 타입까지 참조할 수 있다. 만약 손자가
있다면 손자도 그 하위 타입도 참조할 수 있다.
`Parent poly = new Parent() `
`Parent poly = new Child() `
`Parent poly = new Grandson() `: `Child ` 하위에 손자가 있다면 가능
자바에서 부모 타입은 자신은 물론이고, 자신을 기준으로 모든 자식 타입을 참조할 수 있다. 이것이 바로 다양한 형태를
참조할 수 있다고 해서 다형적 참조라 한다.
하고 싶은 말
김영한의 실전 자바 기본편 김영한의 실전 자바 기본편 김영한의 실전 자바 기본편