'Java/Java Basic'에 해당되는 글 24건

  1. 2013.09.12 JDK 7 update가 25에서 갑자기 40으로 올라갔네요.
  2. 2012.05.01 JDK 7 Update4 에서 추가된 기능들
  3. 2011.10.14 [자바 애플릿] 애플릿에서 사용하는 메모리 크기 증가시키기
  4. 2011.03.29 [Java Basic] 왜 Thread의 stop 메소드는 deprecated 되었을까?
  5. 2010.12.23 [Java source] 자바 소스 목록
  6. 2009.03.11 [정규 표현식 분석기] 웹 기반의 정규 표현식 분석기 1
  7. 2009.03.06 한빛 미디어 도서를 이용한 Java Roadmap
  8. 2009.02.11 [Java Runtime] Java Runtime.exec() 메소드가 잘 안돌아 갈 때 (CreateProcess error=2 발생)
  9. 2009.02.07 [자바 기본 강좌] 자바라는 단어만 들어도 스트레스를 받는 분들을 위한 초보 강좌-05 public, protected, private
  10. 2009.02.06 [자바 기본 강좌] 자바라는 단어만 들어도 스트레스를 받는 분들을 위한 초보 강좌-04 equals와 == 의 차이점
  11. 2009.01.28 [자바 기본 강좌] 자바라는 단어만 들어도 스트레스를 받는 분들을 위한 초보 강좌-03 자바 개발 툴
  12. 2009.01.25 [자바 기본 강좌] 자바라는 단어만 들어도 스트레스를 받는 분들을 위한 초보 강좌-02 JVM과 HotSpot
  13. 2009.01.08 [자바 기본 강좌] 자바라는 단어만 들어도 스트레스를 받는 분들을 위한 초보 강좌-01 JDK와 JRE
  14. 2008.06.04 [Java Basic] 자바 주석 (자바 코멘트) 관련 문서
  15. 2008.05.15 [Java Basic] Regular Expression (정규식, 정규 표현식)의 형식
  16. 2008.05.14 [Java Basic] Regular Expression (정규식, 정규 표현식)의 기본
  17. 2008.04.01 [링크] 자바의 어노테이션 (Annotation)
  18. 2008.02.23 [링크] 자바 기본을 키울수 있는 튜토리얼
  19. 2008.02.23 [링크] HP의 JVM 옵션
  20. 2008.02.23 [링크] IBM Java theory and practice: 퍼포먼스
  21. 2008.02.23 [링크] 썬의 collection 관련 튜토리얼
  22. 2008.02.23 [링크] HP 관련 자바 성능 튜닝 관련 내용들
  23. 2008.02.23 [링크] 자바원 세미나
  24. 2008.02.23 [링크] Sun 성능 관련 유용한 팁들 모음

제목 그대로다. 

JDK7의 버전이 update 25에서 40으로 훌쩍 뛰어넘어버렸다. 

가장 주목할만한 점은 JMC라는 JRockit에서만 제공하던 Mission Control이라는 모니터링 툴이 추가된 것인데, Commercial 라이센스에서 사용할 수 있단다. 

과연 얘네들이 이야기하는 Commercial 라이센스는 무엇일까?

아래 문장을 보면 나와 있음.

Java Mission Control (JMC) is a commercial feature available for java users with a commercial License. (???)

http://www.oracle.com/technetwork/java/javase/7u40-relnotes-2004172.html

Posted by tuning-java
,

Java Performance 뉴스레터에서 JDK 7 Update 4 에서 변경된 사항이 많다고 하길래 한번 살펴봤다. 

- jcmd 명렁어 추가
- Java Flight Recorder 기능 추가
- G1 안정화 버전 출시

직접 확인은 해보지 않았으나, 간단히 살펴보면 JRockit에서 제공되던 기능들이라고 한다.
- jcmd 명령은 실행중인 자바 프로세스에 붙어서 각종 정보들을 읽어들이는 기능이다. 
jstat, jstack 등을 통해서 제공 받을 수 있는 내용들을 이 명령어 하나로 처리할 수 있다. 운영에서  막 사용해도 될런지는 모르겠다.  
자세한 내용은 http://hirt.se/blog/?p=211 를 참조하기 바란다.

- Java Flight Recorder는 자바용 블랙박스라고 생각하면 된다고 한다. 
자세한 내용은 http://docs.oracle.com/cd/E15289_01/doc.40/e15070/introduction.htm 를 참조하기 바란다. 

