본문 바로가기

Programming

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 더보기
Set 간단 팁 Scala 에서 제공하는 API 에서 Set 이라는 녀석이 있다. doc 을 읽다가 여기서 흥미로운 녀석을 발견했다. 바로 diff 라는 녀석인데, 정말 편하고 직관적이다. API doc 을 보면 아래와 같이 설명이 나와있다. defdiff(that: GenSet[A]): Set[A]Computes the difference of this set and another set.thatthe set of elements to exclude.returnsa set containing those elements of this set that are not also contained in the given set that.Definition ClassesSetLike → GenSetLike 사용방법은 아래와 같이.. 더보기
Xcode 4 샘플코드 살펴보기 Xcode 4 에는 도움말이 정말 친절하다.MSDN Library 보다 더 친절하다.평소에 MSDN 도 정말 잘 만들어진 문서라고 생각했었는데, Apple 의 Xcode 4 문서에 비교하면 정말 차이가 난다.다만 아쉬운 점은 한글화가 되어 있지 않아서 영문에 익숙하지 않은 개발자들에게는 다가가기에는 어려움이 많을 거라고 생각한다.아는 게 힘이다! 영어공부 열심히 하자! ㅋㅋ Xcode 로 프로그램을 작성하다가 보면 특정 Controller 들이나 View 에 대한 혹은 다른 내용이 궁금증이 생기기 마련인데, 이럴때는 고민하지 말고 바로 검색해서 물어보자. :) Xcode 4 메뉴에서,Help -> Documentation and API Reference 를 선택 이렇게 하면 아래와 같이 Organizer.. 더보기
iPhone SDK Navigation Controller 에 관하여 iPhone SDK 에서 제공하는 Navigation based template 에서 미리 로드된 기능들을 알아보면 아래와 같이 3개 정도가 된다. 1. A view stack for moving between views사용자가 앞으로 뒤로 이동할때마다 Navigation Controller 에게 적당한 화면을 보여주도록 요청할 수 있다. Navigation Controller 는 사용자가 어디 있는 지 추적하고, 사용자가 뒤로갈 수 있도록 버튼을 제공한다. 2. A navigation bar for buttons and a titleNavigation Contoller 는 보여지는 화면과 상호작용을 하면서 버튼을 보여주기 위해서 navigation bar 와 상호작용을 한다. 그리고, Navigatio.. 더보기