본문 바로가기

공부/컴퓨터

1.5 (Tiger) Beta1 에 대한 대충 정리한 내용.

반응형
About Java 1.5 ( Tiger )

자바 1.5 ( 코드명 : Tiger )은 아직 정식으로 발표된것은 아니다. ( 2004년 4월 12일 현재 Beta1까지 공개 되어 있음)

아직 베타판이라 정확한 스펙 및 성능 쪽은 변경될수 있으나, 현재 공개되어 있는대로 이야기 드리고자 합니다.

이 내용은  2004년 2월 21일 JCO에서 주최한 “제 5회 한국 자바 개발자 컨퍼런스” 를 기준으로 이야기 합니다. 아마도 Sun에서 나오신 분이 직접 설명하신거라 거의 바뀔리는 없다고 생각됩니다.

아래에서 설명할 내용은 다음과 같습니다.
1. AutoBoxing / UnBoxing
2. Enhanced for loop
3. Generics
4. Static Import
5. Type-safe Enumerations
6. Varargs


XML 이나 DB 관련 , 컨커런시 프로그래밍 관련, 코어 부분등이 있으나.
시간상 우리들이 많이 접해서 쓸수 있는것들만 나열해 보았습니다. ^_^



New Language Changes For J2SE 1.5
7가지 주요 새로운 사항들.

1. AutoBoxing / Unboxing

  일반적으로 어떠한 메소드에서 int형을 넣을려고 하는데.
  이것을 객체형으로 바꾸어서 넣는 메소드라면 다음과 같은 작업을 해 주어야 했다.
  Class SomeClass {
    public static someMethod( Interger i ) {
      // Some Code
    }
  }

  SomeClass.someMethod( new Integer(1) );

  그런데 자바 1.5에서는 AutoBoxing을 지원하므로 다음과 같이 할수 있습니다.

  SomeClass.someMethod( 1 );


  Unboxing은 위와 반대의 경우가 되는것임. ^_^;



2. Enhanced for loop("foreach");

  '강화된 루프' 문이라고도 하는데, 좀더 사용하기 쉽게 된 루프문이라고 볼수 있다.
  ( 일반적으로 다른 언어에서는 foreach 라고 되어 있는데, 자바에서는 for 문을 활용해서 만들게 됩니다. )

  일반적으로는 배열이나, 컬렉션을 탐색하기 위해서는 다음과 같은 소스를 작성합니다.

  for ( Iterator i = c.iterator() ; i.hasNext() ; ) {
    SomeClass sc = (SomeClass) c.next();
    // Using sc Code.
  }


  하지만 강화된 루프문을 사용하면 좀더 편하게 사용할수 있습니다.
  for ( SomeClass<SomeType> sc : c )  {
    // Using sc Code.
  }

    

3. Generics

  '제너릭' 이란.. 보통 컬렉션등을 사용하면 캐스팅을 해 주게 됩니다.
  다음과 같죠.

  List l = new LinkedList();
  l.add(new Integer(0));
  Integer i  = (Integer) l.iterator.next();

  물론 AutoBoxing을 사용하면 위의 소스는 다음과 같이 변합니다.

  List l = new LinkedList();
  l.add(0);        // Using AutoBoxing
  Integer i = (Integer) l.iterator.next();

  보다시피 LinkedList 나 각종 컬렉션들은 모든 형을 다루기 위해서
  Object 형을 받아서 처리 하게 됩니다.
  무척이나 귀찮죠. 하지만 다음과 같이 사용하면 좀더 편하게 쓸수 있습니다.

  List<Integer> l = new LinkedList<Integer>();
  l.add(0);        // Using Autoboxing
  Integer i = l.iterator.next();

  LinkedList를 처음 생성할때부터 Integer 형만 받는다고 처리를 하는겁니다.
  물론 그 LinkedList 를 가리키게 될 List 형 l 역시 Integer 형을 받아야 겠죠.
  그리고 실제로 사용할때에는 (Integer) 형으로 캐스팅할 필요가 없어 집니다.
  ( 이미 LinkedList 가 Integer형 만 들어가도록 설정을 해 두었기 때문이죠. )

  다른 예제를 하나더 보도록 하죠. 이번 예제는 HashMap를 이용한 예제입니다.

  1.4 이전의 예제입니다.

  HashMap map = new HashMap();
  map.put("Chan", new Human() );
  Human chan = (Human) map.get("Chan");

  위의 예제를 제너릭을 이용해서 만들어 본다면 다음과 같이 될겁니다.

  HashMap<String, Human> map = new HashMap<String, Human>();
  map.put("Chan", new Human());
  Human chan = map.get("Chan");

  이 예제 역시 위와 같은 것입니다. 역시 map.get()을 사용해서 받을때 따로 캐스팅해 주지 않아도 된다는 장점이 있습니다. ^_^


  C++ 에서는 이미 만들어져 있었는데,
  자바에서는 1.5에서 적용될것 같습니다.


