Google Groups không còn hỗ trợ đăng ký sử dụng hoặc đăng nội dung mới trên Usenet. Bạn vẫn có thể xem nội dung cũ.

[질문] #define은 JAVA에서 어떻게 표현할 수 있나요?

13.302 lượt xem
Chuyển tới thư đầu tiên chưa đọc

Kim Jinyong

chưa đọc,
03:00:00 30 thg 6, 199830/6/98
đến

제목 그대롭니다. C의 #define은 JAVA에서 어떻게 표현할 수 있나요?


윤세원

chưa đọc,
03:00:00 30 thg 6, 199830/6/98
đến

Kim Jinyong 이(가) <35987411...@inhavision.inha.ac.kr> 메시지에서
작성하였습니다...

>제목 그대롭니다. C의 #define은 JAVA에서 어떻게 표현할 수 있나요?
>
public static final int 로 표현하시면 됩니다.


Kim, Sung-Ryong

chưa đọc,
03:00:00 30 thg 6, 199830/6/98
đến

윤세원 이(가) <6na1iu$66f$1...@news.kornet.nm.kr> 메시지에서 작성하였습니다...


이것은 매크로를 이용해 정수형 상수 값을 정하는 경우에만 해당하겠지요?
매크로를 이용해 함수 기능을 정의하는 것은 자바로 할 수 없습니다. 예를 들어,
자바로는

#define MAX(a, b) ((a) > (b) ? (a) : (b))

와 같이 정의된 매크로를 대치할 방법이 없는 것 같습니다. 자바를 배우면서 제일
아쉬운 부분 중 하나가 템플릿과 같은 generic programming (제 마음대로 붙인
용어입니다)을 지원하지 않는다는 건데, 얼마전 고슬링의 인터뷰를 보니 그도
이를 지원하는 것을 제일과제로 생각하고 있더군요. 하지만 언제 될지는 아무도
모르는 일이 아닐까요? 위의 매크로가 하는 일을 자바로 해보려니 막상 저도 좋은
생각이 떠오르지는 않습니다.

다음으로 매크로는 컴파일 조건을 지정한다든지 하는 기능을 하는 경우도
있습니다. 예를 들어

#if _define(WINDOWS)
...
#elsif _define(LINUX)
...
#elsif
...
#endif

와 같은 형식인데 이것도 지금 자바 컴파일러에서는 지원하지 않는 것으로 알고
있습니다. 커맨드라인 도구를 사용하시는 분이라면 c/c++의 preprocessor만 따로
불러내 이런 처리를 하게 할 수도 있겠지만, 글쎄요...
----
Kim, Sung-Ryong
te...@himb.co.kr
te...@chollian.net

황 성준 (Seong-Jun Whang)

chưa đọc,
03:00:00 30 thg 6, 199830/6/98
đến

On Tue, 30 Jun 1998 14:13:53 +0900, Kim Jinyong
<g942...@inhavision.inha.ac.kr> wrote:

>제목 그대롭니다. C의 #define은 JAVA에서 어떻게 표현할 수 있나요?

C의 #define은 전처리기 지시자(preprocessor directive)라고 하지요.
전처리기가 어떤 처리를 해야 하는지를 지시하는 역할이지요.
정확히 말해서, C의 언어의 요소는 아니지요. 유닉스라는 운영체제가
제공하는 특성이라고 봐야 하겠지요...

결론부터 말하자면, 자바에서 직접적으로 이를 표현할 수 없습니다만,
이를 사용하는 경우를 따져 본다면 얼마든지 대안을 찾을 수 있습니다.

#define 지시자는 (1) 상수를 정의하거나 (2) 매크로를 정의하는 경우에
주로 사용하지요.

(1)의 경우에 상수는 final static 변수 정의로,
(2)의 경우는 메소드(method)를 정의하여 해결 할 수 있습니다.

예를 들면, (1)의 경우로, 100의 값을 갖는 상수로 MAX_NUM을 정의하고자
하면...

