-

객체지향 프로그래밍 :: 다형성 본문

언어/자바

객체지향 프로그래밍 :: 다형성

lingi04 2016. 11. 30. 22:08

OOP의 특징

    • 캡슐화(Encapsulation) : 데이터와 메서드를 하나의 단위로 묶는 것
    • 정보은닉 : 외부에서 객체상태를 바꾸거나 허가되지 않은 동작으로부터 보호
    • 추상화(Abstraction) : 외부에서 사용해야 하는 기능은 공개, 제한해야 하는 기능은 은폐
    • 다형성(Polymorphism) : 같은 메소드에 대해 클래스에 따라 다른 행위를 하게 되는 특징
    • 상속성(Inheritance) - 기존에 있던 클래스를 바탕으로 새로운 클래스를 만들 수 있는 성질

이번엔 이 중 '다형성'에 대해 알아보고자 한다.

다형성

    • 여러 가지 형태를 가질 수 있는 능력.
    • 자바에서는 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 되어있다.
    • 조상 클래스 타입의 참조변수로 자손클래스의 인스턴스를 참조할 수 있도록 한 기능?!?!
출처 : 자바의 정석

이라고 하는데 확 와닿지 않는다..


인터넷 여기 저기를 찾아보면 다형성은

"하나의 클래스나 매서드가 다양한 방식으로 동작이 가능한 것" 이라고 한다.

훨씬 와닿는 설명이다.


다형성은 OverridingOverloading의 형태로 구현되거나

'매개변수의 다형성'의 형태로도 구현된다.

예를 들면,

1
2
3
4
5
6
7
8
9
10
11
class Account{
    int money
}
 
class shinhan extends Account {}
class woori extends Account {}
class kb extends Account {}
 
class Customer{
    int money 10000;
}
cs

이렇게 클래스가 정의되어 있고, Customer클래스에 저금(input)메서드를 추가하고 싶다면,


1
2
3
4
void input (Account a, int money){
    this.money -= money;
    a.money+money;
}
cs

위와 같이 shinhan, woori, kb 클래스의 조상클래스인 Account 타입의 참조변수를 매개변수로 넘김으로써 Account클래스의 자손타입의 참조변수는 어느것이나 매개변수로 넘길 수 있다.

Comments