사용자 도구

사이트 도구


study:java:javachobo:appendix

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판 양쪽 다음 판
study:java:javachobo:appendix [2010/03/19 21:11]
gauryan
study:java:javachobo:appendix [2010/03/19 21:30]
gauryan
줄 2: 줄 2:
  
 ===== 오토박싱(autoboxing) ===== ===== 오토박싱(autoboxing) =====
-컬렉션에는 객체로 저장해야하기 때문에 기본형 값을 저장하기 위해서는 Integer나 Long과 같은 Wrapper클래스를 사용해야했다. 그러나 이제부터는 기본형 값을 직접 컬렉션에 저장할 수 있다. 컴파일러에 의해서 자동적으로 Wrapper클래스로 변환되어 저장되는+컬렉션에는 객체로 저장해야하기 때문에 기본형 값을 저장하기 위해서는 Integer나 Long과 같은 Wrapper클래스를 사용해야했다. 그러나 이제부터는 기본형 값을 직접 컬렉션에 저장할 수 있다. 컴파일러에 의해서 자동적으로 Wrapper클래스로 변환되어 저장되는 데 이것을 오토박싱(autoboxing)이라고 한다. 뿐만아니라 저장된 값을 꺼낼 때도 변환과정을 거치지 않고도 기본형 형태의 값을 바로 얻을 수 있는 데 이것을 언박싱(unboxing)이라고 한다. 
 +<code java> 
 +ArrayList list = new ArrayList(); 
 +list.add(new Integer(10)); 
 +list.add(new Integer(20)); 
 +list.add(new Integer(30)); 
 + 
 +Integer i = (Integer)list.get(0); 
 +int value = i.intValue(); 
 +</code> 
 +이전에는 위와 같은 코드를 사용했지만 이제는 아래와 같이 코드를 간략히 할 수 있다. 
 +<code java> 
 +ArrayList<Integer> list = new ArrayList<Integer>(); 
 +list.add(10); // 오토박싱(autoboxing) 
 +list.add(20); // 오토박싱(autoboxing) 
 +list.add(30); // 오토박싱(autoboxing) 
 + 
 +int value = list.get(0); // 언박싱(unboxing) 
 +</code>
  
 ===== 향상된 for 문 ===== ===== 향상된 for 문 =====
줄 197: 줄 215:
             System.out.println(u);             System.out.println(u);
         }         }
 +    }
 +}
 +</code>
 +
 +===== 타입에 안전한 열거형 (Typesafe enums) =====
 +이전까지 자바는 C언어와 달리 열거형이라는 것이 존재하지 않았으나 새로 추가되었다. 자바의 열거형은 C언어의 열거형보다 더 향상된 개념의 열거형으로 열거형이 갖는 값 뿐만아니라 타입까지 관리하기 때문에 보다 논리적인 오류를 줄일 수 있다.
 +<code java>
 +class Card {
 +    static final int CLOVER  = 0;
 +    static final int HEART   = 1;
 +    static final int DIAMOND = 2;
 +    static final int SPADE   = 3;
 +    
 +    static final int TWO     = 0;
 +    static final int THREE   = 1;
 +    static final int FOUR    = 2;
 +    
 +    final int kind;
 +    final int num;
 +}
 +</code>
 +
 +<code java>
 +class Card {
 +    enum Kind { CLOVER, HEART, DIAMOND, SPADE }
 +    enum Value { TWO, THREE, FOUR }
 +    
 +    final Kind kind;    // 타입이 int가 아닌 Kind임에 유의하자.
 +    final Value value;
 +}
 +</code>
 +이전 방식으로는 타입이 달라도 값이 같으면 조건식결과가 true였으나, 새로 도입된 타입에 안전한 열거형에서는 실제 값이 같아도 타입이 다르면 조건식의 결과가 false가 된다. 이처럼 값뿐만 아니라 타입까지 체크하기 때문에 안전한(typesafe) 열거형이라고 하는 것이다.
 +<code java>
 +if(Card.CLOVER == Card.TWO)            // true지만 false이어야 의미상 맞음.
 +if(Card.Kind.CLOVER == Card.Value.TWO) // false
 +</code>
 +
 +예제 : EnumEx.java
 +<code java>
 +import java.util.*;
 +
 +class EnumEx {
 +    public static void main(String[] args) {
 +        Deck deck = new Deck();
 +        
 +        System.out.println(deck.pick(0));
 +        System.out.println(deck.pick(1));
 +        System.out.println(deck.pick(2));
 +    }
 +}
 +
 +class Card {
 +    enum Kind { CLOVER, HEART, DIAMOND, SPADE }
 +    enum Value { TWO, THREE, FOUR, FIVE, SIX,
 +                 SEVEN, EIGHT, NINE, TEN,
 +                 JACK, QUEEN, KING, ACE }
 +                 
 +    final Kind kind;
 +    final Value value;
 +    
 +    Card(Kind kind, Value value) {
 +        this.kind = kind;
 +        this.value = value;
 +    }
 +    
 +    Card() {
 +        this(Kind.SPADE, Value.ACE);
 +    }
 +    
 +    public String toString() {
 +        return "["+kind+","+value="]";
 +    }
 +}
 +
 +class Deck {
 +    ArrayList<Card> cards = new ArrayList<Card>();
 +    
 +    Deck() {
 +        for(Card.Kind kind : Card.Kind.values()) {
 +            for(Card.Value value : Card.Value.values()) {
 +                cards.add(new Card(kind, value));
 +            }
 +        }
 +    }
 +    
 +    Card pick(int index) {
 +        return cards.get(index);
     }     }
 } }
 </code> </code>
study/java/javachobo/appendix.txt · 마지막으로 수정됨: 2010/03/21 14:48 저자 gauryan