java

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ java ] in KIDS
글 쓴 이(By): kreach (스르방)
날 짜 (Date): 2001년 1월  4일 목요일 오전 10시 51분 25초
제 목(Title): Re: import와 extend의 차이?


사실상 C에서는 컴파일을 하기 전에 프리프로세싱이라는 걸 하죠.
#으로 시작하는 문장은 프리프로세싱의 대상이 됩니다.
include도 마찬가지입니다. include는 그저 physical file inclusion에
불과합니다.  C나 C++에서는 클래스의 정의가 사용 전에 되어 있지
않으면 컴파일타임 에러를 냅니다. 함수도 물론 마찬가지로 
그 함수의 사용 전에 프로토타입이 정의 되어 있지 않으면 컴파일타임
에러죠. 물론 다들 알고 계시겠지만요. 이로 인해 include라는 프리
프로세서가 필요한 거고요. 물론 헤더 파일에는 이들 말고도 많이
있겠습니다만, 주로 그런 거죠. 함수의 prototype 클래스의 선언이나
클래스의 forward declaration같은거, 혹은 공용체나 구조체 등등.
하지만 using이나 import는 physical file inclusion을 하는 게 아니고,
Scope resolution을 합니다. 예를 들어, 자바에는 Timestamp라는
클래스가 있죠. 하나는 java.util 패키지에 있고, 또 하나는 
java.sql 패키지에 있습니다. 불행하게도 같은 이름을 하고 있죠.
그러나 다른 스코프에 있죠. 또 제가 com.kreach.ejb.Timestamp라는
클래스를 만들 수도 있습니다. 같은 클래스 이름이지만 스코프는
다릅니다. 어떤 걸 쓰고 싶으냐는건 내 맘이죠. 내가 import하는
Timestamp를 쓰는 겁니다. 그럼 둘다 임포트를 하면 어떻게 되겠습니까?
이때는 스코프 컨플릭이 생겨서 에러가 나죠. 이럴 때는 스콥까지
같이 적어주면 되긴 합니다. 예를 들어, 

java.sql.Timestamp now; 라던가 아니면
java.util.Timestamp then; 이라고 할 수가 있겠죠.

그리고 위의 어느 분이 말씀하시길 import를 하지 않고 extend를
할 수 있느냐고 하셨는데 import를 전혀 안쓰고도 모든 것이 가능하죠.
위에서도 말씀드렸듯이 import는 Scope Resolution을 합니다.
이렇게 하면 import가 필요없죠.


public interface User extends javax.ejb.EJBObject {

  public String getUsername() throws java.rmi.RemoteException;

}


제가 오히려 더 헷갈리게 한 건 아닌지 모르겠네요. 새해 복 많이 받으십시오.
[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.