다형성: Difference between revisions
From IT Wiki
(새 문서: 분류:소프트웨어 공학분류:프로그래밍 ;Polymorphism ;상속되는 기능을 재정의하거나 하나의 인터페이스에 다양한 매소드를 정의하여...) |
No edit summary |
||
Line 1: | Line 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 |
Latest revision as of 13:24, 4 April 2020
- Polymorphism
- 상속되는 기능을 재정의하거나 하나의 인터페이스에 다양한 매소드를 정의하여 확장성, 유연성을 제공하는 객체지향 특징
- 많은 상이한 클래스들이 동일한 메서드명을 이용하는 능력
- 일반화된 객체는 어떤 특정 객체를 지칭할 수 있기 때문에 같은 동작을 하지만 다른 성질을 가질 수 없음
다형성으로 이룰 수 있는 것들[edit | edit source]
- 확장성: 하나의 인터페이스에 메서드를 type 및 개수를 변경하여 재정의
- 유연성: 하나의 인터페이스를 일관성있게 사용자 중심으로 제공
- 재사용성: Overloading, Overriding을 이용한 재사용성 높임
구현 형태[edit | edit source]
오버라이딩[edit | edit source]
- 부모에게 상속받은 오퍼레이션을 자식 클래스가 같은 이름으로 재정의 하는 경우
- 이 경우 동일한 오퍼레이션이 여러 개 정의되는 것과 마찬가지 효과를 가짐
- 부모의 오퍼레이션을 실행시킬 경우 부모 클래스의 이름을 지정해서 메소드를 호출해야 함
오버로딩[edit | edit source]
- 동일한 클래스에 같은 이름을 가진 두 개 이상의 오퍼레이션을 정의하는 경우
- 이 경우 이름은 같더라도 파라미터의 개수와 형식은 달라야 함
- 객체지향 프로그래밍 언어에서는 파라미터의 개수와 형식만 다르면 얼마든지 같은 이름의 메소드를 정의 가능
예시[edit | edit source]
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
}
}