NullPointerException을 예방하는 방법

Posted by
2018. 2. 22. 11:00 Java

NullPointerException은 null 때문에 발생하는 Runtime Exception입니다.

null인 객체에 접근하여 의도치 않게 NPE가 발생할 수 있지만 더 중요한 문제는 null 자체의 의미가 모호해 다양한 버그를 만들어냅니다. 예를 들어 메소드의 호출 결과로 null이 반환 되었을 경우 데이터가 없음을 의미할 수도 있지만 실패를 의미할 수도 있습니다. 심지어 성공을 의미하는 경우도 있을 수 있죠.

1
2
3
4
Map<String, String> map = new HashMap<String, String>();
map.put("hello", null);
map.get("hello");   // "hello" key의 value인 null을 return
map.get("nice");    // "nice" key가 없으므로 null을 return

위의 경우도 key에 대한 value가 null인지, key가 없어서 null을 return 한건지 return 받은 null 값을 가지고는 그 의미가 모호합니다. 누가 null을 만들었는지 참 얄밉지만 어쨋든 null 체크를 제대로 안했던지, 설계상의 결함이던지 null로 인한 버그는 결국 개발자 책임입니다.

똥이 무서워서 피하기보단 더러워서 피한다고… NPE를 예방하는 방법에 대해 정리해봤습니다.
들어가기에 앞서 null에 대한 프로그래머 대가들의 한마디…

“Null Sucks!”
– Doug Lea : Concurrent Programming In Java 저자 & JDK의 concurrency utilities 개발자

“I call it my billion-dollar mistake.”
– C.A.R. Hoare 2009년 어느 컨퍼런스에서.
1965년 Algol W 언어에서 처음으로 null reference를 만든 장본인 (Quick Sort도 발명)

코딩 습관 들이기

객체가 언제든 null일 수 있다는 판단하에 접근하면 도움이 될 것 같습니다.

1. equals 메소드 사용시
문자열 비교시 non-null String 기준으로 비교합니다. equals 메소드는 symmetric하므로 a.equals(b)와 b.equals(a)가 동일합니다. 그렇다면 null 일 수 있는 객체에서 equals 메소드 호출은 피하는게 낫겠죠?

1
2
3
4
5
6
public void doSomething() {
   // name이 null일 경우, NPE 발생!
   if (name.equals("BAD")) {
      // do something
   }
}
1
2
3
4
5
6
public void doSomething() {
   // name이 null이어도 NPE 발생 안함
   if ("BAD".equals(name)) {
      // do something
   }
}

다만 equals를 통과한 null 객체가 if문 안에서 메소드 호출 등의 이유로 다시 사용된다면 동일한 NPE가 발생할 수 있습니다. 이럴 경우엔 미리 null 체크를 하는게 좋겠죠?

2. toString()보다는 valueOf()를 사용할 것
1번 처럼 null 일 수 있는 객체에서 메소드 호출은 NPE 발생 위험이 있겠죠? static으로 제공되는 valueOf()를 사용하면 null을 Parameter로 넘겨도 null을 return할 뿐 NPE는 발생하지 않습니다. (valueOf()는 String, Boxed Primitives 클래스(Integer, Double 등)에서 static 메소드로 제공 됨)

1
2
3
BigDecimal bd = getPrice();
System.out.println(String.valueOf(bd)); // NPE 발생안함
System.out.println(bd.toString()); // NPE 발생

3. 메소드에서 null return하지 않기
가장 간단한 방법은 메소드 구현시 의미없는 null을 return하지 않도록 처리합니다. null이 아닌 빈 문자열 또는 빈 콜렉션을 return 하도록 합니다.

1
2
3
4
5
6
7
8
9
10
11
public List<User> getUsers() {
   // ...
 
   Result result = executeNamedQuery(GET_ALL_USERS);
 
   if (!result.isEmpty()) {
      return result;
   }
 
   return Collections.EMPTY_LIST; // or EMPTY_SET or EMPTY_MAP, etc. Depending on your return type
}

4. null을 Parameter로 넘기지 말 것
null을 Parameter로 넘길 경우 받는 쪽에서도 어찌보면 불필요한 null 체크가 필요하겠죠? null 자체에 어떤 특별한 의미가 없다면 주지도 받지도 맙시다.

5. 불필요한 autoboxing, unautoboxing 피하기 & Object 보다는 기본형 사용하기
Boxed Primitives 클래스와 기본형(primitive) 타입간에 자동으로 autoboxing, unboxing을 해주는데요. 자동으로 기본형 변환을 해주기 때문에 헷갈리기 싶습니다. (그냥 기본값이 들어가겠거니…) 가능하면 null reference를 가질 수 있는 객체가 아닌 자바 기본형(Primitive)을 이용하는 것도 방법입니다.

1
2
3
Person ram = new Person("ram");
// getPhone()에서 return된 결과가 null일 경우 NPE 발생
int phone = ram.getPhone();
1
2
3
4
5
6
private static Integer count;
 
// NPE 발생
if( count <= 0) {
  System.out.println("Count is not started yet");
}

6. Chaining 메소드 호출 자제하기

1
String city = getPerson(id).getAddress().getCity();

중간에 return 받은 값이 null일 경우 NPE가 발생하며 Stack Trace에서도 해당 line 위치만 출력되기 때문에 어디서 에러가 발생했는지 디버깅하기도 어렵습니다.

Library 이용하기

Apache Commons lang, Google Guava(예전 Goolge Collections) 등 null safe한 method를 이용하는 방법입니다. 자세한 사용은 Library의 JavaDoc을 읽어보길 권합니다.

1. Apache Commons의 StringUtils
String의 null 체크를 간단히 할 때 많이 사용하는 클래스입니다. StringUtils.isNotEmpty(), isBlank(), isNumeric(), isWhiteSpace() 등이 있죠.

1
2
3
4
5
6
7
8
9
10
11
// StringUtils methods are null safe, they don't throw NullPointerException
System.out.println(StringUtils.isEmpty(null));
System.out.println(StringUtils.isBlank(null));
System.out.println(StringUtils.isNumeric(null));
System.out.println(StringUtils.isAllUpperCase(null));
 
Output:
true
true
false
false

2. Guava의 Optional 클래스 이용하기
Optional는 nullable한 T를 non-null 값으로 대체시키기 위한 방법인데요. (말이 어렵죠?)
Optional 객체는 non-null인 T reference를 포함하거나 아무것도 포함하고 있지 않습니다.

한마디로 Optional 객체는 명시적으로 null 값을 갖지 않는다는거죠.
NullObject Pattern을 일반화시켰다고나 할까요? 바로 이 점을 이용해서 NPE를 예방합니다.

– absent : 아무 것도 포함하고 있지 않은 상태
– present : non-null 값을 갖은 상태

1) Optional 객체의 생성 (static 메소드)

Optional.of(T)
– T로 받은 non-null 값을 포함하는 Optional 객체 반환, T가 null 일 경우 NPE 발생
Optional.absent()
– 아무것도 포함하고 있지 않는 absent Optional 객체 반환
Optional.fromNullable(T)
– T로 받은 값이 non-null일 경우 present로, null일 경우 absent로 처리한 Optional 객체 반환

2) Optional 객체를 다루기 위한 메소드

boolean isPresent()
– Optional 객체가 non-null 인스턴스를 포함할 경우 true 반환
T get()
– Optional 객체가 present 일 경우 포함하고 있는 인스턴스를 반환, absent일 경우 IllegalStateException 발생
T or(T)
– Optional 객체의 present 값을 반환. 만일 값이 없을 경우 명시한 T를 반환 (기본값)
T orNull()
– Optional 객체의 present 값을 반환, 만일 값이 없을 경우 null을 반환. fromNullable의 역임
Set asSet()
– Optional 객체에서 포함하고 있는 인스턴스의 변경 불가능한 싱글톤 Set을 반환. 만일 인스턴스가 없다면 변경불가능한 Empty set을 반환

3) 간단 예제