// #define MAX_NUM 100

class MyClass {
final static MAX_NUM = 100;
:
};

(2)의 경우로, 두 개의 정수를 비교하여 작은 값을 가지는 쪽을 알아
내려면...

// #define min(x,y) ((x) < (y) ? (x) : (y))

class MyClass {
:
int min (int x, int y) {
return x < y ? x : y;
}
:
};


아무쪼록 도움이 되기를!
--------
황 성준
mailto:donq...@netian.com
http://www.netian.com/~donquabi/java (자바리스트)
(주)이앤이 오브젝트솔루션 사업팀
서울시 서초구 서초동 Korea Business Center 1118호

우리나라가 자바 강국이 되기를 기원합니다!

Kwnag Woo Nam

chưa đọc,
03:00:00 1 thg 7, 19981/7/98
đến Kim Jinyong

#define 구문이나,
#ifdef
#endif 와 같은 조건 컴파일 구문에 대해서

FAQ에 이렇게 나오더군요.


1. #define구문은

static final boolean DEBUG = true;

와 같은 형태를 사용하고.


2.조건부 컴파일구문은..

static final TRACE = true

if (TRACE) {
System.out.println("Checking"+s);
}


이런형태로 프로그램을 짜놓으면 컴파일시에 TRACE값 여부에 따라
조건부 컴파일이 됩니다. 마치 런타임 조건처럼 보이지만 사실은조건부
컴파일이
된답니다.

Byeong-Jun Park

chưa đọc,
03:00:00 1 thg 7, 19981/7/98
đến

Kim, Sung-Ryong wrote:
> 다음으로 매크로는 컴파일 조건을 지정한다든지 하는 기능을 하는 경우도
> 있습니다. 예를 들어
>
> #if _define(WINDOWS)
> ...
> #elsif _define(LINUX)
> ...
> #elsif
> ...
> #endif
>
> 와 같은 형식인데 이것도 지금 자바 컴파일러에서는 지원하지 않는 것으로 알고
> 있습니다. 커맨드라인 도구를 사용하시는 분이라면 c/c++의 preprocessor만 따로
> 불러내 이런 처리를 하게 할 수도 있겠지만, 글쎄요...

모든 플랫폼에서 동일하게 동작하는 언어로서의 특성을 잘 살린다면,
이렇게 조건부 컴파일을 하는 것이 얼마만큼이나 중요할까요?
C나 C++의 경우야 시스템에 따라 설정값이나 기본 내장함수가 다르기
때문에 위와 같은 기능이 없으면 치명적이지만, 자바는 모든 플랫폼에서
동일하게 동작하므로, 이런 기능이 별로 큰 문제가 되지 않으리라
생각이 됩니다.
게다가 요 아래 보니까 조건부 컴파일이 된다는 군요.
제 생각으로는 컴파일 조건 설정은 크게 문제 될것이 없다는 생각입니다.

박병준.
--
------------=====<<<<< Peace forever to you & all of yours
Byeong-Jun Park
Computational Vision & Fuzzy System Labarotory (CV&FS LAB)
Graduate Dept. Electronic Eng. Hanyang Univ. ,KOREA 425-791
http://matilda.hanyang.ac.kr/~bjpark Tel: 0345-400-4087
mailto:bjp...@fuzzy.hanyang.ac.kr
-----------------------------------------------------------

Kim, Jongsu

chưa đọc,
03:00:00 2 thg 7, 19982/7/98
đến

자바가 공격받는 점 가운데 조건부 컴파일의 기능이 없다는 것이 있습니다. 즉,
자바는 조건부 컴파일의 기능을 제거함으로써 대규모 프로젴트 수행시 중요한
precondition, postcondition, invariant등을 검사할 수 있는 능력이 없다는
것입니다. 언어에 이와 같은 기능이 내장되어 있는 것도 있습니다만 (Eiffel)
C/C++에서는 조건부 컴파일로서 구현해 왔던 것입니다.

