ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Polymorphism
    JAVA/in 기초 2014. 2. 3. 00:02
    728x90

    다형성이란 하나로 여러가지 일을 하는 것을 이야기 한다.



    상속과 관련된 다형성의 기법들

     - 인터페이스(interface)

     - 오버라이딩(Overriding)

     - 추상 클래스(Abstract Class)

     - 추상 메소드(Abstract Method)

     - 다운캐스팅(Downcasting)

     - 업케스팅(Upcasting)

    *예를 들자면, 객체지향을 이야기 한다. 객체(Object)는 모든 형태로 변환(캐스팅)이 가능 하다


    • Abstract Class & Abstract Method

    추상 메소드
     - 메소드 몸체가 없는 메서드를 추상 메서드라고 한다.
     - 메소드 선언부에 abstract 키워드를 사용해야 한다.

    //일반 메소드
    public void sayHello(){}
    
    //추상 메소드
    public abstract void sayHi();
    
    추상 클래스
     - 몸체 없는 메서드를 포함한 클래스를 추상 클래스라고 한다.
     - 클래스의 선언부에 abstract키워드를 사용해야 한다.

    //추상 클래스
    public abstract class CallHello{
    //추상 메소드
    public abstract void sayHi();
    }
    

    추상 클래스 특징
     - 완전한 클래스가 아니기 때문에 추상 클래스를 이용해서 객체를 생성 할 수 없다.
     - 추상 클래스를 완전한 클래스로 만들기 위해서 상속의 기법을 이용해서 모든 추상 메소드를 구현 하면 된다.

    abstract 키워드
     - 추상 메소드는 메서드 앞부분에 abstract 키워드를 붙여야 한다.
     - 추상 메서드를 하나라도 포함하고 있다면 클래스 앞부분에 abstract 키워드를 붙여야 한다.

    * 추상 메소드를 포함 하지 않은 추상 클래스의 경우 무조건 상속받도록 하기 위해서 사용한다.

    • Interface
    인터페이스란 골격만 가지고 있는 클래스를 이야기 한다.
    인터페이스 VS 추상 클래스 차이점
     
     - 추상 클래스는 일부분이 추상 메소드이다.
     - 인터페이스는 추상 메소드 만으로 이루어 진다.

     - 추상 클래스는 extends를이용해서 추상 메소드를 구현 한다.
     - 인터페이스는 inplements를 이용해서 추상 메소드를 구현한다.

    인터페이스 특징
     - 모든 메소드는 묵시적 public abstract이다.
     - 인터페이스는 객체를 생성 할 수 없다.
     - 인터페이스에서 멤버변수를 선언하면 기본으로 public static final(상수) 형식이 된다.

    자바의 다중 상속
     - 단일 상속을 기본으로 한다.
     - 변칙적으로 다중 상속을 지원하기 위해서 인터페이스를 이용한다.
     - 인터페이스는 기능적인 측면에서 순간적으로 구현해서 사용하기 때문에 복잡한 상속구조에 얽매이지 않는다.

    * 추후 디자인 패턴에서 알아보자.

    • Upcasting
    특정 객체가 하위 클래스의 형에서 상위 클래스의 형으로 캐스팅 되는 것이며 형만 정확하다면 묵시적으로 캐스팅 된다.

    기본 데이터 타입의 캐스팅
     - 일반적으로 캐스팅의 기본 원리는 작은 것이 큰 것으로 되는 것이다.
     - 작은 크기의 데이터는 큰 크기의 데이터로 쉽게 들어 갈 수 있다.
    //자동 캐스팅
    byte b = 12;
    int i = b;
    
    //오류 발생
    int i = 200;
    byte b = i;
    //해결을 위해 강제로 캐스팅 한 경우 오버 플로우 발생
    byte b = (byte)i;
    

    많이 사용 되는 업캐스팅의 예
     - 상위 클래스로의 업캐스팅
     - 추상 클래스로의 업캐스팅
     - 인터페이스로의 업캐스팅

    업캐스팅시 주의 사항
     - 상위 클래스의 형에 존재하는 메소드만을 상위 클래스의 이름으로 호출 할 수 있다.
     - 하위 크래스에만 존재하는 메소드는 상위 클래스의 이름으로 호출 할 수 없다.

    인터페이스를 사용하는 목적
     - 자바의 인터페이스는 사용자와의 상호작용을 위해서 사용한다.
     - 사용자에게 인터페이스만 공개했을 때 해당 객체가 다양한 기능을 보유하더라도 인터페이스에 해당하는 기능만을 사용하게 할 수 있다.
     - 인터페이스로 작업을 제한했기 때문에 해당 객체를 잘못 사용할 오류를 막는다.

    • Downcasting
    업캐스팅한 것을 다시 원래의 형으로 복원 시켜주는 작업

    다운캐스팅의 특징
     - 업캐스팅된 것만 다운 캐스팅 시킬 수 있다.
     - 다운 캐스팅은 강제 캐스팅을 원칙으로 한다.

    다운 캐스팅의 형 확인 방법

    Top t = new Middle();
    
    //다운 캐스팅
    Middel m = (Middle)t;
    
    //instanceof 키워드를 이용한 다운 캐스팅
    if(t instanceof Middel){//형확인
     Middel m = (Middle)t; 
    }else{
     System.out.println("형이 맞지 않습니다.");
    }
    
    


    * 여기까지 다형성에서 이용되는 기술에 대해 알아 보았습니다.


    * 다음은 예제 입니다.


    예제 내용 : 고객과 음식의 개념에서 다형성을 이용하여 샘플을 만들 었습니다.

    예제 파일 : 


    src.zip



    728x90

    'JAVA > in 기초' 카테고리의 다른 글

    Formatting 기능  (0) 2014.02.21
    예외처리(Exception)  (0) 2014.02.21
    컬랙션(Collection)과 맵(Map) 계열  (0) 2014.02.21
    Overloading, Constructor, Inheritance, Overriding, this, super  (0) 2014.02.02
    Java in Memory  (0) 2014.01.19
Designed by Tistory.