1
2
3
4
5
6
7
Optional<Integer> possible = Optional.of(5);
System.out.println(possible.isPresent());
System.out.println(possible.get());
 
Output:
true
5

4) 응용 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Integer a = 10;
Integer b = null;
 
Optional present = Optional.fromNullable(a);
Optional absent = Optional.fromNullable(b);
 
System.out.println("a is present : " + present.isPresent());
System.out.println("b is present : " + absent.isPresent());
System.out.println("a value : " + present.or(0));
System.out.println("b value : " + absent.or(0));
 
Output:
a is present : true
b is present : false
a value : 10
b value : 0

http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/base/Optional.html
https://code.google.com/p/guava-libraries/wiki/UsingAndAvoidingNullExplained#Optional

요건 Wrapper 메소드 형식으로 Optional 객체를 반환하게끔 사용하면 좋을 것 같네요.

3. Guava의 Preconditions 또는 NullPointerTester 클래스 이용하기
http://google-collections.googlecode.com/svn/trunk/javadoc/com/google/common/base/Preconditions.html#checkNotNull(T)
http://guava-libraries.googlecode.com/svn-history/r144/trunk/javadoc/com/google/common/testing/NullPointerTester.html

Nullness Annotation 활용하기

메소드의 return값 또는 파라미터의 null 허용여부를 Annotation을 이용하여 지정합니다. 코딩 습관 들이기 3, 4번 항목을 제약하기 위해 사용하는데요.

IDE에서 지원하는 @Nullable, @NotNull 등의 Annotation을 사용하면 코드에서 NPE 발생 가능여부를 미리 경고해줍니다. 또 해당 Annotation 제약사항을 위반했을 경우 컴파일시 NPE가 아닌 IllegalArgumentException 또는 IllegalStateException이 발생됩니다. Argument로 NotNull이어야 한다고 정했는데 Null이 들어왔다면 의미상 NPE보다는 잘못된 Argument가 맞겠죠?

현재 ItelliJ, Eclipse IDE 및 Find Bugs에서는 서로 다른 Annotation 라이브러리를 사용하는데요. JCP에 Software Defect Detection하기 위한 Annotation이 JSR-305로 요청 중이나 현재 dormant(중단) 상태네요. 언제 JDK에 포함될런지는 모르겠네요 :'(

상세 사용법은 아래를 참고하세요.

1. Eclipse (Juno 이상)
http://help.eclipse.org/juno/index.jsp?topic=%2Forg.eclipse.jdt.doc.user%2Ftasks%2Ftask-using_null_annotations.htm

2. IntelliJ
http://www.jetbrains.com/idea/documentation/howto.html

3. FindBugs
http://findbugs.sourceforge.net/manual/annotations.html

4. IntelliJ 예제
– 프로젝트에 /REDIST/annotations.jar 추가
– Project Settings > Inspections > Probable bugs 체크 > Constant conditions & exception 체크 > Sueggest @Nullable annotation …. 체크

1
2
3
4
5
6
7
8
9
10
11
12
@Nullable
private String getDefinition() {
   // ...
}
 
public void doSomething() {
   if (getDefinition().equals("DEFINITION")) {
      // ...
   }
 
   // ...
}

@Nullable인 getDefinition()는 NPE가 발생할 수 있다.’고 IntelliJ에서 경고합니다.

1
2
3
4
5
6
7
8
9
10
private User findUser(@NotNull final String id) {
   // ...
}
 
public void doSomething() {
   // try invoking with null parameter
   User user = findUser(null);
 
   // ...
}

@NotNull 사용한 곳에서 null 값을 전달하고 있다고 IntelliJ에서 경고합니다.

기타

1. DB 테이블 컬럼 생성시 default값 설정하기
사용자로부터 입력 받은 값 중 null을 허용하더라도 default값을 설정했다면,
추후 해당 테이블에서 값을 불러와 사용할 경우 null을 예방할 수 있겠죠.

2. Null Object Pattern, Factory Pattern 사용하기

3. Spring MVC에서 지원되는 Bean Validation에서 @NotNull 사용하기 (JSR-303)

결론

1. 개발자가 코딩시 주의하여 NPE를 발생시키는 코딩 습관은 자제한다.
2. 간단한 Apache Commons나 Guava Library의 null safe 관련 클래스를 학습한 후 적용한다.
3. IDE에서 지원하는 Annotation 등을 이용해서 NPE 발생 부분은 미리 캐치하여 예방한다.

# 참고 사이트
– http://javarevisited.blogspot.kr/2013/05/ava-tips-and-best-practices-to-avoid-nullpointerexception-program-application.html
– http://howtodoinjava.com/2013/04/05/how-to-effectively-handle-nullpointerexception-in-java/
– http://isagoksu.com/2009/development/java/how-to-avoid-nullpointerexceptions-npe/
– https://code.google.com/p/guava-libraries/wiki/UsingAndAvoidingNullExplained
– http://www.scottlogic.com/blog/2013/09/09/nullable-in-kepler.html

'Java' 카테고리의 다른 글

JAVA 강좌  (0) 2015.10.16

JAVA 강좌

Posted by
2015. 10. 16. 15:00 Java
이곳은 50001.COM 주인장의 강좌와 주옥같은 JAVA고수님들의 강좌를 모아 놓은 곳입니다.
질문은 Q&A 게시판에 주세요.

들어가는 글 :: "시작하는 JAVA프로그래머를 위해" (특히 비 전공자분들께)
 김상욱의 awt 멀티채팅강좌 :: 
방개설, 귓말/쪽지, 방장기능, 캐릭터 및 글자색 기능, 이미지넣기, 관리자모드, 그림 및 음악 보내기 등 기술분석적 강의 (진행중)
 김상욱의 db 이용한 awt 그래프 출력강좌 :: 
db와 socket을 이용 3-Tier, 스크롤가능 그래프출력 강좌 (1차완료)
 김상욱의 LIVECONNECTION :: 애플릿과 자바스크립트와의 통신강좌 (완료)
 김상욱의 자바툴 강좌 :: Editplus, UltraEditor, Kawa, JCreator 등의 다운로드와 설정 (완료)
 김상욱의 웹스타트(webstart) 강좌 (기본 완료응용 진행중)
 김상욱의 Vector, Hashtable 클래스 성능 실험 외 (완료)
 진은영 (50001.com javaside 시삽) 강사님의 자바 기초강좌 (진행중)
 자바Side(50001.com) 온라인 자바 스터디 1기 채팅 소스 분석 스터디 정리(완료)
 Java Basic
처음 입문하신 분들은 이리로
 J2SE(Core/Desktop)
Java2 Standard Edition. 
애플릿/애플리케이션 등 일반적인 자바 
프로그램을 만들 수 있는 기본 패키지
J2EE(Enterprise/Server)
Java2 Enterprise Edition
엔터프라이즈급 프로그램을 만들 때 
사용하는 패키지.
웹프로그래밍JSP :: servlet ::taglibrary/customtag
웹서비스

웹서비스 
JAXP/JAXR/JAX-RPC

SOAP 
Component

Enterprise JavaBeans(EJB)
Java Message Service(JMS)
기타

application server
Java Data Objects(JDO) 
JavaMail
Transaction(JTA/JTS)
J2EE 기타

J2ME(Mobile/Wireless)
Java2 Micro Edition. 
휴대폰 등에 들어있는 소형 시스템에서 
사용할 프로그램을 만들 수 있는 패키지.

모바일(J2ME)

(강사님별 / 기기별 강좌)

 XMLXML
 IDEIDE
 Other Java Technologies준비중...
 ETC매뉴얼 :: 디자인패턴 :: 객체지향 UML :: 
자바스크립트 :: XP(Extreame Programming):: 기타 