- G1 안정화는 이제 좀 믿을만 하다는 것인가 ? 얘는 좀더 지켜봐야 할 듯 하다. 

어찌 되었건 JDK 7 으로 업그레이드가 된다면, Update 4 이상에서는 장애상황 확인이 보다 쉬워  질 것으로 보인다. ㅎㅎㅎ 

Posted by tuning-java
,
http://www.webmo.net/support/java_memory.html

요즘 애플릿을 사용하는 프로그램을 쓰고 있는데,
메모리가 부족해서 항상 버벅거린다.
이러한 문제를 해결하기 위한 방법은 바로 메모리 크기를 증가시키는 것 !!!

위의 옵션대로 값을 변경 한 후 해당 브라우저를 재시작하면 지정한 값이 먹는다.
나는
-Xms256m -Xmx512m 으로 설정해 놨다. ㅎㅎㅎ  
Posted by tuning-java
,
답은 아래 링크에 있는데...
http://download.oracle.com/javase/1.5.0/docs/guide/misc/threadPrimitiveDeprecation.html 

아래의 글도 읽어보면 도움이 될 것입니다.
http://forward.com.au/javaProgramming/HowToStopAThread.html

그런데, 이게 최선입니까?
확실해요? 
Posted by tuning-java
,
가끔가다 JDK 소스를 보고 싶을 때가 있는데,
기본적으로 JDK를 설치하면 Java 소스들만 제공된다.

실제 C 레벨까지의 소스를 보려면 아래 링크에서 원하는 버전을 선택해서 보면 된다.

http://download.java.net/jdk6/6u10/archive/
Posted by tuning-java
,
http://regexp.resource.googlepages.com/analyzer.html

웹기반의 정규 표현식을 분석해주는 툴이 있어서 소개한다.

정규 표현식을 서비스에 적용하기 전에,
한번정도는 체크해 주는 쎈쑤~~~
Posted by tuning-java
,

한빛미디어에서 이벤트를 한다고 하길래 한번 어떤 순서로 공부를 해야 하는지를 정리해본다.

먼저 이벤트 관련 설문 내용

1. 현재 하시는 일은 무엇인가요?

글쎄요. 저도 제가 요즘 뭘 하는지... 그냥 요즘은 수명업무 하고 있습니다. 

2. 로드맵에서 각 단계별로 같이 보면 좋은 책이 있나요?

이 질문의 요지는 잘 모르겠지만, 같이보면 좋은 책은 같이 나열 했습니다. ^^;

3. 로드맵에 대한 자신의 생각을 적어주세요.

로드맵을 작성하다보니, 웹기반 시스템을 만들 개발자에겐 어느정도 도움이 되는 책들이 많으나, 서버 모듈이나 Core 모듈을 개발하는 개발자용 책은 그리 많지가 않은거 같네요.


먼저 이벤트 페이지에 올라와 있는, 책들의 표지 목록을 보니 “엄청나게 많은 종류의 책이 출판되고 있구나” 라는 사실을 알게되었다. 그것도 IT 책만을 전문적으로 출판하는 회사에서…

그런데, 표지 목록에 있는 책들을 보니, 이미 절판된 책도 있는 것으로 보였다. 최대한 내가 알고 있는 절판 책들은 뺐으나, 이 목록에 포함되었을 수도 있으니 이점 양해해 주기 바란다.

추가로 이 로드맵은 웹 시스템 개발자를 위한 로드맵이고, 내 개인적인 의견이며, 사람마다 생각이 틀릴 수도 있다는 점을 이해해 주기 바란다.

 

그럼 이제 시작한다.

자바를 배우기 시작할 때에는 가장 먼저 자바의 기본과 알고리즘을 알아야 한다. 게다가 IDE 사용법까지…

 

기본적인 자바에 대해서 알았다면, 웹 개발을 위한 필수인 HTML과 자바 스크립트에 대해서 알아야 한다.

 

그리고, DB에 대해서 알아야 한다는 것은 두말할 필요도 없다.

 

DB까지 공부했다면, 본격적으로 Java를 이용한 웹 개발 환경인 JSP, Servlet, EJB 에 대해서 알아 두자.
(참고로 EJB는 죽었다고 생각 될 수도 있지만, EJB에서 제공하는 보안, 트랜젝션등의 관리 기술에 대해서는 알아두는 것이 나중에 정신 건강을 위해서 매우 좋다. ^^)

 

