'upcasting'에 해당되는 글 2건

  1. 2008.07.10 클래스의 업캐스트 - 혼동하지말자.
  2. 2008.05.26 [Java] Interface의 Upcasting

보통 개발 할 때 업캐스팅을 많이 사용한다.

인터페이스던 추상클래스던 ....

다형성을 위해서..

아래의 예를 보자.

public class Shape {
 public void draw() {
  ...
}
}

public class Circle extneds Shape {
 public void draw() {
...
}

public void myDraw() {
...
}
}

public class Test {
 public static void main(String args[]) {
 Circle c = new Circle();
c.draw();
c.myDraw();
Shape s;
s = c;
s.draw();
s.myDraw();
}
}

보면
에러가 날까.. 아니면 정상적으로 작동할까..
일반적으로 업캐스팅을 하고나면 , 그냥 아무 생각없이 하위 클래스의 메서드를
쓰게 되는데 내부적으로 봤을때 하위 클래스의 메서드를 사용 할 수 있는 경우는
"그 메서드가 상위 클래스에 존재 할때"
에 하위클래스의 메서드를 사용 할 수 있는 것이다.

만약, 하위클래스에서 오버라이드 하지 않았다면,
상위클래스의 메서드가 호출될 것이다.

오버라이드 했다면 당연히 하위 클래스의 메서드가 호출될 것이지만, 만약 상위 클래스에 없는데 위

경우처럼 s.myDraw();를 호출하면 참조 할 수 없는 영역이기 때문에 컴파일 에러가 발생하게 된다.

그런고로..
위 예제에서는
s.myDraw();

부분에서 컴파일 에러가 발생하게 된다.

참고 : jabook.org

Posted by 용식

TV들이 아주 작 작동하는 군요. 하지만 사용자는 인터페이스를 통해서 조작하고 있습니다. 물론 TV를 만들어지만 TV내부는 각 회사에서 알아서 하겠죠. 하지만 TV의 인터페이스가 같기 때문에 어느 회사의 제품이나 조작하기는 편할 것입니다. 데이터베이스의 드라이브도 이러한 방식으로 Sun사에서 Database의 interface를 정의해두고 그 interface에 의해서 만들도록 하는 것입니다.

 

                           TVBoard s = new SSgTV();

                           TVBoard g = new LGgTV();

 

이 두 줄을 유심히 봐 주시기 바랍니다. 일반적인 Upcasting의 개념이 그대로 interface에서도 적용되고 있습니다. 이것은 인터페이스 자체도 클래스이기 때문에 Upcasting을 적용할 수 있는 것입니다. 사용자 측면에서 인터페이스가 고정되어 있으면 많은 시간과 비용을 절약할 수 있을 것입니다. 모든 TV가 같은 인터페이스로 되어 있다면 하나의 조작법만 안다면 모든 TV를 조작 할 수 있을 것입니다. 이것이 바로 인터페이스의 본질적인 역할입니다. 말 그대로 인터페이스는 인터페이스입니다.

 

 

 

 

 

 

5.4.3 Abstract와 Interface에서의 Upcasting

 

 우리는 upcasting을 일반적인 클래스 구조에서만 살펴 보았습니다. 하지만 이것은 abstract와 interface에서도 적용 되어 질 수 있습니다. 그 구조는 다음과 같을 것입니다.

그런데 다음과 같은 질문을 할 수 있을 것입니다.

n         abstract는 객체를 생성할 수 없다.

n         interface는 객체를 생성할 수 없다.

이러한 말에 부딪히게 됩니다. abstract와 interface는 객체를 생성하는 것이 아니라 만들어진 객체를 할당 받는 것입니다. 형은 같기 때문에 이러한 것이 가능합니다. abstract나 interface로는 new연산자를 사용하지 않습니다. 단지 만들어진 객체를 upcasting을 이용해서 넘겨 받을 뿐입니다. 이러한 것은 많은 장점을 내포하고 있습니다. 알고 보면 interface는 빈 껍데기에 불과 합니다.

사용자는 용량이 적은 빈 껍데기만 가지고 있어도 모든 작업을 전부 수행 할 수 있습니다. 우의 그림에서는 설명을 위해서 임의의 interface만들었습니다. 이 인터페이스를 이용해서 우리는 다음과 같은 코드를 작성 할 수 있을 것입니다.

 

n         Shape s = new Circle();

n         Action a = new Circle();

n         Attribute ab = new Circle();

n         Circle c = new Circle();

 

이 코드의 장점은 사용자는 내부를 몰라도 된다는 것입니다. interface만 있다면 어떠한 작업이라도 전부 할 수 있습니다. 이러한 장점은 우리가 직접 만들어서 작업하기 보다는 내부적으로 이루어지는 경우가 아주 많습니다. 하지만 이것을 잘 이용하면 보다 정교한 프로그램작업을 할 수 있으리라 생각됩니다.

 

 

5.4.4 결론

여러분들이 잘 모르고 사용하는 Upcasting은 아주 많은 장점을 제공하고 있습니다. 자바도 여러 종류이지만 고급 자바로 갈수록 이 Upcasting개념은 더욱 철저하게 적용됩니다. RMI, Enterprise Java Beans, Mobile Java, Personal Java, Java Dynamic Management Kit등 사용 안 되는 곳이 없습니다. 어차피 자바를 배우면 실무에서 다루지 않겠습니까?

 

다형성을 주장하는 Upcasting의 장점은 abstract, interface, encapsulation, overriding 등 아주 많은 부분과 관련이 있습니다. 이 upcasting과 interface에 대해서 제대로 이해했다면 자바는 바로 여러분들의 손에 있는 것입니다.

 

출처 : www.jabook.org

Posted by 용식