자바기본 (영문튜토리얼)

 박용우님의 자바강좌 :: 자바 전반에 대한 문법 및 도움말 (강추!)
 윤경구의 자바튜토리얼 :: '지나'시리즈로 유명한 저자의 기초~고급
 최종명의 몽땅강좌 :: 기초부터 고수까지
 최희창님의 자바클래스 소개
 Java 전문 용어 이해하기 :: Sun사 문서 (오광신 님 번역)
 원돈희님의 SCJP에 맞춘 자바강좌 :: 시험 유형에 맞춰 헷갈리기 쉬운 부분을 알기쉽게 강의
 Sun의 자바기초강좌 SL275(한글문서) :: 김동학님 제공
 자바 초보자를 위한 강좌 :: javanuri
 corejava [1권] [2권] :: 번역판
 Think In Java 2nd Ed (MS WORD버전)
 자바기초에서 애플릿(바둑,채팅)까지 :: JSTORM
 자바기초(당연히 알아야함에도 불구하고 그냥 지나치기 쉬운) :: JSTORM
 JVM의기본 원리 및 클래스로더의 기초 :: JSTORM
 제네럴 프로그래밍 애플릿에서 웹 서비스까지 [첨부파일] :: 박용우
 GarbageCollection :: 오광신
 JVM의 가비지 컬렉션 (영문) :: IBM
 가비지 컬렉션과 퍼포먼스 (영문) :: IBM
 이것은 무엇의 객체인가 (영문) :: IBM
 추상클래스 :: 자바스터디
 정적 유형 (Static type) (영문) :: IBM
 final 사용 가이드라인 (영문) :: IBM
 자바 속성 [1] [2] [3] [4] :: IBM
 클래스와 클래스 로딩 (영문) :: IBM
 Java Web Start 1.0 개발자 가이드 (번역) :: JSTORM
 자바 네트워크 구동 프로토콜(JNLP)과 참조 구현, 자바 웹 스타트 :: 자바스터디
 JAVA WEBSTART문서 [소스] :: 오광신
 EMPOWER YOUR APPLICATIONS WITH JAVA™ WEB START - Sun사 문서 (오광신 님 번역)
 자바프린팅모델 [1] [2] :: JSTORM
 JDK 1_4의 프린팅 (printing), Part 1_새로운 Java Print Service API :: IBM
 JDK 1_4의 프린팅 (printing), Part 2_프린트 관련 이벤트를 듣고 그래픽을 직접 프린트 :: IBM
 표명(assertion) 기능 이용하기 :: IBM
 J2SE 1_5_Tiger의 미래와 언어 차원의 변화 :: IBM
 숫자와 currency 포맷 (영문) :: IBM
 자바 어플리케이션에서 환경에 접근하기 :: 자바스터디
 쓰레드 풀과 작업 큐(queue) (영문) :: IBM
 쓰레드 보안 (영문) :: IBM
 김세곤님의 클래스패스와 환경 변수, 그것이 알고 싶다. :: 패키지 및 클래스패스설정 총정리
 classpath에 등록안된 클래스의 dynamic reload :: javapattern.info
 Multiprocess JVM Implemetation_1 :: javapattern.info
 Multiprocess JVM Implemetation_2 :: javapattern.info
 native method 정의 및 구현 :: javapattern.info
 StringBuffer class Optimization :: javapattern.info
 Using java debugger :: javapattern.info
 Java 2 레퍼런스 클래스 사용 가이드라인 (영문) :: IBM

애플릿 (영문튜토리얼)

 Dubuilder로 Signed Applet 만들기 [소스] / [MakeRayCab.bat ] :: 오광신
 Explore에서 Signed Applet만들기 :: 오광신
 넷스케이프 브라우저에서의 사인 애플릿 작성 :: 핸디소프트 윤동빈
 네트워크 가위바위보게임(+채팅) [소스] :: 박용우

그래픽(awt,JFC/swing,SWT) (영문튜토리얼)

 AWT와 스윙 [1] [2] :: JSTROM
 스윙(SWING)의 안쪽 탐험 :: JSTORM
 Swinging audio_사용자 인터페이스 향상을 위한 소리 신호 구현하기 :: IBM
 지능형 데이터로 Swing을 간단히!_(iData 기법) :: IBM
 SWT: native 크로스플랫폼 GUI 애플리케이션 만들기 (영문) :: IBM
 Create native, cross-platform GUI applications(GCJ, 리눅스, SWT):: IBM
 Equipping SWT 애플리케이션에 content assistants 추가하기 (영문) :: IBM
 Fullscreen Exclusive Mode 와 draw directly to video RAM(영문) :: IBM
 Java Web Start로 SWT 애플리케이션 전개하기 (영문) :: IBM
 GUI의 접근성 높이기 (영문) :: IBM

자료구조(Collection) (영문튜토리얼)

 콜렉션 개요와 Collection 클래스, MAP, Iterator, Comparator, 콜렉션 알고리즘:: 자바스터디

국제화(한글화) (영문튜토리얼)

네트웍(IO/NET)
 파일과 네트웍 [01] [02] :: JSTORM
 자바 I/O 성능 향상기법 :: JSTORM
 네트웍 코드를 쉽게 테스트 하자 [소스] :: JSTORM
 비 블록 소켓으로 가는 길 (영문) :: IBM
 Merlin으로 자바 플랫폼에 nonblocking 입출력 가능_새롭게 추가된 기능들 :: IBM
 JDK1.4의 New I/O에 대하여 [1] [2] :: 한빛미디어
 스트림 완전히 바꾸기, Part 1 (영문) :: IBM
 스트림 완전히 바꾸기, Part 2 내부 Java IO 최적화 (영문) :: IBM
 자바 네트워킹 강화 (영문) :: IBM
 Java NIO (Ron Hitchens 지음) (영문) :: IBM
 Merlin의 new IO 버퍼의 모든 것 (영문) :: IBM
 NIO Channel :: javapattern.info
 NIO Reactor Pattern의 사용 :: javapattern.info
 PushbackReader의 사용방법과 예제 :: javapattern.info
 Multicast IP address를 이용한 채팅 :: javapattern.info
 Extracting zip or jar file :: javapattern.info
 Servlet과 Applet간의 HTTP 통신_1 :: javapattern.info
 Servlet과 Applet간의 HTTP 통신_2 :: javapattern.info
 Servlet과 Applet간의 HTTP 통신_3 :: javapattern.info
 Servlet과 Applet간의 HTTP 통신_4 :: javapattern.info
 SocketPool Implementation Source code Example_1 :: javapattern.info
 SocketPool Implementation Source code Example_2 :: javapattern.info
 DatagramSocket의 정의 및 샘플 :: javapattern.info
 HttpURLConnection 사용예와 개념 :: javapattern.info
 jNetServer Socket Framework :: javapattern.info
 Lightweight Web Server Implementation :: javapattern.info

분산객체(RMI) (영문튜토리얼)

 Java Distributed Computing Technology :: 자바스터디
 자바 RMI 사용하기
 차승욱님의 RMI강좌 :: 자바스터디
 문영진님의 RMI강좌 :: 자바스터디
 자바에서의 원격객체통신(RMI와 CORBA) :: 윤경구
 RMI의 기초 :: JSTORM 박준용님
 기업에서의 RMI-IIOP_IIOP상에 RMI 실행시키기 :: IBM

IDL(CORBA) (영문튜토리얼)

 JBuilder를 이용한 코바(Corba)프로그래밍 :: Javastudy
 코바와 자바 연동 (PDF) :: Javastudy
 JAVA와 CORBA연동 (PDF) :: Javastudy
 JBuilder에서 코바 프로그래밍 (MS_WORD) :: Javastudy
 코바 이것만을 알고 개발하자!!(PDF) :: Javastudy
 VisiBroker 설치 방법 (코바사랑) :: Javastudy
 비지브로커의 이모저모.. (PDF) :: Javastudy
 IDL에 대해서.. (PDF) 코바사랑 제공 :: Javastudy
 JAVA에서 IDL 매핑 (PDF) 코바사랑 제공:: Javastudy
 콜백 서비스에 대해.. (MS-WORD) 코바사랑 제공 :: Javastudy
 CORBA & Next Generation :: Javastudy

