Java2005. 3. 22. 10:34

Varargs

Varargs 기능은 여러 개의 가변적인 아규먼트를 메소드로 전달하는 것을 허용합니다.
void argtest(Object ... args) { for (int i=0;i <args.length; i++) { } } argtest("test", "data");


Jini Say
Varargs 는 JCP 아저씨들이 만든 신조어 입니다. Variable Arguments 정도가 되겠네요. 상당히 유용합니다. 그 동안 이 짓을 하기 위해서 배열이나 Linked List를 사용했습니다. 보기에 좋지도 않고 번거롭고 좋기는 하지만, 타입체크가 문제가 되겠네요.

2004-04-22 14:44:22.0 (투바 61.40.236.142) D

varargs 는 JCP 에서 처음 나온 단어가 아닐 겝니다.
C 에서는 이미 오래전부터 저런 매크로가 있었습니다.
예를 들면,

printf( "%s %d %f \n", a, b, c );

라는 형식으로 함수를 만들려면, 인자를 가변적으로 처리해야 되거든여.
varargs 라는 매크로가 있답니다.

그냥 잡담이네여.

2004-05-20 23:54:10.0 (papilla 220.122.230.33) D

이번 1.5에서 Generic Type이 지원되지요.

예를 들어 Vector<Integer>로 만들면 Vector에서 꺼낼때 자동으로 오토박싱을 해 주어서 Integer로 바로 꺼낼수 있게 되지요. 그 말은, 단순히

Class에 대한 추상화를 제공하는 것이 아니라, casting까지 가능한 수준으로, Type에 대한 추상화가가능해 진 것입니다. java1.5의 class.java를 보시면 왜 이러한 것들이 가능해 졌는지 아실 수 있으실 겁니다. Type에 대한 추상화 존재 없이는, 리턴형이 고정될 수 밖에 없습니다.

결국 type에 대한 추상화가 가능해짐으로 인해, varargs가 가능해 졌고요, 이것이 가능해지자, 오랜 고전 프로그래머의 숙원이던, printf가 생겨났습니다.

하지만 개인적으로 이것에 대해 아주 부정적으로 생각합니다. printf가 없다 하더라도 자바에는 훨씬더 강력한 Formatting기능이 있습니다. printf는 출력과, 포멧팅이 합쳐진 형태이기 때문에, 이 둘 사이의 응집성이 지나치게 높아, 한번 출력하고자 만들어진 데이터는 다른데 써먹을 수가 없습니다.

자바는 기본적으로 포멧팅과 입출력은 분리되어있습니다. 자칫 멀쩡한 스트림에 어댑터를 덕지 덕지 붙여 사용하는 것이 불편해 보일 수도 있지만, 이것은 매우 강력한 활용성을 보여줍니다.

예를 들어toString()과 paint(Graphics g)처럼 표현영역에 따른 포멧팅이 출력 자체와 분리되어있다면, 컴포넌트는 어디에서든 표현이 가능해 지지요.

이번 자바1.5는 개념의 명확성을 좀 잃더라도, 개발자들의 편의에 맞추어 굴복(?) 한 것 처럼 보여, 다소 아쉬움이 많이 남습니다. Class.java같은 코어의 내용이 변경되었다는 것은 어떻게 보면 비극입니다

Posted by la30321