달력

12

« 2024/12 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

'프로그래밍'에 해당되는 글 394

  1. 2010.04.01 '10.03.15 story
2010. 4. 1. 13:33

'10.03.15 story JAVA이야기2010. 4. 1. 13:33

10 : 00 ~ 12:00 effective java

12 : 00 ~ 15:00 수업

15: 00 ~ 16: 30 effective java

16:30 ~ 18:00 수업

18:00 ~ 22:00 Oracle

 

매개변수 타입은 불변 타입이다 . 즉 서로 다른 두 개의 Type1과 Type2에 대해, List<Type1>과 List<Type2>의 서브타입도 아니고 수퍼 타입도 아니다!! 예를들어, List<String>은 List<Object>의 서브타입이 아니라는말씀 List<Object>는 어떤 타입도 저장할 수 있지만, List<String>은 String객체만 저장할 수 있다.

 

★★유연성을 극대화하려면 메소드 인자에 와일드 카드 타입을 사용하자!!

Object <-Number <- Integer

Number입장에서 Integer까지 사용하려면 <? extends E> 이렇게 사용하고

Number입장에서 Object까지 사용하려면 <? super E> 이렇게 사용하면 별개타입이었던 Object, Number,Integer가 관계를 갖게된다.

예) static <E> E reduce(List<? extends E> list, Function<E> f)

reduce(List<Integer>,Function<Number>) 이렇게 사용하면 에러 안남.

static <E> E reduce(List<E> list, Function<E> f)

여기서는 reduce(List<Integer>,Function<Number>) 이렇게 사용하면 에러 발생

 

각 enum타입은 자신의 네임스페이스를 갖기 때문에, 동일한 이름의 상수를 갖는 enum타입이들이 아무 문제 없이 공존할 수 있다.

public enum Apple{FUJI,PIPPIN, GRANNY}

//Apple이란 네임스페이스에 FUJIJ,PIPPIN,GRANNY가 공존한다.

 

컴파일 된 상수 값이 클라이언트 코드에 포함되지 않는다.

메소드나 필드를 enum타입에 추가하려는 이유가 무엇일까? 우선, enum상수에 어떤 데이터를 연관시키고자 할 수 있다.

 

그럼 언제 enum을 사용해야 할까?

정해진 개수의 상수가 필요하다면 언제든지 사용가능하다. 물론 "선천적인 열거형" 이라고 할 수 있는 혹성, 요일, 체스의 말과 같은 것을 포함해서다. 그러나 선택 메뉴, 연산 코드, 명령행 옵션 문자와 같이 컴파일 시점에서 모든 가능한 값을 알고 있는 상수들도 포함된다.

요약하면, int 상수에 비행 enum타입은 장점이 많다. enum은 훨씬 더 가독성이 좋고, 안전하며, 강력하다. enum들의 경우는 데이터를 각 상수와 연관시키고 그 데이터에 영향을 받는 메소드를 제공하여 이점을 누릴 수 있다.

 

EnumMap을 사용하자

EnumMap이란 Enum으로 선언된 값들이 키가 되어서 저장된 객체를 말함

 

public class Herb{

private enum Type{ ANNUAL, PERENNIAL, BIENNIAL}

 

...

}

 

 

private static final Map<Herb.Type, Set<Herb>> herbsByType =

new EnumMap<Herb.Type, Set<Herb>>(Herb.Type.class);

ANNUAL

Hooney

Hyun

PERENNIAL

Hello

BIENNIAL

Man

 

 

public enum Phase{

SOLID, LIQUID, GAS;

 

public enum Transition{

MELT(SOLID, LIQUID) ... 상태들 정의

}

}

 

private static final Map<Phase, Map<Phase, Transition>> m =

new EnumMap<Phase, Map<Phase, Transition>>(Phase.Class);

 

 

 

 

 

이렇게 초기화 되면,

SOLID

SOLID

MELT

FREEZE

SUBLIME

 

LIQUID

...

GAS

...

이런형태로 데이터가 저장된다.

'JAVA이야기' 카테고리의 다른 글

'10.03.17 story  (0) 2010.04.01
'10.03.16 story  (0) 2010.04.01
'03.03.14 story  (0) 2010.04.01
'03.03.13 story  (0) 2010.04.01
'03.03.12 story  (0) 2010.04.01
:
Posted by НooпeУ


Code Start Code End