다형성 편집하기

IT위키

경고: 로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다. 로그인하거나 계정을 생성하면 편집자가 사용자 이름으로 기록되고, 다른 장점도 있습니다.

편집을 취소할 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 게시해주세요.

최신판 당신의 편집
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
== 예시 ==
IT위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 라이선스로 배포된다는 점을 유의해 주세요(자세한 내용에 대해서는 IT위키:저작권 문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요.
또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다. 저작권이 있는 내용을 허가 없이 저장하지 마세요!
취소 편집 도움말 (새 창에서 열림)