JAVA/in 기초

Polymorphism

lahuman 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