보안(Security) (Security in 1.2 영문튜토리얼)

 Globus Grid Security Infrastructure와 자바 (영문) :: IBM
 JAAS와 JSSE를 이용한 자바 보안 (영문) :: IBM
 대칭암호화알고리즘 소개 및 DES, Blowfish샘플코드 :: javapattern.info
 Java Security Model Evaluation :: javapattern.info
 MD5를 이용한 스트링 변환 :: javapattern.info

JDBC(데이터베이스)
 데이타베이스와 자바(JDBC소개) :: 자바스터디
 JDBC 팁 (영문) :: IBM
 JDBC 쿼리 로깅을 쉽게_고급 PreparedStatement를 사용하여 JCBC 코드에 로깅 추가 :: IBM
 JDBC와 ORACLE :: 자바스터디
 JDBC와 MSQL :: 자바스터디
 Database접속 Pool관리 :: 자바스터디
 JDBC API를 이용한 프로그래밍 강좌 :: http://www.aboutjsp.com
 JDBC 기초 강좌 :: http://cs.sookmyung.ac.kr
 JDBC 다국어 처리법 :: http://www.ejavaschool.com.ne.kr
 JDBC 설정 :: 자바스터디
 PostgreSQL JDBC 활용 :: http://www.junghyun.pe.kr
 자바 초보자를 위한 DB강좌 :: javanuri
 SQL2000 강의자료 :: 김하나님 자료
 Object Pool 패턴을 이용 구현한 JDBC Connection Pool :: JSTORM
 oracle8i JDBC(Oracle 8i 와 Java) :: Javastudy
 Informix 데이터베이스연결 :: javapattern.info
 MySQL JDBC Connection_1 :: javapattern.info
 MySQL JDBC Connection_2 :: javapattern.info
 MySQL JDBC Connection_3 :: javapattern.info
 Java JDBC Performance Tip(1)-Select Speed up! :: javapattern.info
 Java JDBC Performance Tip(2)-Insert, Delete Speed up!.htm :: javapattern.info
 JDBC DataConversion(Using Metadata) :: javapattern.info

JAR (영문튜토리얼)

 JAR 파일 (영문) :: IBM

Extention Mechanism (영문튜토리얼)

2D Graphics (영문튜토리얼)

 2D 애니메이션과 이미지 기반 경로 (영문) - IBM
 롤오버(rollover) 효과를 위한 Java2D 합성 (영문) - IBM

Sound (영문튜토리얼)

JavaBeans (영문튜토리얼)

 자바 빈으로 테트리스 게임의 구성 요소들을 재사용 가능한 컴포넌트로:: IBM
 JavaBeans 컴포넌트와 JSP 기술의 결합 (영문) :: IBM

JNI (영문튜토리얼)

 자바와 C/C++ 연동하기 :: 마이크로소프트웨어
 Java Native Interface(JNI) :: 윤경구
 자바 네이티브 인터페이스로 피어 클래스 사용하기 :: 자바스터디

Reflection (영문튜토리얼)

 reflection (영문) :: IBM
 리플렉션(reflection) 적용하기 (영문) :: IBM

Optional Packages(JMF/JMX/commAPI/3D/JAI/SpeechAPI/Help System etc)

 자바멀티미디어 JMF [01] [02] [03] :: JSTORM
 JavaHelp 소프트웨어로 헬프셋 만들기 :: 자바스터디
 JAVAHELP로 애플리케이션에 도움말 추가하기 :: 자바스터디
 블랙박스에서 엔터프라이즈 까지, JMX 1.1 style (영문) :: IBM
 블랙 박스에서 엔터프라이즈 까지, JMX 1.1 스타일 (영문):: IBM
 블랙박스에서 엔터프라이즈 까지, JMX 통합_JMX Agent를 네트워크 관리 시스템에 연결:: IBM
 자바 애플리케이션에서 USB 장치에 접근하기 (영문) :: IBM

J2SE 기타

 클래스 변형하기 (영문) :: IBM
 보다 나은 HashMap 구현하기 (영문) :: IBM
 변이(mutate)할 것인가 말것인가 (영문) :: IBM
 무한정 progress bars (영문) :: IBM
 다중 스레드 애플리케이션 프로그래밍을 쉽게 구현. Consumer 클래스:: IBM
 안전한 구조 기술 (영문) :: IBM
 자바 애플리케이션에서의 회귀 태스크 스케줄링 (영문) :: IBM
 자바 최적화 기술_자바 애플리케이션의 퍼포먼스 향상을 위한 실질 가이드 :: IBM
 패턴 매칭 :: 자바스터디
 정규식을 위한 추상 자바 API 구현하기_Perl5 regexp 라이브러리를 사용 :: IBM
 새로운 regex 라이브러리를 이용한 문자 시퀀스 파싱하기 (영문) :: IBM
 패키지 의존성 줄이기 (영문) :: IBM
 해시(hash) 해부 (영문) :: IBM
 캐릭터 세트(Character set) (영문) :: IBM
 내 쓰레드는 어디에_서버 애플리케이션에서 쓰레드 유출 피하기 :: IBM
 Preferences API를 사용하여 객체 저장하기 (영문) :: IBM
 SpringLayout 매니저 (gridbagLayout으로 부족할 때)(영문) :: IBM
 String 클래스의 오타(mistyping) 방지하기 (영문) :: IBM
 Shutdown hook클래스 작성방법 및 샘플 :: javapattern.info
 Comparator클래스의 객체비교를 통한 sorting :: javapattern.info
 Deep Copy, Shallow Copy에 관한 Perfomance Test 및 고려사항 :: javapattern.info
 Property Utility Examples_1 :: javapattern.info
 Property Utility Examples_2 :: javapattern.info
 Reflection을 이용한 Value Object비교 :: javapattern.info
 박용우님의 '스노우크래프트'자바강좌 :: 자바스터디

JSP

1.JSP 란? MS의 ASP처럼 java로 구현된 서버 스크립트입니다.

2.프로그램? java.sun.com/products/servlet/index.html

3.매뉴얼? java.sun.com/products/jsp/tags/tags.html

4.자세한 정보 java.sun.com/products/jsp

5.JSP FAQ www.esperanto.org.nz/jsp/jspfaq.html

6.JSP Developer's Guide java.sun.com/products/jsp/docs.html

 JSP강좌 [01] [02] [03] :: JSTORM
 JSP기초JSP이론 [01] [02] [03] [04] [05] [06] [07] :: 자바스터디강좌 by 파란공책
 http://www.jabook.org/jbjsp/jbjsp_20000_0_0.html :: jabook의 JSP강좌 링크
 JSP기초(Java Server Programming 번역일부) :: JSTORM

 INSTALL 

Tomcat4 설치하기 Windows NT/2K/XP, 98/ME :: okjsp

Tomcat4 Apache1.3.22연동 (mod_jk이용) (mod_webapp이용) :: okjsp

Tomcat 가상호스트 설정하기 :: okjsp

Apache 가상호스트 설정하기 ::okjsp

win98+apache+tomcat (win98과 winMe Tomcat 3.2.1, apache 1.3.14) :: okjsp

윈98 + 아파치 + 톰켓 설치 :: kimho.pe.kr

Tomcat 4.0 설치 (Windows 2000) :: kimho.pe.kr

apache + Tomcat설치하기 :: 자바스터디

리눅스에서 Tomcat 4.0 + 아파치 설치 :: kimho.pe.kr

Apache와 Tomcat4.0.1의연동(윈도2000) :: 김성박

Tomcat-apache 연동 :: okjsp

linux + apache + Tomcat설치하기 :: 자바스터디 

Tomcat 3.2의 루트디렉토리 (Tomcat의 기본디렉토리 변경) :: okjsp

Tomcat 4.1의 루트디렉토리 (+ Context 추가) :: okjsp

win2k server + IIS + tomcat 3.2.3 (이미지 캡쳐) :: okjsp

IIS + tomcat 3.2.3 Context추가 (conf/uriworkermap.properties 변경) :: okjsp