4. MetaData

5. Static Import
  static import 시켜 주면, static 메소드에 대해서 클래스명을 적을 필요가 없어집니다.
  예를들어 예전에 sin() 함수를 쓰기 위해서는 다음과 같이 해야 했습니다.

  double d = Math.sin(x);

  하지만 이번에 새로 만들어질 static import를 사용한다면 다음과 같이 바꿀 수 있습니다.

  import static java.lang.Math;
  double d = sin(x);


6. Type-safe Enumerations
  C에서 있던 enum 과 같은 역할을 한다.
  자바에서는 enum 이 없었기 때문에. 이번에 새로 만들어진 타입이라고 볼수 있다.
  실제로 이전에 enum 을 구현하기 위해서는 복잡한 과정이 필요했다.
  하지만 자바 1.5(타이거)가 나오면서 새로운 타입이생긴것이다.

  간단한 예제는 다음과 같다.

  public enum Suit { spade, diamond, club, heart};
  public enum Value { ace, two, three, four, five, six, seven, eight, nine, ten , jack, queen, king };

  List<Card> deck = new ArrayList<Card>();
  for ( Suit suit : Suit.VALUES )
    for ( Value value : Value.VALUES )
      deck.add(new Card(suit,value));

  Collections.shffle(deck);


  

  물론 다음과 같이 쓸수도 있다.
  public enum Color { RED, BLUE, YELLOW, BLACK };
  Color color = Color.BLACK;

  if ( color == null ) ; // Check color object.
  switch (color) {
    case BLUE:
         break;
    case YELLOW:
         break;
  }


  public enum Coin {
    penny(1), nickel(5), dime(10), quarter(25);
    Coing(int value) {
      this.value = value;
    }
    private final int value;
    public int value() {
      return value;
    }
  }


7.Varargs
  자바에서는 정해진 인자의 갯수만 받을수 있었으나
  이번에 가변인자 갯수를 받을수 있게 된다.

  public static String format(String fmt, Object... args) { ... }

  이것은 마치 C에서 printf 나 scanf 등에서 인자가 가변적으로 들어갈수 있는것을
  구현해 놓은것이다.

  그렇다면 자바 애플리케이션을 만들기 위해서는 반드시 사용해야 하는 함수인
  public static void main(String[] args) {  역시 바꿀수 있다. ^_^
  public static void main(String... args) { 로 바꿀수 있다. ^_^

  main 부분을 한번 바꾸어 보자 ^_^

  public static void main(String... args) {
    for ( String s : args ) {
      System.out.println(s);
    }
  }



※ 쉬운 포맷으로 입력 받기
  out.printf("%-12s is %2d long", name, i);
  이 예제를 보면 알수 있듯이 자바에서도 printf를 지원하게 되었다.

  int n = in.nextInt();

  이렇게 in 이라는 InputStream 으로 부터 하나의 int를 얻어 오게 된다.


참고 자료 : 제 5회 한국 자바 개발자 컨퍼런스 책자.
            마이크로 소프트웨어 2004년 4월호.
반응형