객체지향이란 3편 :: C# 인트로[SSISO Community]
 
SSISO 카페 SSISO Source SSISO 구직 SSISO 쇼핑몰 SSISO 맛집
추천검색어 : JUnit   Log4j   ajax   spring   struts   struts-config.xml   Synchronized   책정보   Ajax 마스터하기   우측부분

C# 인트로
[1]
등록일:2008-03-27 19:53:18 (0%)
작성자:갤러리정
제목:객체지향이란 3편

객체의 다형성

객체지향의 진주이자 마지막 관문이며 가장많이 사용되며 가장많은 질문과 회의를 낳게하는 다형

성에 대해 적으며 간략한 객체지향에 대한 글을 접을까 합니다

1. 다형성(polymopism) 
    A. 정의 
         Super class type의 Reference변수로 sub class type의 객체를 참조한다. 쉽죠? ^^; 예를

         봅시다. 
        예)
                abstracte class Employee
                {
                        String name;
                        float bs;
                        double salary;
                        abstracte public void setSalary(); 
                   //이렇게 하면 반드시 밑에서 overriden해야한다. 
                  /* abstracte 선언은 밑에서 객체로 생성하지 못하게할 내용을  나타낼때 사용한다. 
            또한 abstracte클레스라고 해서 반드시 포함된 모든것이 다 abstracte가 되는건 아니다.
                        */
                }

                class SalesEmployee extends Employee
                {
                        public void setSalary()
                        {
                                salary = bs*1.5;
                        }
                        public void aa()
                        {
                                System.out.println("aa");
                        }
                }

                class RegularEmployee extends Employee
                {
                        public void setSalary()
                        {
                                salary = bs*1.3;
                        }

                        public void bb()
                        {
                                System.out.println("bb");
                        }
                }
일단은 예제 설명은 접어두고 예제의 내용은 기억하기 바란다.
자아 이제 심오한 이야기를 하겠다.
                SalesEmployee s[] = new Employee[2];


이문장이 실행되면 결과는? 맞춘분께는 아무것도 못드림다. 결과는 에러. 그렇다면 아랫걸보자.


                Employee e[] = new SalesEmployee[2];


이문장은 정상적으로 실행이된다. 왜? 소스코드를 보면 SalesEmployee가 기억장소에 저장되면은

name, bs, salary, setSalary(), 그리고 aa가 기억되어진다. 근데 위의 문장은 Employee type으
로 객체를 선언했다. 그러면 레퍼런스하는곳이 자신이 레퍼런스하고자 하는 숫자보다 작으므로 
에러가 발생한다. 밑에 문장은 그런 이유로 가능한것이다. 
기억하자. sub class type의 레퍼런스로 super class를 참조할 수 없다.
이제 다형성을 정의헤보자. 객체지향이 제사용성의 측면을 무쟈게 강조하고 있다는건 다 아실것
이다. 그럼 그런 연유에서 상속성이 나오게 된것도 알것이다. 그렇다면 변화를 주지 않고  사용
할 수 있는 것의 한계는 불보듯 뻔한것이다. 하나의 선언되어진 객체를 여러가지형태로 재정의 
해서 사용할 수 있는 것이 다형성이다. 

 *overriden 


 재정의라고도 한다. 위의 소스를 보자 실제 메인부분에서(아직은 없지만) setSalary를 호출한다
면 무엇이 호출될까? 정답은 밑에서 정의한 것이 호출된다. 어떤 메쏘드를 호출할 때 상속이 이
루어졌다면 그 상속의 틀에있는 생성자들에 대하여 override검사라는것을 jvm이 한다.   그레서 
 맨 나중에 재정의 된것을 사용하게 되는것이다. 왜? 상상을 해보라. 기껏 재정의 해놓은게 늘쌍 
 부모클레스의 것만 사용된다면 허무하지 않겠는가? 위 소스를 완성해보자.

                abstracte class Employee
                {
                        String name;
                        float bs;
                        double salary;
                        abstracte public void setSalary();
                }

                class SalesEmployee extends Employee
                {
                        public void setSalary()
                        {
                                salary = bs*1.5;
                        }
                        public void aa()
                        {
                                System.out.println("aa");
                        }
                }

                class RegularEmployee extends Employee
                {
                        public void setSalary()
                        {
                                salary = bs*1.3;
                        }

                        public void bb()
                        {
                                System.out.println("bb");
                        }
                }

                public class PolyTest
                {
                        public static void main(String args[])
                        {
                                Employee e[] = new Employee[2];
                                e[0] = new SalesEmployee;
                                e[0].bs=1000000;
                                e[0].setSalary();
                                e[1] = new RegularEmployee;
                                e[1].bs=1000000;
                                e[1].setSalary();
                                
                                System.out.println(e[0].salary+":"+e[1].salary);
                        }
                }

결과는? 직접해보시기를.... 
그리고 객체지향에 대해 궁금하신분은 아래 싸이트를 가보시기 바란다. 
 www.omtgroup.com

[본문링크] 객체지향이란 3편
[1]
코멘트(이글의 트랙백 주소:/cafe/tb_receive.php?no=3037
작성자
비밀번호

 

SSISOCommunity

[이전]

Copyright byCopyright ⓒ2005, SSISO Community All Rights Reserved.