본문 바로가기

Programming/Java

Java PECS (producer-extends, consumer-super) 에 관하여 Effective Java 2nd edition 을 요즘 보고 있는데, Java generics 에 관하여 좋은 글인 거 같아서 따로 복습도 할 겸 포스팅을 하게 되었다. PECS 란 무엇인가 하면, Producer Extends, Consumer Super 라는 단어의 Initial 을 따서 붙인 것이다.쉽게 설명을 하자면, 뭔가를 생산하는 일을 하면, 상속을 받고, 뭔가를 소비하게 되면 상속해 주는 것이다. 무슨 말인고 하니, Effective Java 2nd Edition 의 예를 들어보면, Stack 의 일반화된 method 인 pushAll 을 보자. // 뭔가 부족한 pushAll method - parameterized types E 를 사용하여 구현 public void pushAll(It.. 더보기
Eclipse (이클립스) 에서 Java compiler 설정 보통 Java 프로그램을 개발하기 위해서는 Java Compiler 가 필요하다. Java Compiler 를 설치하기 위해서는 JDK 가 필요한데, JDK 는 현재 두개의 진영에서 배포하고 있다. Open JDK, Oracle JDK 이다. 둘 중에 어느것을 사용해도 무관하다. Open JDK는 Oracle 의 Java 상용화에 대응하여 오픈소스 진영을 위한 JDK 라고 볼 수 있는 반면, Oracle JDK 는 Oracle 사가 자신들의 제품에 사용하기 위한 소프트웨어를 개발하기 위한 Java 개발자 툴 킷이라고 보면 된다. 우리는 Java 프로그램을 개발하기 위해서 Java Compiler 를 설치하고 나서 언어의 특성상 Eclipse IDE 를 설치하여 사용한다. 이렇게 하기까지 중간에 중요한 사.. 더보기
Java Map 을 선언과 동시에 초기화 하기 가끔 Map 을 사용하다가 보면, Map 을 선언과 동시에 초기화 할 필요가 있다. 예를 들어서, Map 의 Reference 를 바꾸지 않기 위해서 Interface 혹은 Class 에서 선언과 동시에 public static final 키워드로 등록을 하게 되면, 이러한 효과를 얻을 수 있다. // Interface 안에서 선언과 동시에 초기화 하는 방법 public interface MapConstant { public static final HashMap = new HashMap() { { put("a", new Object()); put("b", new Object()); } }; } // Class 안에서 선언과 동시에 초기화 하는 방법 public class MapConstant { publ.. 더보기
Bounded wildcard type vs Bounded type parameter Effective Java 책을 보다가 궁금증이 생겼다. 일단, 'Effective Java 2nd edition' 에서 소개되는 'Generics' 에서 사용되는 용어를 살펴보자. TermExampleParameterized typeList Actual type parameterString Generic type List Formal type parameterE Unbounded wildcard type List Raw type List Bounded type parameter Recursive type bound Bounded wildcard type List 더보기
Java 버전 1.5 부터 소개된 enum 에 대해서 오늘은 Java 버전 1.5 부터 소개된 enum type 에 대해서 알아보자. enumerated type 인 enum 은 Java SE 버전 1.5 부터 생긴 type 으로서 정수형 상수들을 대체하기에 적당한 기능들을 제공한다. 그래서 아래와 같은 상황에서 enum type 의 사용을 고려 해보는 것이 좋다. Effective Java 2nd edition 에서는 int enum pattern 이라는 형식일 때, enum type 의 사용을 고려해 보라는 내용이 나온다. 예를 들어서 아래와 같은 코드가 있다고 하면, 아래의 코드는 int enum pattern 이라고 부른다. public static final int WEEK_MON = 0; public static final int WEEK_TUE.. 더보기
enum type constant-specific method 구현 Java enum type 에는 constant-specific method 구현이라는 기법이 있다. 쉽게 말하자면 각각의 상수마다 다른 행동을 구현하는 것인데, enum type 을 통해서 간단하게 구현할 수 있다. 아래의 예제는 Effective Java 2nd edition 에서 발췌한 것이다.public enum Operation { PLUS("+") {double apply(double x, double y){return x + y;}}, // "+" symbol 을 갖는 PLUS 상수의 행동을 정의 MINUS("-") {double apply(double x, double y){return x - y;}}, // "-" symbol 을 갖는 MINUS 상수의 행동을 정의 TIMES("*") {.. 더보기
Android app (안드로이드 앱) 개발시 지켜야 할 코드 스타일 제안 다들 아는 지 모르겠지만, 정리가 정말 잘 되어있다.당연한 거지만, 안드로이드 앱 개발 시, 코드 스타일을 지키는 것은 정말 중요하다. 일단은 처음이니 링크만 남겨두기로 한다. (다음에는 하나하나 점검하면서 확인해 볼 필요가 있겠다)http://source.android.com/source/code-style.html 더보기
Spring Hello World! Spring framework 를 이용하여, Hello World 프로그램을 작성 해 보자. 먼저 Spring framework 를 다운로드 하도록 하자. (아래 링크에서 받자)http://www.springsource.org/download Spring framework 는 apache-commons-logging 을 사용하므로, 이것도 다운로드 받자.http://commons.apache.org/logging/ 그 다음, Eclipse EE 를 다운로드 하도록 하자. (Eclipse IDE for Java EE developers)http://www.eclipse.org/downloads/ 1. Eclipse 에서 HelloWorld 라는 프로젝트를 생성하자.2. 생성한 프로젝트에 lib 라는 폴더를.. 더보기
Map, HashMap 순회하기 Map 을 순회하면서 어떤 일을 하기 위해서는 여러가지 방법을 사용할 수 있는데, 그 중에서1. entrySet() 을 사용하는 방법2. keySet() 을 사용하는 방법3. values() 를 사용하는 방법 으로 총 3가지가 있다. entrySet() 은 key 와 value 두 개 모두가 필요할 경우 사용하며,keySet() 은 key 값만 필요할 경우 사용, values() 는 값들만 필요할 경우에 사용한다. 각각의 사용법을 살펴보면 아래와 같다. 1. entrySet() 을 사용하는 방법 Map map = new HashMap(); ... for (Map.Entry entry : map.entrySet()) { String key = entry.getKey(); Object value = entr.. 더보기
Dump Java byte code from Java class file (Java byte code 보기) 이 포스팅의 일부는 IBM Developerworks의 Java bytecode 기사의 일부를 발췌하여 작성하였다. Java compiler는 Java source code를 Java byte code로 해석을 한다. Java byte code는 C/C++ 프로그램의 중간 표현식이라고 할 수 있는 assembler 에 해당한다. 유능한 C/C++ 프로그래머는 Debugging과 성능, 메모리 사용을 tuning하기 위해서 assembler instruction 정보를 사용한다. 이는 Java Programmer가 Java bytecode의 instruction의 의미를 이해하는 것과 같은 맥락이다. 그러므로, 좀더 고급 Java 프로그래머가 되기 위해서는 Java byte code에 대한 이해가 필요한다.. 더보기