최신판 |
당신의 편집 |
1번째 줄: |
1번째 줄: |
| [[분류:소프트웨어 공학]] | | [[분류:소프트웨어 공학]][[분류:프로그래밍]] |
| [[분류:프로그래밍]] | |
| | |
| ;Polymorphism | | ;Polymorphism |
| ;상속되는 기능을 재정의하거나 하나의 인터페이스에 다양한 매소드를 정의하여 확장성, 유연성을 제공하는 객체지향 특징 | | ;상속되는 기능을 재정의하거나 하나의 인터페이스에 다양한 매소드를 정의하여 확장성, 유연성을 제공하는 객체지향 특징 |
| | * 많은 상이한 클래스들이 동일한 메서드명을 이용하는 능력 |
| | * 일반화된 객체는 어떤 특정 객체를 지칭할 수 있기 때문에 같은 동작을 하지만 다른 성질을 가질 수 없음 |
|
| |
|
| *많은 상이한 클래스들이 동일한 메서드명을 이용하는 능력
| | == 다형성으로 이룰 수 있는 것들 == |
| *일반화된 객체는 어떤 특정 객체를 지칭할 수 있기 때문에 같은 동작을 하지만 다른 성질을 가질 수 없음
| | * 확장성: 하나의 인터페이스에 메서드를 type 및 개수를 변경하여 재정의 |
| | | * 유연성: 하나의 인터페이스를 일관성있게 사용자 중심으로 제공 |
| ==다형성으로 이룰 수 있는 것들== | | * 재사용성: Overloading, Overriding을 이용한 재사용성 높임 |
| | |
| *확장성: 하나의 인터페이스에 메서드를 type 및 개수를 변경하여 재정의 | |
| *유연성: 하나의 인터페이스를 일관성있게 사용자 중심으로 제공 | |
| *재사용성: Overloading, Overriding을 이용한 재사용성 높임 | |
| | |
| ==구현 형태==
| |
| ===[[오버라이딩]]===
| |
| | |
| *부모에게 상속받은 오퍼레이션을 자식 클래스가 같은 이름으로 재정의 하는 경우
| |
| *이 경우 동일한 오퍼레이션이 여러 개 정의되는 것과 마찬가지 효과를 가짐
| |
| *부모의 오퍼레이션을 실행시킬 경우 부모 클래스의 이름을 지정해서 메소드를 호출해야 함
| |
| | |
| ===[[오버로딩]]===
| |
| | |
| *동일한 클래스에 같은 이름을 가진 두 개 이상의 오퍼레이션을 정의하는 경우
| |
| *이 경우 이름은 같더라도 파라미터의 개수와 형식은 달라야 함
| |
| *객체지향 프로그래밍 언어에서는 파라미터의 개수와 형식만 다르면 얼마든지 같은 이름의 메소드를 정의 가능
| |
| | |
| ==예시==
| |
| <syntaxhighlight lang="java" line="1">
| |
| class Shape {
| |
| public void draw();
| |
| public void erase();
| |
| }
| |
| | |
| class Circle extends Shape{
| |
| int radius;
| |
| public void draw(); // Overriding
| |
| public void draw(int r); // Overloading
| |
| public void erase(); // Overriding
| |
| }
| |
| | |
| class Square extends Shape{
| |
| int s_line;
| |
| public void draw(); // Overriding
| |
| public void draw(int a, int b) ; // Overloading
| |
| public void erase(); // Overriding
| |
| }
| |
| | |
| class Triangle extends Shape{
| |
| int t_line;
| |
| public void draw(); // Overriding
| |
| public void draw(int line); // Overloading
| |
| public void erase(); // Overriding
| |
| }
| |
|
| |
|
| Class RunTest{
| | == 구현 형태 == |
| public void main(){
| | === [[오버라이딩]] === |
| Shape s1 = new Circle();
| | * 부모에게 상속받은 오퍼레이션을 자식 클래스가 같은 이름으로 재정의 하는 경우 |
| Shape s2 = new Square();
| | * 이 경우 동일한 오퍼레이션이 여러 개 정의되는 것과 마찬가지 효과를 가짐 |
| Shape s3 = new Triangle();
| | * 부모의 오퍼레이션을 실행시킬 경우 부모 클래스의 이름을 지정해서 메소드를 호출해야 함 |
| s1.draw(); // 원이 그려지고 - overriding
| |
| s2.draw(); // 사각형이 그려지고 - overriding
| |
| s3.draw(); // 삼각형이 그려지고 - overriding
| |
| }
| |
| }
| |
| </syntaxhighlight>
| |
|
| |
|
| == 참고 문헌 == | | === [[오버로딩]] === |
| | * 동일한 클래스에 같은 이름을 가진 두 개 이상의 오퍼레이션을 정의하는 경우 |
| | * 이 경우 이름은 같더라도 파라미터의 개수와 형식은 달라야 함 |
| | * 객체지향 프로그래밍 언어에서는 파라미터의 개수와 형식만 다르면 얼마든지 같은 이름의 메소드를 정의 가능 |
|
| |
|
| * 아이리포 지덤 http://www.jidum.com/jidums/view.do?jidumId=951
| | == 예시 == |