IIS에서 자카르타톰캣 돌리기 :: 최종명

oracle 9i + jdbc + tomcat 4.0.3 연동 :: 하이텔 김현규(pasome)

일반계정으로 JSP 돌리기 :: kimho.pe.kr

Tomcat 서비스 설치하기 (NT, Tomcat 3.2.2 ) :: okjsp

win2000+apache+tomcat :: 자바스터디 

win2000+IIS5+Resin (Resin 1.2.1) :: okjsp

resin install :: 자바스터디

Win2000에서 resin설치하기 :: 자바스터디

IIS에서 RESIN설치하기 :: 중앙정보기술 정원희

Resin 루트디렉토리 (Resin 1.2.1 기본디렉토리를 변경) :: okjsp

Apache1.X or 2.X+Resin 2.1.6 installed on Linux or Unix :: javapattern.info

자바 서비스를 위한 리눅스 보안 (영문) :: IBM

 응용

Eclipse 시작하기 :: okjsp

Form study #1 :: okjsp

Tomcat 4 Manager 사용하기 :: okjsp

jsp에서 log() 이용하기 :: okjsp

WAR (Web ARchive jsp로 만든 웹 어플리케이션을 쉽게 배포) :: okjsp

한글처리 (일반적인 한글처리) :: okjsp

한글처리 빈 (빈에서의 한글처리) :: okjsp

useBean :: okjsp

톰켓에서 useBean 사용하기 :: kimho.pe.kr

session bean :: okjsp

bean 활용[1] [2] :: okjsp

FileUpload :: okjsp

JspSmartUpload 설치 :: okjsp

JspSmartUpload F&Q :: okjsp

jsp 에러잡기 :: okjsp

include 집중분석 :: okjsp

수학 내용을 포함하는 동적 웹 사이트 구축하기(JSP 기술과 LateX) :: IBM

패킹(Packing) (영문) :: IBM

The expression language_JSP 애플리케이션용 MA 단순화하기 :: IBM

Echo 웹 프레임웍으로 작업하기 [1] [2] :: IBM

include를 이용한 동적 콘텐트 조작 (영문) :: IBM

JSP 코드로 이미지 관리하기_동적 서블릿 이미지 메이킹을 마음대로! :: IBM

JSP best practices 외부 사이트에서 콘텐트를 가져오는 JSTL 태그 :: IBM

JSTL primer 프리젠테이션 (영문) :: IBM

JSTL을 이용한 JSP 페이지 업데이트 (영문) :: IBM

JSTL 기초 핵심에 접근하기_커스텀 태그를 이용한 플로우 제어와 URL 관리 :: IBM

JSTL 기초, Part 4 SQL과 XML 콘텐트에 접근하기 (영문) :: IBM

JSP best practices 타임 스탬프의 힘_JSP 페이지에 타임 스탬프 만들기 :: IBM

JSP best practices JSP 태그용 커스텀 애트리뷰트 만들기 :: IBM

JSP include 메커니즘으로 “look and feel”을 더욱 좋게 (영문) :: IBM

Struts, Tiles, JavaServer Faces 통합하기 :: IBM

Struts와 Tiles, 컴포넌트 기반의 개발 도우미 (영문) :: IBM

JSP Model 1 vs JSP Model 2 Architecture overview :: javapattern.info

URL Rewriting을 이용한 session tracking_1 :: javapattern.info