이는 매우 중요한 점이기 때문에 자바 좋아하시는 분들에게는 또
마이크로소프트야 하시겠지만 마이크로소프트는 조건부 컴파일의 기능을 자바
컴파일러에 추가하였습니다. 마이크로소프트를 좋아하고 안하고를 떠나서 저는
중요한 기능의 추가라고 생각하고 있습니다.

김 종수
현소프트
ki...@hyeonsoft.com


Jaewoo Kim

chưa đọc,
03:00:00 3 thg 7, 19983/7/98
đến

Kim, Sung-Ryong 이(가) <6na3kt$6of$1...@hiline.shinbiro.com> 메시지에서
작성하였습니다...

...


|아쉬운 부분 중 하나가 템플릿과 같은 generic programming (제 마음대로
붙인
|용어입니다)을 지원하지 않는다는 건데, 얼마전 고슬링의 인터뷰를 보니
그도
|이를 지원하는 것을 제일과제로 생각하고 있더군요. 하지만 언제 될지는
아무도
|모르는 일이 아닐까요? 위의 매크로가 하는 일을 자바로 해보려니 막상 저도
좋은
|생각이 떠오르지는 않습니다.

Generic programming은 이미 잘 정의된 용어입니다 :).
Functional Imperative Programming 이라고도 할 수 있겠읍니다.
Java의 라이브러리를 그대로 사용할 수 있고

o Parameterized Polymorphism (Generic)
- F-bounded Polymorphism
o First-class function (Funtional)
o Algebraic Data Type (Pattern Matching)

등의 언어 특징을 지원하는 Java의 확장 Pizza를 눈여겨 볼 필요가 있읍니다.
지금 부터 사용하는 연습을 해보신다면 좋은 경험이 되겠읍니다.
단점은 당연한 것이겠읍니다만 Java에서 Pizza로 작성된 코드를 거꿀로
불러쓸
수 없다는 점과 Hand-coded Java code보다 성능이 떨어질 수도 있다는
점입니다.

위의 실험적이지만 너무나 괜챦은 확장을 기반으로 GJ, Generic Java
Compiler가
JDK의 최신판을 아직 지원하진 않지만 별도의 compiler로 작성되고 있읍니다.
GJ는 JDK1.1.5 이후의 Inner/anonymous class 확장이 사실상 functional
programming
을 어렵싸리 흉내낼 수 있으며 Algebraic Data Type은 프로그래밍 기법으로
어렵싸리
표현할 수 있다고 보고 P.P/F.P 만을 지원하여 GJ와 Java사이의 100% 성을
호환성을
보장하며 성능이 우수한 compiler를 만들어 내고자하는 값진 노력입니다.

믿을 만한 점은 Haskell, ML을 설계한 프로그래밍 언어 연구의 대가 Wadler와
Oderski
의 작품이기 때문이며 Theory into Practice라는 논제하에 진행되고 sun사의
후원을
받고 있는 연구 프로젝트의 결과입니다.

|
|다음으로 매크로는 컴파일 조건을 지정한다든지 하는 기능을 하는 경우도
|있습니다. 예를 들어
|
|#if _define(WINDOWS)
| ...
|#elsif _define(LINUX)
| ...
|#elsif
| ...
|#endif
|
|와 같은 형식인데 이것도 지금 자바 컴파일러에서는 지원하지 않는 것으로
알고
|있습니다. 커맨드라인 도구를 사용하시는 분이라면 c/c++의 preprocessor만
따로
|불러내 이런 처리를 하게 할 수도 있겠지만, 글쎄요...


conditional compilation의 요구는 Java에서는 그리 크지 않습니다.
Design-by-contract 개념역시 Inheritance와 module 기능을 활용하면
효율성의 저하없이 잘 구현될 수 있다고 생각합니다.


0 tin nhắn mới