문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 | 다음 판 양쪽 다음 판 | ||
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클래스로 변환되어 저장되는 |
+ | <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 java> | ||
+ | ArrayList< | ||
+ | list.add(10); | ||
+ | list.add(20); | ||
+ | list.add(30); | ||
+ | |||
+ | int value = list.get(0); | ||
+ | </ | ||
===== 향상된 for 문 ===== | ===== 향상된 for 문 ===== | ||
줄 197: | 줄 215: | ||
System.out.println(u); | System.out.println(u); | ||
} | } | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ===== 타입에 안전한 열거형 (Typesafe enums) ===== | ||
+ | 이전까지 자바는 C언어와 달리 열거형이라는 것이 존재하지 않았으나 새로 추가되었다. 자바의 열거형은 C언어의 열거형보다 더 향상된 개념의 열거형으로 열거형이 갖는 값 뿐만아니라 타입까지 관리하기 때문에 보다 논리적인 오류를 줄일 수 있다. | ||
+ | <code java> | ||
+ | class Card { | ||
+ | static final int CLOVER | ||
+ | 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 java> | ||
+ | class Card { | ||
+ | enum Kind { CLOVER, HEART, DIAMOND, SPADE } | ||
+ | enum Value { TWO, THREE, FOUR } | ||
+ | | ||
+ | final Kind kind; // 타입이 int가 아닌 Kind임에 유의하자. | ||
+ | final Value value; | ||
+ | } | ||
+ | </ | ||
+ | 이전 방식으로는 타입이 달라도 값이 같으면 조건식결과가 true였으나, | ||
+ | <code java> | ||
+ | if(Card.CLOVER == Card.TWO) | ||
+ | if(Card.Kind.CLOVER == Card.Value.TWO) // false | ||
+ | </ | ||
+ | |||
+ | 예제 : 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, | ||
+ | | ||
+ | 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, | ||
+ | } | ||
+ | | ||
+ | public String toString() { | ||
+ | return " | ||
+ | } | ||
+ | } | ||
+ | |||
+ | class Deck { | ||
+ | ArrayList< | ||
+ | | ||
+ | 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); | ||
} | } | ||
} | } | ||
</ | </ |