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("형이 맞지 않습니다."); }
* 여기까지 다형성에서 이용되는 기술에 대해 알아 보았습니다.
* 다음은 예제 입니다.
예제 내용 : 고객과 음식의 개념에서 다형성을 이용하여 샘플을 만들 었습니다.
예제 파일 :
728x90