URL Rewriting을 이용한 session tracking_2 :: javapattern.info

 [ JSP 기본 강좌 ] (http://www.ihelpers.co.kr)

“안녕하세요. 00 님!!!” 과 JSP 동작원리에 대하여

JSP Comment

JSP Directive

Scripting Elements

iimplicit object
Implicit Object - Request
Implicit Object - Response,Out 
Implicit Object - Session, Application 

공지사항 만들기 (1) (2) (3) (4) (5) 

게시판 만들기 (1) (2) (3) (4) (5)

메일 발송 (1) (2)

 진민님의 JSP 간단 강좌 ( http://myhome.shinbiro.com/~jimmy/ )

1. JSP 강좌1(jsp 기본구성) 

2. JSP 강좌2(get,post처리 및 내장 인스턴트사용) 

3. JSP 강좌3(외부 클래스 사용하는 방법) 

4. JSP 강좌4(JDBC를 사용하는 방법) 

5. JSP 강좌5(Cookie를 사용하는 방법) 

6. JSP 강좌6(session을 사용하는 방법) 

7. JSP 강좌7(session사용시 주의점) 

 김호님의 게시판 만들기 강좌 (http://www.kimho.pe.kr/)

JSP 게시판(방명록) 만들기 (글 내용보기)

JSP 게시판(방명록) 만들기 (글 삭제하기)

JSP 게시판(방명록) 만들기 (글 수정하기)

JSP 게시판(방명록) 만들기 (글 올리기)

JSP 게시판(방명록) 만들기 (리스트 출력하기)

JSP 게시판(방명록) 만들기 (페이징 기법)

JSP 게시판(방명록) 만들기 (또 다른 페이징 기법 1회)

JSP 게시판(방명록) 만들기 (또 다른 페이징 기법 2회)

JSP 게시판(방명록) 만들기 (글 삭제하기)

JSP 게시판(방명록) 만들기 (글 수정하기)

답변형 게시판 만들기 1회 - 답변형 게시판 로직

답변형 게시판 만들기 2회 - 글 올리기

답변형 게시판 만들기 3회 - 글 리스트 보기

답변형 게시판 만들기 4회 - 글 내용 보기

servlet

 http://www.jabook.org/jbjsp/jbjsp_10000_0_0.html :: jabook의 서블릿강좌 링크

 자바 서블릿 프로그래밍 :: 박용우
 자바 서블릿(Java ServletTM) 아키텍처 :: 박용우
 Java Servlets 2.4를 이용한 필터링 (영문) :: IBM
 Servlet API와 NIO 완벽한 결합 (영문) :: IBM
 쿠키에 한글이 들어갈 경우 예제 서블릿 :: javapattern.info
 Making the Http WebServer(Java로 web server를 구현하는 방법)_1:: javapattern.info
 Making the Http WebServer(Java로 web server를 구현하는 방법)_2:: javapattern.info
 Making the Http WebServer(Java로 web server를 구현하는 방법)_3:: javapattern.info
 Servlet2.3 API Filter interface Implementation :: javapattern.info
 Servlet과 Applet간의 TCP_IP 통신_1 :: javapattern.info
 Servlet과 Applet간의 TCP_IP 통신_2 :: javapattern.info
 Servlet의 각종 Listener 사용방법 및 샘플 :: javapattern.info
 Web Tier Java Techonology :: javapattern.info

 INSTALL

JSP의 INSTALL 참고

taglibrary/customtag

 JSP Tag Library 기초강좌 :: okjsp

 커스텀 태그로 JSP 페이지 제어하기_커스텀 태그 라이브러리 통신의 모든 것 :: IBM

 Custom Tag Library (1) (2) (3) (4) (5) (6) :: http://www.ihelpers.co.kr

 커스텀 태그에서의 에러 핸들링 (영문) :: IBM

 JSP 커스텀 태그를 구현하는 다섯 단계 (영문) :: IBM

 InvokeEJB Custom Tag Library implementation_1 :: javapattern.info

 InvokeEJB Custom Tag Library implementation_2 :: javapattern.info

 InvokeEJB Custom Tag Library implementation_3 :: javapattern.info

 Struts 1.1 Tiles-framework에 대한 개요 및 사용방법 :: javapattern.info

 taglib (영문) :: IBM

웹서비스

 웹 티어 클러스터링, Part 1 JavaGroups로 웹 서비스와 애플리케이션 설계 :: IBM

JAXP/JAXR/JAX-RPC

SOAP

 아파치 SOAP 유형 매핑, Part 1 아파치의 직렬화 API 검토하기 :: IBM

 아파치 SOAP 유형 매핑, Part 2 정의된 직렬자와 비직렬자를 작성 :: IBM

Enterprise JavaBeans(EJB)
 J2EE 환경 소개 :: 자바스터디
 오라이온 서버 설치 및 J2EE 애플리케이션 배치 :: 자바스터디
 J2EE 신기술의 해설 :: 자바스터디

 [ EJB 기본문서 ]

Java Enterprise edition tutorial :: SUN

썬 사의 EJB 규약

Enterprise Java Beans란 무엇인가? [01] [02] [03] [04] [05] :: JSTORM

EJB 한글자료 

EJB 실전프로그래밍 (Persistence PowerTier for EJB) :: 자바스터디

Java Enterprise [PDF] :: 김국현님 

EJB 성능향상을 위한 Best Practice [1] [2] :: JSTORM

Writing Enterprise Application [01] [02] [03] [04] [05] [06] [07] :: JSTORM

EJB 디자인 패턴 ↓

 [ EJB 응용 ]

EJB의 트랜잭션 :: JSTORM 박지훈님

J2EE 애플리케이션에서의 XML :: JSTORM 한제택님 

자바 서버상에서 서블렛의 활용 :: 핸디소프트 윤동빈님 

J2EE에서의 작업 스케쥴링 :: JSTORM 윤준호님 

J2EE 신기술 해설 :: 한국오라클(주) 안병문님 

Component Architecture(CORBA, EJB, COM) :: 김국현님 

Grady Report - EJB, Design Pattern, XP 강좌 문서 :: 박현철(hpark@kebi.com) 

이런 J2EE프로젝트는 위험하다 :: JSTORM

LDAP 소개 :: database.sarang.net 부산대학교 컴공과 박근오님 (MS WORD)

분산 관리 솔루션 (영문) :: IBM

상태보존형(stateful) 네트워크용 J2EE (영문) :: IBM

싱글사인온 솔루션 구현 (영문) :: IBM

싱글사인온 GSS-API와 Kerberos 티켓을 사용하여 SSO를 구현 :: IBM

EJB 예외 처리 실전 (영문) :: IBM

타당성검사(Validation) 헬퍼(helper) 클래스_데이터-포맷 타당성 검사에서 코드 중복 없애기 :: IBM

데이터 타당성검사(validation) (영문) :: IBM

동적 delegate_Java reflection을 이용하여 보다 일반적인 business delegate 구현하기 :: IBM

보다 나은 예외 처리 프레임웍 구현하기 (영문) :: IBM

엔터티 빈 보호_Session Facade 패턴으로 데이터를 안전하게 관리하기 :: IBM

Business Delegate 패턴_EJB 디자인에서의 추상 비지니스, 구현, 애플리케이션 로직 :: IBM

delegation의 한계_business delegate의 대안 :: IBM

JNDI의 산업용 최적화 (영문) :: IBM

JNDI 미로 통과하기 (영문) :: IBM

value 객체를 사용하여 RMI 트랜잭션 속도 높이기 (영문) :: IBM

EJB State와 SOAP 헤더 (영문) :: IBM

JavaSpaces로 적응력 있고 광범위한 솔루션 구현하기 (영문) :: IBM

J2EE 1.2에 다중 애플리케이션 전개하기 (영문) :: IBM

J2EE 내부 객체 사용 (영문) :: IBM

J2EE 영속적인 데이터 관리, Part 1 (영문) :: IBM

J2EE 영속적인 데이터 관리, Part 2 (영문) :: IBM

J2EE를 이용한 서비스 지향 아키텍쳐 프레임웍 설계 (영문) :: IBM

stateful 웹 애플리케이션의 구현과 관리 (영문) :: IBM

stateless 네트워크용 J2EE 기술 (영문) :: IBM

Java Message Service(JMS)

 벤더로부터 독립된 JMS 솔루션 구현하기 :: IBM

 메시지 큐잉이 기업 애플리케이션의 유연성과 확장성을 향상시키는 방법:: IBM

 JMS를 이용한 엔터프라이즈 메시징 (영문) :: IBM

application server

 JEUS 기반의 J2EE - from TmaxSoft 
JEUS EJB Server의 관리와 이를 이용한 EJB 개발 (PDF) 
JEUS JTS의 구조와 이를 이용한 개발 (PDF) 
JDBC의 개념과 프로그래밍하는 방법 (PDF) 
XML 소개와 XML APPLICATION 개발 (PDF) 
JEUS JMS의 구조와 이를 이용한 개발 (PDF) 
JEUS JNDI의 구조와 이를 이용한 개발 (PDF) 
WebtoB Web Server의 소개 (PDF)

 HP Netaction Application Server 기반의 J2EE - from Nicstech 
HP Netaction Application Server 설치 방법(WIN 환경) [MS-Word] 
HP Netaction Application Server 설치 방법(UNIX/LINUX 환경) [MS-Word] 
HP Netaction Application Server 에서 웹서버 세팅 방법 [MS-Word] 
HP Netaction Application Server 기반의 JSP, Servlet 개발 방법 [MS-Word] 
HP Netaction Application Server기반에서 EJB사용을 위한 Tutorial[PDF] 
RADPAK 개발툴 사용방법 [MS-Word]

 Ea Server 기반의 J2EE - from Sybase 
EA Server 소개 (PDF) 
EJB-CORBA 개발 (PDF) 
분산어플리케이션 (PDF) 
EAServer & PowerJ Installation Guide (ZIP)

 PowerJ 연재 강좌 (PDF) 
Simple Application | 웹 어플리케이션 | EJB 컴포넌트 작성 | 컴포넌트 사용하기 
완벽한 J2EE Application 구축방법 (PDF)

 javapattern.info 강좌

IBM Webshpere 5.0 의 서버시작, 중지 및 EJB Deploy ANT Build

Web Application Framework개발방법(1)-Framework의 개요

Web Application Framework개발방법(2)-LifeCycle,Controller

Web Application Framework개발방법(3)-View page Composing

Web Application Framework최종 소스 및 인스톨

Weblogic 7에서 JMS Queue Browser 활용 1

Weblogic 7에서 JMS Queue Browser 활용 2

Weblogic EJB Deploy using ANT build

Java Data Objects(JDO)

 Castor JDO 시작하기(영문) :: IBM

 Castor를 이용한 데이터 바인딩 (영문) :: IBM

JavaMail

 JavaMail 설치 :: 자바스터디

 JavaMail 기본설치 :: okjsp

 JavaMail 폼메일 :: okjsp

 JavaMail 파일첨부메일 :: okjsp

 JavaMail 메일링리스트 :: okjsp

 Apache의 James 엔터프라이즈 이메일 서버 (영문) :: IBM

 javapattern의 java WebMail 구현

[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]

Transaction(JTA/JTS)

 트랜잭션에 대한 소개_트랜잭션은 신뢰성 있는 애플리케이션을 위한 구성 요소 :: IBM

 장막 뒤의 마법_J2EE 컨테이너가 트랜잭션 관리의 복잡성을 숨기는 방법:: IBM

 보안과 퍼포먼스 균형맞추기_트랜잭션 경계설정과 고립화 가이드라인 :: IBM

 WS-AtomicTransaction과 JTA를 이용한 분산 트랜잭션 (영문) :: IBM

J2EE 기타

 Authenticator클래스를 통한 서버인증 메일전송 :: javapattern.info

 Distributed Transaction Introduce :: javapattern.info

 JRMP, IIOP type의 RMI분산 객체(RMI over IIOP) :: javapattern.info

 MarshalledObject and Deserialization :: javapattern.info

 RMI Peering System Construct :: javapattern.info

 RMI programming, The Lifecycle of server :: javapattern.info

 WebLogic WLSPool Size변경 application :: javapattern.info

모바일(J2ME) :

 J2ME와 mobile device :: 김종원

 핸드폰 단말기용 자바 애플리케이션의 구현 :: 배준현

 네덜란드의 무선 기술 (영문) :: IBM

 모바일 장치 디텍션(detection) (영문) :: IBM

 P2P 네트워크 모바일 디바이스를 JXTA와 Jabber 클라이언트로 전환하기 :: IBM

 기존의 네트워크 경계를 넘어 확장되는 P2P 시스템 설계 :: IBM

 JXTA 2 고성능 P2P 네트워크 (영문) :: IBM

 무선 J2ME 보안 (영문) :: IBM

 EPOC에서 자바 애플리케이션 만들기 (영문) :: IBM

 J2ME 101, Part 3 Record Management System (영문) :: IBM

 J2ME 101, Part 4 Generic Connection Framework (영문) :: IBM

 J2ME 기록 관리 저장 (영문) :: IBM

 J2ME 애플리케이션과 Kerberos, Part 3 (영문) :: IBM

 J2ME를 무선 메시지교환으로 확장하기 (영문) :: IBM

 J2MEMIDP 애플리케이션 보안 (영문) :: IBM

 MIDlets 클래스_모든 J2ME 프로그램의 기반하에 구축하기 :: IBM

 Secrets of the wireless elite Jason Loia (영문) :: IBM

 Secrets of the wireless elite Nancy Lehrer(영문) :: IBM

 J2ME를 이용한 모바일 결제(m-payments)-모바일 장치에서 결제까지 :: IBM

 강사님별 강좌

 배준현님 마소 강의


무선단말을 위한 자바플랫폼 : CLDC/MIDP 
핸드폰에는 나만의 자바 애플리케이션을! 
OSGi로 여는 임베디드 자바 세상

 이경범님 마소 강의

알라딘 기반의 상용만화 애플리케이션 만들자

 김종원님 프세 강의

MIDP를 사용한 휴대폰 프로그래밍
J2MEWTK를 사용한 MIDlet Httpconnection 프로그래밍
SK-Aladdin VM(virtual machine)을 이용한 멀티 플렛폼 채팅 프로그램 작성
&J2ME와 embedded device

 유제정님 모바일 DB 강의

1. 모바일데이터베이스를 이용한 MIDP Sample 프로그램 구현

 김준동님 모바일 강의

소형기기를 위한 프로그래밍 전략

 정성권님 번역 자료

Introduction to Wireless Application Development

 권기경님 번역 자료

Using XML in Wireless Applications
Connected Limited Device Configuration (CLDC) (CLDC API) (KJAVA API)

 권기경님 자료

컴파일에서 사전 검증, 실행까지 
이미지 사용 예제 분석
[번역] Connection Framework


 기기별 강좌

 Mobile Information Device Profile (MIDP) (MIDP-FCS API)
권기경님 자료

컴파일에서 사전 검증, 실행까지 
웹서버에 midp 응용프로그램을 올려 놓고 실행하기 

[번역] 
MIDP Inter-Communication with CGI and Servlets 
HTTP를 사용하는 MIDP Network Programming과 Connection Framework (정창수님번역) 
MIDP GUI Programming Programming the Phone Interface (오용석님번역)
Quick Start Guide: JavaTM 2 Platform Micro Edition, Wireless Toolkit (오광신님 번역)
MIDP Database Programming using RMS: a Persistent Storage for MIDlets (번역)

 PALM Pilot PDA (Palm OS) (PALM API)

권기경님 자료 :: 컴파일에서 사전 검증, 실행까지

 WABA (WabaSoft) (WABA API)

권기경님 자료 :: 컴파일에서 사전 검증, 실행까지

 n.TOP 마법사 (SK Telecom, XCE) (n.TOP 마법사 API) (XCE Tutorial)

박재범님 강의 :: 컴파일에서 실행까지 
마소자료 :: MIDP 소개 | SKT-P 소개 | 게임작성 소개

 EZ-JAVA 핸드폰 (LG Telecom) (EZ-JAVA 영문 API) (EZ-JAVA 한글 API)

권기경님 자료
컴파일에서 사전 검증, 실행까지
실제 폼에서 ez-java 응용프로그램 실행하기

박재범님 자료 :: 이미지 사용 예제 분석

 -MODE 핸드폰 (Nttdocomo) (I-MODE API)

권기경님 자료
컴파일에서 사전 검증, 실행까지 
i모드 Java 확장 API 클래스 라이브러리가 아닌 i-jade를 사용하여 컴파일과 실행까지 

wizardee님 자료 :: iAppli 개발환경 만들기

 iDEN 핸드폰 (Motorola) (CLDC API) (MIDP API

권기경님 자료 :: 컴파일에서 사전 검증, 실행까지

 Personal Java 강좌

황제헌님 자료
Personal Java Programming 
Personal Java 한글 encoding 문제 해결

CessHan for Palm-sized PC & PocketPC 설치 방법

KVM에 대한 기본 설명
어플리케이션 사이즈를 줄여주는 Obfuscator
SUN의 Monty 프로젝트 관련 자료
MIDP NG (New Generation) 버젼에 관한 자료 [UI, Games, and Sound] [Security and Networking]
Parsing XML in J2ME MIDP
Introducing Wireless JMS (PDF)

XML
 XML의 기본개요 :: javapattern.info
 XML 정리 (pdf파일)
 XML korean spec :: http://user.chollian.net/~clevekim
 자바와 XML :: JSTROM
 Using XML in Oracle
 XML 게시판 [소스] :: 김미영 님
 XML 과 데이타베이스 :: 박용우
 XSL, XSLT, XPATH [1] [2] [3] [4]:: 전윤경(ygchon@penta.co.kr)
 DOM으로 프로그래밍하자 [1] [2] :: 전윤경(ygchon@penta.co.kr)
 About DOM & DOM Programming with Java :: javapattern.info
 DOM Level 3 Core의 핵심 기능 [1] [2] (영문) :: IBM
 About SAX & SAX programming with Java :: javapattern.info
 SAX 파서 설치하기 (영문) :: IBM
 자바 프로그래밍으로 온라인 XML 데이터 검색하기_XML 파싱 :: IBM
 자바 프로그래밍의 XML-RPC (영문) :: IBM
 자바가 본 XML :: 자바스터디
 Digester와 Lucene을 이용한 XML 파싱, 인덱싱, 검색 (영문) :: IBM
 XML 로 홈페이지 만들기 :: 전윤경(ygchon@penta.co.kr)
 IBM developerWorks XML 아티클 템플릿 (영문) :: IBM
 자바 문서 모델 사용법_상이한 자바 XML 문서 모델들이 작동하는 방식:: IBM
 Schema Infoset Model로 스키마에 대한 복잡한 쿼리를 간단히! :: IBM
 Working XML 경로 컴파일과 테스트 자동화_알고리즘과 JUnit 자세히 살펴보기 :: IBM
 XML 데이터 바인딩, 성능 (영문) :: IBM
 XML 데이터 바인딩, JiBX architecture (영문) :: IBM
 XML 데이터 바인딩, JiBX 사용하기 (영문):: IBM
 About JDOM & JDOM Programming with Java.htm :: javapattern.info
 FOP를 이용한 PDF생성시 한글변환방법 :: javapattern.info
 XML을 이용한 Database Query Manager 구현하기 :: javapattern.info
 XMLBeans를 이용한 xml binding.htm :: javapattern.info

IDE

 JBuilder 5 한글 매뉴얼 (pdf)
 JBuilder 6 한글 매뉴얼
 JBuilder 7 [인스톨] [환경설정](ppt)
 JBuilder 에서 휠마우스 사용
 제이빌더에서 라인넘버 표시
 제이빌더에서 Ant 실행
 제이빌더에서 자바코드 뷰티파이어
 한국 인프라이즈 제공 J 빌더 특강 [ZIP로 내려받기] :: javastudy.co.kr
 Eclipse Platform 시작하기 :: IBM
 Eclipse 플러그인 개발하기_플러그인 구현, 디버그, 설치 :: IBM
 Eclipse 플러그인 서비스 (영문) :: IBM
 Eclipse Workbench 밖에서 Eclipse GUI 사용하기, 간단한 파일 탐색 애플리케이션 :: IBM
 Eclipse Workbench 밖에서 Eclipse GUI 사용하기, 메뉴, 툴바 추가(영문) :: IBM
 Eclipse와 HSQLDB 관계형 데이터베이스를 Eclipse에 임베딩하기, Part 1 (영문) :: IBM
 Eclipse의 자바 개발 툴 확장하기 (영문) :: IBM
 Graphical Editing Framework을 사용하여 Eclipse 기반 애플리케이션 만들기 (영문) :: IBM

매뉴얼
 VisualAgeForJava 3.0 한글 매뉴얼 (pdf)
 WSCP 매뉴얼 (doc) :: 윤성민

디자인패턴
 디자인패턴 실전체험 [1] [2] [3] [4] :: 자바스터디
 기본패턴 Overview :: javapattern.info
 인터페이스! 다시 생각하기 :: 오광신
 Good Java Style :: JSTORM
 Command패턴의 기초 :: JSTORM
 동적으로 자바 어플리케이션 확장하기 :: JSTORM
 DesignPattern for Java [소스] :: JSTORM
 리팩토링(Refactoring)_Eclipse의 자동화 리팩토링 기능 :: IBM
 Double-checked locking과 Singleton 패턴_double-checked locking 이디엄 :: IBM
 반 패턴으로 프로그래밍을 향상시키는 방법 :: IBM

 EBJ 디자인패턴

Session Facade :: JSTORM

EJB Home Factory :: JSTORM

Business Interface :: JSTORM

Dual Persistent Entity Bean :: JSTORM

JDBC for Reading :: JSTORM

Business Delegate :: JSTORM

Data Transfer HashMap :: JSTORM

Data Transfer RowSet :: JSTORM

EJB Command Pattern :: JSTORM

Version Number :: JSTORM

"Dependent Value Object" 와 큰 단위의 BMP 엔티 :: JSTORM

EJB 전략, 팁 그리고 관례 :: JSTORM

Message Facade :: JSTORM

Value Object Factory :: JSTORM

Data Access Command Beans :: JSTORM

Blueprint(J2EE Petstore) client tier pattern overview :: javapattern.info

EJB design performance tips :: javapattern.info 

객체지향 UML
 박용우님의 객체지향형 프로그래밍 :: 자바스터디
 심원도님의 UML강좌 :: 자바스터디
 이준규님의 객체지향형 강좌 :: 자바스터디
 Rational Rose에서 UML을 이용한 모델링 [1] [2] [3] [4] :: 자바스터디
 http://www.jabook.org/jbjava2/jbjava2_10000_0_0.html :: jabook의 객체지향강좌링크

자바스크립트
 자바스크립트 레퍼런스(win help용)
 자바 초보자를 위한 JavaScript 강좌 :: javanuri
 애플릿과의 통신(LIVE CONNECTION)을 위한 netscape.jar

XP(Extreame Programming)
 Extreme Programming 돌아온 XP distilled, Part 1_XP의 진실
 Extreme Programming을 밝힌다 돌아온 XP distilled, Part 2 (영문)
 Extreme Programming을 밝힌다 돌아온 XP distilled, Part 3 (영문)
 Extreme Programming을 밝힌다 진정한 XP 고객_소프트웨어 프로젝트를 운영하는 방법 배우기
 Extreme Programming을 밝힌다 페어 프로그래밍(Pair programming) (영문)
 Extreme Programming Just-in-time 디자인 (영문)
 Extreme Programming Test-driven 프로그래밍_코드를 작성하기 전에 테스트 먼저 작성하기
 Extreme Programming 작업에 맞는 (XP) 툴
 Extreme Programming Just-in-time 디자인 (영문)

기타
 ANT 매뉴얼 [] [] :: http://www.hanbitbook.co.kr
 Apache ANT Guide :: 최지웅
 자바 마이그레이션 :: 하동욱(handan@hitel.net)
 JINI기술과 실제 :: 자바스터디
 고급 객체 직렬화 :: JSTORM
 COM과 자바의 연결 :: 핸디소프트 윤동빈
 PDF와 자바 :: JSTORM 윤준호
 JavaCC를 이용하여 당신만의 언어를 만들자 [소스]:: JSTORM 윤준호
 JavaCC, 파스 트리, XQuery 문법, Part 1 (영문) :: IBM
 JavaCC, 파스 트리, XQuery 문법, Part 2 (영문) :: IBM
 인스턴트 로깅(Instant logging) log4j 활용하기 (영문) :: IBM
 Log4j를 위한 여러가지 환경설정(xml property)_1 :: javapattern.info
 Log4j를 위한 여러가지 환경설정(xml property)_2 :: javapattern.info
 Log4j의 출력방향 전환하기 :: javapattern.info
 Extract unicode from ASCII format text :: javapattern.info
 MP3 File Footer ID3V2 Spec Navigator :: javapattern.info
 객체 보유 (object prevalence) 소개 (영문) :: IBM
 동적 이벤트 리스너 프록시 (영문) :: IBM
 리눅스에 LSID 권한 구현하기 (영문) :: IBM
 매력적인 Jython (영문) :: IBM
 소프트웨어 개발의 미래 (영문) :: IBM
 접근가능성을 위한 코딩 (영문) :: IBM
 쉬운 코드 관리를 위한 디자인 (영문) :: IBM
 영속적인 트레이스 시스템으로 디버깅을 쉽게! (영문) :: IBM
 영역 지향 프로그래밍(Aspect -oriented programming)으로 모듈화 향상시키기(AspectJ) :: IBM
 강결합의 약점을 없앤 AOP (영문) :: IBM
 자바 native 컴파일의 무게 재기_자바 소스에서 native 코드를 생성할 때의 장단점 :: IBM
 자바 프로그래밍에서의 Assertion과 temporal logic (영문) :: IBM
 버그 패턴에 Temporal logic 사용하기 (영문) :: IBM
 콘텐트를 배치하는 새로운 방법 (영문) :: IBM
 플랫폼 의존 gotchas: platform-dependent bug patterns (영문) :: IBM
 AspectJ와 mock 객체를 이용한 유연한 테스팅 :: IBM
 Concurrency made simple util.concurrent package :: IBM
 Concurrent 컬렉션 클래스 (영문) :: IBM
 ContentHandler의 애트리뷰트 (영문) :: IBM
 ContentHandler의 엘리먼트와 텍스트 (영문) :: IBM
 '스팩(specification)'이라는 줄타기를 하다_잘 정의된 스팩의 중요성 :: IBM
 깊이 우선 Visitor와 broken dispatches_Visitor 패턴 변종으로 코드 간결성 향상 :: IBM
 대화식 검사 기능을 제공하는 Repls_소프트웨어를 효과적으로 진단하는 기법 :: IBM
 Run-on Initializer 버그 패턴_인자를 가진 생성자를 피함 :: IBM
 e-business on demand 개발자의 로드맵 (영문) :: IBM
 Eye on performance 객체 레퍼런싱 (영문) :: IBM
 Eye on performance 마이크로 퍼포먼스 벤치마킹 (영문) :: IBM
 Eye on performance 스트레스의 하중 (영문) :: IBM
 Eye on performance 예외에 대한 예외 (영문) :: IBM
 Eye on performance 향상된 개발 프로세스 (영문) :: IBM
 Javassist를 이용한 클래스 변형 (영문) :: IBM
 JML 시작하기_JML 주석으로 자바 프로그램 향상시키기 :: IBM
 peer-to-peer 컴퓨팅의 실제 IP 멀티캐스트 기반의 검색 :: IBM
 1vs순차N구조의 name-value pair DataSet 정의 :: javapattern.info
 코딩지침 :: javapattern.info
 Proxy하에서의 Client IP얻기.htm :: javapattern.info


※ 자료는 서로 공유되어야 합니다. ^_^ 각 강의자료의 저작권은 저작권자에게 있습니다.


'Java' 카테고리의 다른 글

NullPointerException을 예방하는 방법  (0) 2018.02.22