이게 끝이라고 생각할 수도 있겠지만, 이제 시작이닷!!!

언제까지 누가 모델링해준 것만 보고 만들것인가? 직접 자기가 모델링하고 설계할 수 있어야 한다.

그러기 위해선 UML, CBD(이것도 한물 갔다고 생각할 수 있지만, 개념은 알아야한다.), SOA(이것에 대한 책이 한빛엔 없어보인다)등에 대해서 알아야지…

 

보다 더 제대로 알고 개발하기 위해선, XML, 쓰레드, IO, 네트워킹, 리펙토링 정도는 공부해야 한다. 다른건 다 모르더라도 리펙토링은 반드시~~~~

 

그 다음엔, 요즘에 많이 사용되는 프레임웍과 Web 2.0, AJAX에 대해서도 공부해야 한다.
참고로 아래에 나와 있는 책들의 버젼은 내가 잘 모르며, 특히 프레임웍 책을 살 때에는 요즘 최신 버젼의 프레임웍인지에 대해서 잘 알아 본 후에 구입해야 한다. 버젼에 따라서 달라지는게 많아지기 때문에…

 

그럼 이제 개발한 것을 운영 서버에서 컴파일하거나 올려야 겠죠?

리눅스나 유닉스의 기본 명령어 정도는 알아야 한다.

 

마지막으로 개발의 꽃인 튜닝에 대해서 공부하자.

 

물론 나도 여기에 있는 모든 책을 읽은 것은 아니다.
하지만, 입맛에 맞게 골라서 Java 기반의 웹 개발에 대한 기본을 튼튼히 다지자.

Posted by tuning-java
,
Java의 Runtime이라는 클래스가 있다.

이 클래스를 사용하면, shell script 던지, exe 파일이던 어떤 실행파일이라도
자바 JVM에서 실행시킬 수 있다.

그런데, 정상적으로 잘 실행되면 걱정이 없는데,
CreateProcess error=2
를 떨어뜨리면서 실행이 가끔 안될 때가 있다.

그럴땐 아래의 링크를 참조해서 해결하기 바란다.

http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=1
Posted by tuning-java
,
자바에서 public, protected, private, 그리고, 아무것도 지정하지 않을 때의 차이점도 가끔 혼동될 때가 있다.

물론 public 이나 private 갖고 혼동하는 사람은 없겠지만...

protected는 자기 자신과 같은 패키지, 그리고 상속관계에 있는 클래스에서 접근이 가능하고,

아무것도 명시하지 않을 경우에는 자기 자신과 같은 패키지에서만 접근 가능하다.

그래서 접근 가능성은
public > protected > 아무것도 지정하지 않을 때 > private 순이다.

Posted by tuning-java
,
자바를 처음 배울때 혼동되는 것중 하나가 equals를 언제 사용해야 하고, ==을 언제 사용해야 하는지에 대해서다.

영어를 잘 하시는 분은 아래의 링크를 읽어보시면, 자세한 내용을 확인할 수 있을 것이다.

http://www.javabeat.net/qna/13-what-is-difference-between-equals-and-/

http://leepoint.net/notes-java/data/expressions/22compareobjects.html

결론만 이야기하면, equals는 객체의 값을 비교하고, ==은 동일한 객체인지를 비교하는 것이다.

기본적으로 String 클래스만 값이 같은지를 비교하고, 여러분들이 만든 클래스는 자동으로 각 속성들을 비교해주지 않기 때문에, equals() 메소드를 직접 구현해야만, equals로 비교가 가능하다.

Posted by tuning-java
,
1999년도에 내가 자바를 배울때의 개발툴은 Ultra Edit 이었다.
지금도 울트라 에딧은 자바만이아닌 여러 언어의 최고의 개발 툴이다.

하지만 현재 가장 많이 사용되는 툴은 누가 뭐래도 eclipse 일 것이다.
이클립스를 다운로드 받으시려면, 검색엔진에서 www.eclipse.org 에 접속후 상단에 있는 Download를 선택하여,
원하는 것을 받으면 되는데, 자바 기반의 웹 어플리케이션을 개발할 경우에는 아래의 그림에서 가장 첫번째 이클립스를...
그렇지 않은 경우에는 그 아래에 있는 이클립스를 다운 받으면 된다.


