ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 오버로딩 오버라이딩
    혼자서 공부하기/자바 2007. 4. 20. 09:56
    728x90
    반응형
    SMALL

    오버로딩 과 오버라이딩의 필요성

     

    오버라이딩과 오버로딩은 과연 무엇인가 무엇때문에 필요한것인가
    라고한다면 바로 객체지향 프로그래밍의 다형성을 위해 필요한 개념이라
    할수있습니다. 다형성이란 폴리모피즘이라고도 부르며 많은형태라는
    뜻을 가지고있습니다.

    하위 등급이 상위 등급의 특성을 계승할 때, 그 구조나 방법을 변경하거나 부분적으로 추가하여 여러가지 많은

    형태를 만들어내는것이
    오버로딩과 오버라이딩의 역활입니다.

    3. 필요성 설명

    오버 라이딩이란?

    일단 사람이란 객체를 예를 들어 설명하겠습니다.
    사람은 자신의 아버지로부터 태어났습니다. 그리고 자신의
    아버지의 유전정보들을 상속받았습니다.둘다 동일한 기능을
    가지고 있습니다.아버지는 "말한다"라는 기능을 가지고있고
    아버지의 정보를 상속받은 자식도 "말한다"라는 기능을 물려받았습니다.

    하지만 그렇다고 자식이 말하는것과 아버지가 말하는것과 완전히
    같은 기능을 가지고있을가요. 아닙니다.
    자식은 자신의 스타일의 말한다는 기능을 재정의한것이기때문입니다.
    간단히 예를 들면 아버지가 안녕(낮은톤) 한다고 자식도 안녕(낮은톤)
    으로 스타일이 같을까요? 아님니다 아들은 아들스타일대로 안녕(높은톤)
    으로 말할것입니다. 이처럼 상속받은 기능이나 상태를 상속받은 객체의
    스타일에 맞도록 재정의 하는것을 오버 라이딩이라고합니다.

     4. 오버라이딩설명

     다음은 오버라이딩설명을 위해 코드화시킬것을 그림으로
    나타낸것입니다.

    5. 코드화시킬것 대충설명

     class 동물
     {
      public virtual void 이동하다()
      {
       Console.WriteLine("걸어라");
      }
     }
     class 코끼리 : 동물
     {
      public override void 이동하다()
      {
       Console.WriteLine("크게 걸어라");
      }
     }
     class 생쥐 : 동물
     {
      public override void 이동하다()
      {
       Console.WriteLine("작게 걸어라");
      }
     }
     class Class1
     {
      static void Main(string[] args)
      {
      코끼리 a = new 코끼리();
      생쥐 b = new 생쥐();
     
       a.이동하다();
       b.이동하다();    
      }
     }

            
    설명후 : 이처럼 부모클래스에서 상속받은 메소드를 자신의 스타일로 다시
             재정의하는걸 오버라이딩이라고합니다.

     6. 코드설명

    오버로딩이란 ?

    예를들어
     사람이라는 객체는 "움직인다","먹는다","본다"등등 여러가지 개념이있는데
    그중에 먹는다라는 기능을 가지고 설명해보겠습니다.
    이먹는다는 기능은 항상 일정할까요?
    어떤경우에는 밥을 먹고 어떤경우에는 음료수를 먹고 또 약같은종류를
    먹을수도있고 초콜릿같은 형태도 먹을수있습니다.

     이처럼 각각 입력 인자들이 다르고, 들어가는 양도 다르고, 그입력인자
    들이 몸에 반응하게 하는 결과도 다릅니다.그런데 사람은 어떻게
    이렇게 다양한 종류의 입력값들을 먹을수있을까요? 이는 사람의 먹는다
    라는 기능이 이러한 다양한 인자값들에 다양하게 반응할수 있도록 정의되었기때문입니다.

     7. 오버로딩설명

    class 사람
     {
      public void 먹는다()
      {
       Console.WriteLine("우적우적");
      }
      public void 먹는다(string 씹는다)
      {
       
       Console.WriteLine("{0}을 질겅질겅",씹는다);
      } 
      public void 먹는다(string 동물종류,string 고기)
      {
       Console.WriteLine("{0}{1}를 우걱우걱",돼지,고기);
      }
     }
     class Program
     {
      static void Main(string[] args)
      {
       사람 먹다 = new 사람();
    
       먹다.먹는다();
       먹다.먹는다("껌");
       먹다.먹는다("돼지","고기");  
      }
     }

     

    사람이라는 클래스 안에 있는 메소드이름은 모두"먹는다"입니다.
    그러나 매개변수의 개수가 다르거나 자료형이 다릅니다.
    그래서 아래 프로그램클래스에서 주는 파라미터의 따라
    각각 다르게 메소드가 다르게 실행되고있습니다.
    이런형식을 오버로딩이라고 합니다.

    8. 코드설명

    이제 두개를 한곳에 놓고 정리해보겠습니다.
    이 오버라이딩이나 오버로딩은 모두 중복정의 혹은 재정의를 통하여
    구현되는 것입니다.그림보면 자식클래스가 부모클래스를 상속받으면서
    가져온 "말한다"라는기능을 자신의 스타일에 맞게 "여리게말한다"라고
    재정의해서 받았습니다.이처럼 오버라이딩은 상속에서의 재정의이고

    어떤객체에있는 한기능에 데이터타입이나,들어가는 인자수에따라 각각다르게
    메소드가 실행되는것처럼 객체에서의 재정의를 오버로딩이라고합니다.
    이러한 재정의방법들을 사용하여 객체의
    다양성을 확보하는것이 오버라이딩과 오버로딩의 목적입니다.

    9. 전체설명
    이것으로 설명x

     

    사용자 삽입 이미지

     

    사용자 삽입 이미지

     

    사용자 삽입 이미지

     

    사용자 삽입 이미지
    사용자 삽입 이미지

     

    사용자 삽입 이미지

     

    사용자 삽입 이미지

     

    728x90
    반응형
    LIST

    댓글

Designed by Tistory.