추가로 이클립스 이외에 유명한 툴로는 Sun 에서 제공하는 NetBeans라는 툴이 있긴 한데,
약간 프로그램이 무거워서 많은 사람들이 애용하지는 않는다.

그리고, 개인적으로는 예전에 세미나 하면서 무료로 받은 IntelliJ라는 툴을 사용할 때도 있는데,
아직까지는 이클립스보다는 좋은 툴 같다.(상용이라는게 좀 흠이지만...)


다음에는 equals와 == 에 대해서 알아보도록 하겠다.
Posted by tuning-java
,

먼저 JVM이 뭔지 알아보자.

JVM은 Java Virtual Machine의 약자로 한국말로하면 자바 가상 머신을 의미한다.

쉽게 말하면 자바로 만들어진 클래스 파일을 번역해서 수행하는 소프트웨어라고 생각하면 된다. 자세한 내용은 아래 링크를 참조하면 된다. (JVM의 스펙에 대한 내용이라 열나 어렵긴 할 것이다.)

http://java.sun.com/docs/books/jvms/


그렇다면Hotspot은 뭘까 ??? 

Hotspot은 VM의 한 종류라고 보면된다. 이게 나오기 전의 VM을 보통 클래식 VM 이라고 부르며, Hotspot에 대해서 한 마디로 설명하면 다음과 같다.(출처 : http://kr.sun.com/software/opensource/faq.html#b11)

Q :
자바 HotSpot 가상머신은 무엇이고, 개발자들은 이 컴포넌트로 무엇을 할 수 있나요?
A :
자바 HotSpot은 일종의 자바 가상머신의 구현으로, 자바 HotSpot VM에는 다음과 같은 자바 플랫폼을 위한 핵심 실행 엔진이 포함됩니다:
  • 자바 바이트코드를 지원 하드웨어 플랫폼 상에서 최적화된 네이티브 기계어 코드로 변환하는 동적 컴파일러
  • 메모리 관리 및 가비지 컬렉션 서브시스템
  • 스레드 및 동기화
  • 모니터링, 디버깅, 프로파일링 텔레메트리(profiling telemetry)
  • 바이트코드 검사기(bytecode verifier)를 포함한 자바 보안 아키텍처 부분들

HotSpot은 그 자체가 “일단 한번 작성하면 어디서든 실행된다(Write Once, Run Anywhere)”라는 자바 기술의 약속을 가장 구체적으로 실현한 Java SE 플랫폼 컴포넌트라 할 수 있습니다.

개발자들은 이 코드를 통해 세계 최고 수준의 가상머신이 어떻게 구축되는지 살펴볼 수 있을 뿐 아니라, 버그 픽스, 그리고 새로운 가비지 컬렉션, 동기화, 바이트코드 컴파일러 알고리즘의 테스트, VM을 새로운 하드웨어 아키텍처와 운영체제에 이식하는 등의 작업을 수행할 수 있게 됩니다.


Hotspot 에 대해서는 아래 링크를 참조하는 것이 가장 쉬울 것이다.

http://java.sun.com/javase/technologies/hotspot/index.jsp

그리고, Hotspot  VM을 튜닝하기 위한 옵션은 아래의 링크를 참조하면 된다.

http://java.sun.com/javase/technologies/hotspot/vmoptions.jsp

다음에는 개발툴에 대해서 알아 보자.

Posted by tuning-java
,
자바라는 단어만 들어도 스트레스를 받는 분들이 가끔 계신것 같습니다.

특히 경력이 10년 넘으신 분들 중 서버나 DB, 네트웍만 하신 분이나
C나 Cobol만을 하신 분들은 쉽게 접근하기가 어려운게 현실이지요.

그래서 오늘부터 틈틈이 자바의 ㅈ, Java의 J 도 모르시는 분들이 쉽게 자바를 배울 수 있도록
강좌를 개설하려 합니다.

자바 기본 문법은 그리 상세히 다루지 않을 겁니다.
그런건 책에 잘 나와 있으니까요.
가장 추천하는 책은 Head First Java 입니다.
http://www.yes24.com/Goods/FTGoodsView.aspx?goodsNo=1809610&CategoryNumber=001001003016
올해는 어떨지 모르겠지만, 작년까지만 해도 삼성SDS 신입사원 자습 교재였습니다.


고급 개발자분들, 저보다 똑똑하신분, 심장이 너무 약하신분들은 절대로 이 글을 보지 마세요.
그런분들이 거신 별 도움 안되는 딴지는 과감히 삭제하겠습니다. ^^;

그럼 시작하겠습니다.

기본적인 이해를 돕기 위해서 용어부터...
- JDK와 JRE
http://java.sun.com/
를 접속해 보세요.
(물론 영업니다. 영어에 울렁증이 있으셔도 그냥 따라가 보세요.)
상단 메뉴에 있는 Downloads를 눌러보세요. 갖다 대기만 해도 뭐 여러 목록이 나타나는데 일단 그냥 누르세요.


그림과 같은 화면이 나타날겁니다. 만약 이런 화면이 나타나지 않았다면, 웹사이트 접속부터 다시...
열나 종류가 많은데 왼쪽것만 보세요.

가장 위 부터 개발툴, Java EE, Java ME, Java SE, JavaFX,Database 가 있습니다.
개발 툴은 말 그대로 썬에서 맹글고 밀고 있는 개발 툴이 있지요.
가장 대표적인 Sun Studio와 NetBeans가 있는데, 이것들은 많은 사람들이 사용하고 있지 않은 SWING이라는걸 사용해서 맹근겁니다. 그래서 화면이 좀 우울하죠.

그렇다면 많이 쓰는 Eclipse 는? 그건 Sun에서 맹그는게 아니라 IBM이랑 여러 회사가 같이 연합해서 맹그는 겁니다.
eclipse에 대해서 자세히 알아보시려면 http://www.eclipse.org 에 들어가서 보시면 됩니다.
URL이 org 이기 때문에 말 그대로 비 영리조직입니다. 그래서 꽁짜로 나누어 주는 겁니다.

그 다음에 있는 Java EE 라는게 있죠?
여기서 EE는 Enterprise Edtion 의 약자로, PC나 클라이언트를 위한 어플리케이션이 아닌 Web이나 기업용 시스템을 개발하기 위한 환경을 제공해 줍니다. 일단 여러분은 Pass...

Java ME 는 Micro Edtion에 대한 약자로 모바일을 위한 개발 환경을 제공합니다.
근데 뭐 여러분들에겐 별 도움이 안되겠죠?

그 다음이 Java SE 입니다. 일단 딴거 먼저 설명드리고 이거에 대한 설명을 다시 드리겠습니다.

JavaFX 는 Flash (요즘은 FLEX라고 많이 알려져 있는) 나 MS의 Silverlight 와 같이 브라우져 화면에서 좀더 화려하고 예쁜 화면을 제공하는 거 라고만 생각하고 계시면 되겠습니다.
나온지 꽤 되었는데, 아직 실무에 적용하긴 거시기한 상태입니다.

Database는 JavaDB라는 Java기반의 DB(아직 이거에 대해서는 공부를 안해서 잘 모르지만 언제부턴가 JDK를 깔면 같이 깔립니다.)와 Sun이 구매해버린 mySql 을 여기서 다운로드 할 수 있습니다.

이제 Java SE를 링크에서 확장해서 가장 위에 있는 Java SE (JDK) 를 클릭해 봅시다.
여러가지 다운로드 링크가 있는데, 기본적으로 다음과 같은 것들이 있지요.
Java SE Runtime Environment.....
Java SE Development Kit .....
.....
나머지는 모르셔도 되구요.
여기서 맨 위에 있는 것이 바로 JRE 이고,
두번째 있는 것이 JDK(JSDK)

JRE가 하는 일은 http://java.sun.com/javase/6/webnotes/install/jre/README 를 참조하시면 됩니다.
한마디로 자바를 실행할 수 있는 환경만을 제공합니다.
이것만 다운로드 받으면 개발은 불가능하다~~~
라고 생각하시면 됩니다.

JDK는 말 그대로 개발 킷입니다.
.java로 만든 텍스트 기반의 파일을 .class 라는 바이너리 타입의 파일로 컴파일 하는 일도 하고,
각종 모니터링 기능 및 분석기능 등등 여러가지 개발에 필요한 킷들을 제공합니다.

쓰다보니 글이 길어졌네요.
다음에는 JVM이 뭔지에 대해서 설명해 드리겠습니다.

PS : 이 강좌가 작성되는 주기는 일정하지 않습니다.


Posted by tuning-java
,
http://java.sun.com/j2se/javadoc/writingdoccomments/

자바로 개발하다 보면, 주석을 잘 정리하지 않는 경우가 있는데
-나중에 내가 이 메소드를 왜 만들었는지,
-무슨 역할을 하는 클래스인지
를 기억 못하는 경우가 종종 있다.

그리고 추후에 Java doc 문서를 만들때 필요한 요소들을 모르면 제대로 된 문서가 생성되지 않는다.

위에 있는 링크를 참조하여, 반드시 자신의 클래스에 주석을 다는 버릇을 들이자.
특히 이 버릇은 정말 고치기 힘들다.

참고로 eclipse에서는 comment를 달기 위해서 해당 메소드나 클래스의 블록 안에서 Alt+Shift+J 를 누르면, 기본적인 주석이 생성된다.

public class A {
  //지점 1
  public void methodB () {
    //지점 2
  }
}

즉 지점 1에서 단축키를 누르면 클래스의 주석이 자동 생성되고,
지점 2에서 단축키를 누르면 메소드의 주석이 자동 생성된다.
Posted by tuning-java
,

자바 API에 있는 java.util.regex 패키지의 Pattern 클래스를 보면 정규식을 표현하는 Construct가 나와 있다.
http://java.sun.com/javase/6/docs/api/java/util/regex/Pattern.html

아래 내용은 Java JDK에 있는 내용을 재 정리 한것이다. (시간이 되면 번역을 할까 생각중인데, 궂이 그럴필요가...)

가장 먼저 특수 문자에 대해서 알아보자. 각각의 8진수, 16진수, tab, 이스케이프 문자등을 나타내기 위해서는 다음과 같이 사용하면 된다.

x The character x
\\ The backslash character
\0n The character with octal value 0n (0 <= n <= 7)
\0nn The character with octal value 0nn (0 <= n <= 7)
\0mnn The character with octal value 0mnn (0 <= m <= 3, 0 <= n <= 7)
\xhh The character with hexadecimal value 0xhh
\uhhhh The character with hexadecimal value 0xhhhh
\t The tab character ('\u0009')
\n The newline (line feed) character ('\u000A')
\r The carriage-return character ('\u000D')
\f The form-feed character ('\u000C')
\a The alert (bell) character ('\u0007')
\e The escape character ('\u001B')
\cx The control character corresponding to x

그 다음에는 문자를 표현하는 방식을 보자. 특정 범위의 문자나 범위 이외의 문자는 다음과 같이 표시한다.

[abc] a, b, or c (simple class)
[^abc] Any character except a, b, or c (negation)
[a-zA-Z] a through z or A through Z, inclusive (range)
[a-d[m-p]] a through d, or m through p: [a-dm-p] (union)
[a-z&&[def]] d, e, or f (intersection)
[a-z&&[^bc]] a through z, except for b and c: [ad-z] (subtraction)
[a-z&&[^m-p]] a through z, and not m through p: [a-lq-z](subtraction)

위의  방식을 사용하여 정의할 수도 있겠지만, 다음과 같이 미리 정의된 문자열을 사용하면 보다 편하게 사용 가능하다.

. Any character (may or may not match line terminators)
\d A digit: [0-9]
\D A non-digit: [^0-9]
\s A whitespace character: [ \t\n\x0B\f\r]
\S A non-whitespace character: [^\s]
\w A word character: [a-zA-Z_0-9]
\W A non-word character: [^\w]

그리고, POSIX 문자열을 사용할 경우에는 다음과 같이 정의할 수 있다.
(참고로 POSIX가 뭔지 모르시는 분은 http://ko.wikipedia.org/wiki/POSIX 를 참조하시면 쉽게 이해 될것이다.)

\p{Lower} A lower-case alphabetic character: [a-z]
\p{Upper} An upper-case alphabetic character:[A-Z]
\p{ASCII} All ASCII:[\x00-\x7F]
\p{Alpha} An alphabetic character:[\p{Lower}\p{Upper}]
\p{Digit} A decimal digit: [0-9]
\p{Alnum} An alphanumeric character:[\p{Alpha}\p{Digit}]
\p{Punct} Punctuation: One of !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
\p{Graph} A visible character: [\p{Alnum}\p{Punct}]
\p{Print} A printable character: [\p{Graph}\x20]
\p{Blank} A space or a tab: [ \t]
\p{Cntrl} A control character: [\x00-\x1F\x7F]
\p{XDigit} A hexadecimal digit: [0-9a-fA-F]
\p{Space} A whitespace character: [ \t\n\x0B\f\r]

자바의 Character 클래스와 같은 방식으로 사용하려면 다음과 같이 사용 가능하다.

\p{javaLowerCase} Equivalent to java.lang.Character.isLowerCase()
\p{javaUpperCase} Equivalent to java.lang.Character.isUpperCase()
\p{javaWhitespace} Equivalent to java.lang.Character.isWhitespace()
\p{javaMirrored} Equivalent to java.lang.Character.isMirrored()

유니코드를 처리하기 위해서는 다음과 같이 사용하면 된다. (한글에 대해서는 아직 테스트 해보지 않았다. ^^)

\p{InGreek} A character in the Greek block (simple block)
\p{Lu} An uppercase letter (simple category)
\p{Sc} A currency symbol
\P{InGreek} Any character except one in the Greek block (negation)
[\p{L}&&[^\p{Lu}]]  Any letter except an uppercase letter (subtraction)

각 경계값을 나타내는 것은 다음과 같이 할 수 있다.

^ The beginning of a line
$ The end of a line
\b A word boundary
\B A non-word boundary
\A The beginning of the input
\G The end of the previous match
\Z The end of the input but for the final terminator, if any
\z The end of the input

이제부터 정신을 바짝 차려야 하는데, 위의 각 방법을 조합해서 각 문자의 횟수를 다음과 같이 지정할 수 있다.
(이를 Greedy quantifiers라고 부른다.)

X? X, once or not at all
X* X, zero or more times
X+ X, one or more times
X{n} X, exactly n times
X{n,} X, at least n times
X{n,m} X, at least n but not more than m times

그리고, ? 와 +를 사용하여 각각 제외 및 포함의 의미를 나타낸다. 각 예는 다음과 같다.

Reluctant quantifiers
X?? X, once or not at all
X*? X, zero or more times
X+? X, one or more times
X{n}? X, exactly n times
X{n,}? X, at least n times
X{n,m}? X, at least n but not more than m times

Possessive quantifiers
X?+ X, once or not at all
X*+ X, zero or more times
X++ X, one or more times
X{n}+ X, exactly n times
X{n,}+ X, at least n times
X{n,m}+ X, at least n but not more than m times

논리 부분은 다음과 같이 표시한다.

XY X followed by Y
X|Y Either X or Y
(X) X, as a capturing group

특수 Construct는 다음과 같다.

(?:X) X, as a non-capturing group
(?idmsux-idmsux)  Nothing, but turns match flags i d m s u x on - off
(?idmsux-idmsux:X)   X, as a non-capturing group with the given flags i d m s u x on - off
(?=X) X, via zero-width positive lookahead
(?!X) X, via zero-width negative lookahead
(?<=X) X, via zero-width positive lookbehind
(?<!X) X, via zero-width negative lookbehind
(?>X) X, as an independent, non-capturing group

기타 관련 Construct들은 다음과 같다.

Back references
\n Whatever the nth capturing group matched

Quotation
\ Nothing, but quotes the following character
\Q Nothing, but quotes all characters until \E
\E Nothing, but ends quoting started by \Q

이 내용들에 대해서는 한번 쭉~~~ 읽어보면 이해가 되겠지만, 예제를 봐야지만 보다 더 쉽게 이해할 수 있으리라 생각된다.

다음 글에는 예제를 통해서 각 Regular Expression을 어떻게 사용하는지 정리하도록 하겠다.

Posted by tuning-java
,

String 데이터를 처리하기 위한 코딩을 할 때 알아두면 굉장히 도움 되는 것이 Regular Expression이다.

이게 뭔지도 모르신다면, 아래의 링크를 따라가서 한번 읽어 보시기를 권장한다.

http://java.sun.com/docs/books/tutorial/essential/regex/index.html

예를 들어 e-mail 주소나 URL의 정합성을 체크할 때 굉장히 편하게 사용할 수 있다.
Regular Expression을 주로 사용하는 언어들은 grep, Perl, Tcl, Python, PHP, awk 등이 있다.

Java 에서도 JDK 1.4 버젼부터 Regular Expression을 사용하기 시작했으며, java.util.regex.Pattern 클래스의 API 를 보면 Regular Expression에서 사용되는 패턴 구성을 볼 수 있다.

참고로,이미 만들어진 Regular Expression 들을 참조하고 싶다면, 아래의 사이트를 방문하기 바란다.
http://regexlib.com/

그럼 간단하게 Java를 이용해서 Regular Expression을 사용하는 방법에 대해서 알아보자.

import java.util.Scanner;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class RegexTester {

    public static void main(String[] args){
        RegexTester rt=new RegexTester();
        while(true) {
            rt.checkRegularExpression();
        }
    }
    public void checkRegularExpression() {       
        Scanner sc=new Scanner(System.in);
        System.out.print("Enter Regular expression pattern : ");
        String regex=sc.nextLine();
        while(check(regex));
    }
    public boolean check(String regex) {
        Scanner sc=new Scanner(System.in);
        System.out.print("Enter data: ");
        String data=sc.nextLine();
            Pattern samplePattern = Pattern.compile(regex);
            Matcher matcher = samplePattern.matcher(data);
            boolean found = false;
            while (matcher.find()) {
                System.out.format("Text \"%s\" is found : from index %d - to index %d.\n",
                    matcher.group(), matcher.start(), matcher.end());
                found = true;
            }
            if(!found){
                System.out.format("No match found.\n");
            }
            System.out.print("Check another data ? [Y or y] or Quit [Q or q] : ");
            String another=sc.nextLine();
            if(another.equals("Q") || another.equals("q")) {
                System.exit(0);
                return false;
            } else if(another.equals("Y") || another.equals("y")) {
                return true;
            } else {
                return false;
            }
    }

}

이 프로그램은 Regular Expression을 입력하고, 문자열을 입력하면 입력된 문자열중 Regular Expression과 맞는 (match되는) 문자열이 어떤것이 있는지를 화면에 뿌려준다.

실행 결과 예는 다음과 같다.

Enter Regular expression pattern : [abc]
Enter data: abcdefg
Text "a" is found : from index 0 - to index 1.
Text "b" is found : from index 1 - to index 2.
Text "c" is found : from index 2 - to index 3.
Check another data ? [Y or y] or Quit [Q or q] : y
Enter data:
No match found.
Check another data ? [Y or y] or Quit [Q or q] : y
Enter data: cbfhgft
Text "c" is found : from index 0 - to index 1.
Text "b" is found : from index 1 - to index 2.
Check another data ? [Y or y] or Quit [Q or q] : q

다음 글에는 Regular Expression을 어떻게 지정하는지 알아보자.

Posted by tuning-java
,
자바의 어노테이션이란 것이 JDK 5.0 부터 생겨났기 때문에,
예전부터 자바를 하신분들은 이해하기가 다소 어려울 수 있다.
그럼 어노테이션이란건 왜 만들어서 사람을 귀찮게 할까 ?
궁금하다면, 다음의 글을 읽어보자.
(참고로 한글이다....)

http://www.ibm.com/developerworks/kr/library/j-annotate1/index.html


http://www.ibm.com/developerworks/kr/library/j-annotate2.html
Posted by tuning-java
,
http://java.sun.com/docs/books/tutorial/index.html

자바 튜토리얼 홈페이지다.

쉽게 찾을수 있는 페이지가 아니라 링크를 정리해 본다.
Posted by tuning-java
,

http://www.hp.com/products1/unix/java/infolibrary/prog_guide/hotspot.html#-Xeprof

HP의 JVM Option이 정리되어 있는 링크이다.

나중에 유용하게 사용되길...

Posted by tuning-java
,

http://www.ibm.com/developerworks/kr/library/j-jtp09275.html

IBM에서 작성한 성능과 관련된 문서.

Java의 성능과 관련된 내부 구성이 어떻게 되는지를 확인할 수 있는 좋은 문서

이 사이트는 한글로 구성되어 있기 때문에,

영어 울렁증이 있는 분들에게도 많은 도움이 될 것이다.

Posted by tuning-java
,
Posted by tuning-java
,



Java Performance Tuning 웹 사이트 http://www.hp.com/dspp에 가서
“Performance Tuning Java”검색

Java 관련 hp 제품 http://www.hp.com/go/java

Posted by tuning-java
,
http://developers.sun.com/learning/javaoneonline/

반드시 필요한건 다 듣고 말테다~~~
Posted by tuning-java
,
 
이 링크 따라 가면 Sun에서 발표한 자료들과
 
고민하고 있는 내용들을 알 수 있음.
Posted by tuning-java
,