반응형

 SCJP 자격증을 취득하고 싶은데요. SCJP 자격증 취득 방법에 대해서 알려주세요.

자바는 3가지 계열로 볼 수 있습니다.

J2SE, J2EE, J2ME...

J2SE 계열은->개발자 계열이며,

J2EE 계열은-> 웹 어플리케이션 계역

J2ME 계열은->모바일 계열로 생각하시면 됩니다.

물론 이에 따라 각 각의 자격증이  존재합니다.

자바 자격증중 가장 기본이 되는 자격증은 SCJP자격증 입니다.

SCJP란?

SCJP 자격증은 J2SE (Java 2 Platform, Standard Edition) 기반의 Java Programming 언어에 대한 기본적인 지식을 기반으로 Java의 능률성을 실행하는데 관심이 있는 프로그래머들을 위한 자격증입니다.

자바 프로그래머라면 기본적으로 본 자격증을 취득하시기를 권장해 드립니다.


J2SE   -> SCJD

SCJD는 자바 개발자로서의 능력을 검증해 주는 국제공인 자격증으로 웹프로그래머나 기업자바개발자(EJB) 등 다양한 유형으로 경력을 쌓을 수 있는 보증수표라 할 수 있습니다
 

SCJD를 취득하기 위해서는 크게 2가지의 시험을 치뤄야 합니다.
우선 프로그래밍 과정(Programming Assignment)을 거쳐야 합니다.

이는 자바 전반에 관한 지식과 이해력을 바탕으로 직접 프로그래밍해 업 로드하는 방식으로 치뤄지며, 프로그램 디자인의 분석 능력과 실무 능력을 검증한다.
자바 실무능력 검증에 주안점을 둬 데이터베이스(DB)와 네트워크에 관련된 기술과의 연관성도 측정한다.

두 번째는 필기 시험으로 본인이 구성한 프로그램을 바탕으로 이론과 실무에 대한 종합적인 자바 개발능력을 검증한다.


J2ME   -> SCMAD

SCMAD는 J2ME 어플리케이션을 개발하는 Programmer와 Developer를 위한 시험으로서, CLDC (Connected, Limited Device Configuration) 1.0 및 1.1, MIDP(Mobile Information Device Profile) 2.0 스펙을 기반으로 하고 있으며, WMA(Wireless Messaging Application) API(어플리케이션 프로그래밍 인터페이스)와 MMAPI(Mobile Media API) 등 ‘무선 산업을 위한 자바 기술(JTWI)’이나 기타 무선 자바 기술들을 능숙하게 사용하고 있는지를 객관적으로 검증해주는 시험입니다.


J2EE   ---> SCWCD, SCBCD


SCWCD란?

SCWCD 자격증은 Java Technology Servlet과 JSP(JavaServer Pages) APIs(Application Program Interface) 웹 어플리케이션을 사용하는 Java 2 Platform 개발자들의 능력을 검증하기 위한 자격증입니다.

이에 따라 본 자격증은 Java Servlet과 JSP APIs를 이용하여 Web-tier를 프로그래밍하는 능력을 검증하여 기술 경쟁력을 제공합니다.

이 자격시험에 응시하기 위해서 반드시 Java 2 Platform(버전무관)의 썬 공인 프로그래머 자격(SCJP)을 취득한 상태여야 한다. 시험에 응시하기 전에 웹 어플리케이션 개발을 위해 Servlet과 JSP (JavaServer Pages)를 사용하여 최소 6개월 이상의 개발경험이 있는 개발자들에게 추천해 드립니다.

SCBCD란? 

SCBCD (Sun Certified Business Component Developer for the Java 2 Platform, Enterprise Edition 1.3) 자격증 시험은 EJB (Enterprise JavaBeans) 어플리케이션을 설계, 개발, 테스트, 구현 및 통합하는 업무를 담당하는 프로그래머나 개발자들을 위한 자격증 시험입니다.

또한, J2EE 플랫폼 (Java 2 Platform, Enterprise Edition) 기술을 도입하여 어플리케이션의 비즈니스 로직을 캡슐화하는 서버 사이드 컴포넌트를 개발하는 전문성을 가진 개발자들을 위한 자격증 시험입니다.

SCBCD 자격증 응시를 위한 선수조건은 반드시 SCJP를 취득하셔야 합니다.


SCEA란?

SCEA는 높은 확장성과 유연성, 보안성을 자랑하는 Compliant applications인 J2EE Technology (Java 2 Platform, Enterprise Edition)를 설계하고 디자인하는 업무를 담당하는 엔터프라이즈 설계자들을 위한 자격증입니다.

본 자격증은 1단계 객관식 시험과 2단계 설계 및 디자인 프로젝트 프로그래밍 시험, 그리고 3단계 논술시험으로 구성되어 있으며 3단계까지 Pass 하셔야 자격인증이 부여됩니다.

시험은 프로메트릭 센터에서 보실수 있으며,

집에서 가까운 프로메트릭 센터를 검색하셔서 시간과 날짜를 정하시면 됩니다.

응시료는 바우처값이 20만원으로 바우처를 구입하신 후 응시하시면 됩니다.

혹시라도 도움이 되실까 해서 자바 실무강의 및 자격증 대비 교육도 진행되고,

시험도 학원자체에서 볼수 있는 센터 남겨드리니 알아보시는데 참고하세요^^


자바 강의 진행 및 프로메트릭 시험센터-> http://www.webwill.co.kr

 

re: SCJP 자격증을 취득하고 싶은데요. SCJP 자격증 취득 방법에 대해서 알려주세요.

my_lady6 (2007-10-18 10:03 작성)

신고

1.자바의 종류는 무엇 무엇인가요 ?


자바의 종류는 크게 기업형(Enterprise), 표준형(Standard), 모바일형(Mobile) 형태로 각각의 목적에 따라 세가지로 나누고 다른점은 간단하게 본다면 지원되는 기능의 많고 적음정도로 보시면 됩니다.


다르게는 자바라고 보기는 그렇지만 자바를 개발하기위한 도구로 회사별로 자바가 있다고 생각할 수 있습니다. 이것들은 위의 기본적인 자바의 기능에 회사별로 특별한 기능들이 더 추가되어있다고 보면 됩니다.


Microsoft 사의 Visaul J++, Sybase 사의 PowerJ, Borland 사의 Jbuilder, 어디회사진 잘 모르겠지만 Visal CAFE라는 것들이 있습니다.

 

2.저는 자바,c언어c++ 를배우고 싶습니다.. 그러나 보지도 못하고,알지도 못합니다..

 

일단 한가지를 먼저 배우시기 바랍니다.

우선 순서는 C-> JAVA->JSP->EJB 이렇게 배우시는게 도움이 되실것 같습니다.

 

다만, 한언어를 이해하기 위해서 책 한권을 사서 거기에 있는 내용을 10번쯤 처음부터 끝까지 의문을 가지지 말고 책에서 실습해보라는 내용은 다 해보시기 바랍니다.(조금은 지루해질수 있습니다.) 예전에 했던 실습이라고 하지 않으면 효과가 없습니다.

 

프로그래밍은 반복입니다.  자신의 손에서 익숙해질 때까지 해보다 보면 대략적으로 이해를 할 수 있습니다. 일부(저를 포함해서)사람들은 프로그래밍을 머리로 50%, 손으로 50%를 공부한다고 말하곤 합니다.

 

3.알지도 못하는데 학원 다닐 여건이 안돼어 독학만으로도 가능할까요?

 

위에 말하고 중복이 되겠네요. 학원을 안다녀도 가능합니다.

다만 학원다닌것 보다는 시간이 더 걸릴수 있겠지요.  독학은 가능합니다.

초기에 프로그래밍 언어를 배운 사람들은 다 독학을 했다는점이 그런 증명인 셈이죠~!

(^^; 물론 혼자하는건 무척이나 힘든일이기는 합니다. 도와주는 사람이 없다면 학원을 다니시는것 또한 추천할 만한 내용이죠 ... ) 

 

4.저런 종류들의 프로그램을 알고싶다면 추가할 목록은 머가있나요

 

프로그래밍 언어는 단순히 컴퓨터에게 어떤 일을 시키기 위해서 컴퓨터가 알아들을수 있는 말을 만들기 위한 수단에 불과합니다.

어떻게 컴퓨터에게 효과적이고 제대로 일을 시킬것인가 하는 방법에 대한것들을 배워야 합니다.

그래서 대학에서는 이런것을 프로그래밍 언어를 배우기전에 배웁니다.

 

- 운영체제(윈도우XP같은것들을 이렇게 부릅니다.)개론

- 자료구조론

- 컴퓨터 알고리즘

- 이산수학

- 프로그래밍 언어론

- 확률/통계학

 

그리고 부가적으로 어떤일을 하느냐에 따라 필요한 내용은

 

-  데이터베이스 개론

- 시스템 프로그래밍

- 네트워크 개론

 

등이 있습니다. (중학생이 이해하기에는 말들이 다소 어렵지만 그래도 다 필요한것들입니다.)

 

5.위에 프로그램들을 알때, 소스가 알수 없는 영어와 숫자로 돼어있던데요

함수고 뭐고 모르는데 가능할까요.. 쉽게말하면 수학을 전혀 모릅니다

 

무엇을 위해 프로그래밍 언어를 배워야 하는지를 그 목적을 먼저 알  필요가 있습니다.

수학을 전혀 모른다면 문제는 되겠지만 프로그래밍 언어에서 말하는 함수는 어떤 특정한 일을 하는 기능을 부르는 말이라고 보셔야 합니다. (예를 들면, ClearSrc()라는 함수 있다면 이 함수는 화면을 지우는 기능을 한다..라는 식으로 말이죠)

 X=y+z와 같은 식을 수학에서는 함수라고 하지만요.

 

그리고 소스내용은 기계가 이해할 수 있는 말들을 만들기 위해서 프로그래밍 언어별로 약간씩은 다른 표현으로 말하는 방법을 적어놓은 것입니다.

따라서 우리가 영어를 하기 위해서 영어를 배워야 하듯이 기계하고 말을 하려면 기계와 말을 할 수 있는 언어를 배워야 합니다. 

 

순수하게 기계언어는 0과 1로되어있습니다만 사람도 그런 언어를 이해하기 힘들기때문에 프로그래밍 언어가 사람들이 이해하기 편한 영어형태로 언어를 제공하고 있습니다.

하지만 영어는 아닌거죠.  따라서 이 언어도 배워야 써먹을 수 있습니다.


6. JAVA전문교육기관 바로가기

 

위에서 말한것 처럼 책만으로 독학이 가능합니다. 허나 시간이 많이 걸립니다.

해서 단기간에 전문인으로 거듭 나려면 학원을 다니는것도 하나의 지름길입니다.

프로그래머로 출발하려면 바로가기 클릭하세요

 

7. 자격증??

 

자격증은 특별히 C언어 자격증 이런식으로는 되어있지 않습니다.

정보처리기능사/산업기사/기사에서 C언어로 시험을 치는 방법은 있지만...

자바는 다음 자격증으로 구분되어있습니다. 프로그래밍 방법이나 능력에 대한것입니다.

 SCJP

SCMAD

SCJD

SCWCD

SCBCD

SCEA
SCDJWS


부가적으로 프로그래밍 언어를 배우시려하시니 적겠습니다.

이건 안날아갔으면 좋겠네요.


먼저 프로그래밍 언어를 하시려면 왜 프로그래밍 언어를 배우려는지 그 목적을 명확하게 할 필요가 있습니다.

막연히 누군가가 한다고 해서 아니면 하면 좋다고 해서 무작정 해봐야지 한다면 후회하게 됩니다. 어려운 길입니다.  프로그래밍을 한다는 것은 말이죠.

학원에서도 프로그래밍 언어를 가르칠 때 기본적인 내용을 가르치면서도 한가지 프로그래밍 목적에 맞게 가르칩니다.

예를들면 채팅프로그램을 만든다면 채팅프로그램을 만들기 위한 기능위주로 프로그래밍 언어를 가르치게 되는거지요. (모든 프로그래밍 언어의 기능을 가르치지는 않습니다.)


그러니 우선적으로 프로그래밍 언어를 하시려면 목적을 명확하게 가지시는게 중요합니다.  그리고 제가 부가적으로 적어놓은 개론들은 실제로 그 공부를 하고 있을 때는 왜 이런걸 공부해야 하는지 모두가 의문을 가지는 것들입니다.


나중에 프로그래밍을 하다보면 왜 했어야 했는지 이해가 되는 지식들입니다.

열심히 공부하시고 단기간내에 승부를 내려고 하지 마시고 적어도 3년에서 6년정도는 공부해야지 하는 인내심을 가지고 하시기 바랍니다.


아마도 대학을 가시거나 성인이 되는 나이시점에는 무엇인가가 되어계실것 같네요.

(그리고 프로그래밍 언어를 배우신 후 대충 1~2년 정도만 자신의 프로그램을 짜다보면 일상적인 대부분의 프로그램을 경험하실 수 있으실겁니다.)


만약 혼자 공부 하기가 힘이 든다면  자바전문교육원 에서 상담받아보세요

친절히 안내해 줄겁니다.


도움이 되길 바랍니다.

re: SCJP 자격증을 취득하고 싶은데요. SCJP 자격증 취득 방법에 대해서 알려주세요.

ausakstp5 (2007-10-18 15:46 작성)

신고

자바교육의 경우 실무교육은 기본입니다.

물론 자격증취득만을 희망한다면 덤프를 보고 딸수도 있겠죠...

하지만~ 나중에 취업을 하시거나 실무에서 응용하실때 다시 배우셔야 합니다.

지금이든~ 나중이든~~ 어차피 학원교육은 받으셔야 된다는거죵...

전문학원을 기준으로 봤을때... 취업까지 생각하신다면 보통 4개월에서 5개월정도는 배우셔야 합니다.

자바 기본문법부터 JSP, EJB, PROJECT까지요~

각각 한달정도씩으로 생각하시면 되는대요~ EJB와 프로젝트가 난이도가 좀 있으니...

한달정도씩을 더 생각하셔도 될거 같습니다.
 


자격증시험 난이도는 덤프만 본다면 무난하게 합격하실 수 있습니다.


자격증취득은 덤프보고 준비하시구요.... 교육은  실무교육을 받으세요..

SCJP자격증의 경우 자바 기본문법과정에 대한 인증시험이구요~

실무능력,,, 프로젝트까지 생각하신다면,, JSP,EJB까지는

공부를 하셔야 합니다.

물론 그 두 과정역시 자격증이 있구요~~~~(SCWCD/SCBCD)


자격증 시험은 프로매트릭 시험센터에서 보실수가 있습니다.

시험날짜가 따로 정해진건 아니구요~ 원하시는 날짜에 예약하시고 보시면 됩니다.


자격증시험 가능하고 실무교육진행하는 학원 추천해드립니당...^^



☞ 자바(SCJP)전문학원 바로가기

http://www.webyahoo.co.kr/02_curri/curri_java.htm

re: SCJP 자격증을 취득하고 싶은데요. SCJP 자격증 취득 방법에 대해서 알려주세요.

woduddlgkgk (2007-10-22 19:02 작성)

신고

SCJP 자격증은 J2SE (Java 2 Platform, Standard Edition) 기반의 Java Programming 언어에
 대한 기본적인 지식을 기반으로 Java의 능률성을 실행하는데 관심이 있는
프로그래머들을 위한 자격증입니다.
 
Java 기술을 직접 개발한 썬 마이크로시스템즈에서 Java Programming 언어에 관련된 지식을
표준화된 방식으로 검증해 주는 시험이며, 또한 Java 기반의 모든 툴 개발에 필요한 기초
지식을 인정 받을 수 있는 자격증입니다.

자바 프로그래머라면 기본적으로 본 자격증을 취득하시기를 권장해 드립니다.
 
SCJP는 Java Programming 언어의 기본적인 syntax와 구조를 사용해 본 경험이 있는 프로그래머들
에게 적합한 시험으로 자바 프로그래머라면 반드시 취득하셔야
할 기본이 되는 자격증입니다.
 
시험요강은 아래와 같습니다.
 
 
 
 
반응형
가. 프로세스 생성 및 종료

일반적으로 프로그램을 실행시키면, 하나의 프로세스로서 동작하게 됩니다. 다시 말해서, 우리가 실행시키는 하나의 프로그램은 하나의 프로세스로서 나타나게 됩니다. 자바에서의 프로세스는 자바 런타임 환경과 밀접한 관계를 갖고 있습니다. 왜냐하면, 자바 런타임 환경은 프로세스가 실행될 수 있는 기반 환경을 제공해 주기 때문입니다. 프로세스는 다른 프로세스를 생성할 수 있는데, 이 때 생성된 프로세스를 자식 프로세스라하고 기존에 있던 프로세스를 부모 프로세스라 합니다. 이러한 부모/자식 프로세스 개념은 하나의 자바 프로그램에서 다른 프로그램을 실행시키고자 할 때, 주로 사용됩니다. 다시 말해서, 플랫폼 독립적인 자바 프로그램이 플랫폼과 밀접한 관련이 있는 작업을 해야 할 경우, 해당 작업을 수행할 프로그램을 다른 언어로 해당 플랫폼에 맞도록 작성하고, 이 프로그램을 자바 프로그램에서 실행시켜 주는 것입니다.

이를 위해, 플랫폼 종속적인 시스템 함수들을 호출할 수 있도록 해 주는 Runtime 클래스와 실행하고자 하는 응용프로그램을 위한 프로세스를 관리할 수 있도록 해 주는 Process 클래스를 사용할 수 있습니다. 자바에서 프로세스를 생성하기 위하여 다음과 같이 해 줍니다.

            - “Runtime runtime = Runtime.getRuntime();”: 런타임 객체를 생성합니다.

            - “Process p = runtime.exec(“프로그램경로명”);”: exec 메소드를 이용하여 프로세스를 생성합니다.

위와 같이 프로세스를 생성할 수 있고, 프로세스의 작업을 마치거나 또는 프로세스를 강제고 종료하기 위해서는 다음 중 한 가지 방법으로 할 수 있습니다.

            - “p.waitFor();”: 자식 프로세스가 종료될 때까지 기다립니다.

            - “p.destroy();”: 부모 프로세스에서 자식 프로세스를 강제로 종료시킵니다.

            - “System.exit(0);”: 부모 프로세스만 종료되고 자식 프로세스는 계속 실행됩니다.

Runtime 클래스가 제공해 주는 주요 메소드를 살펴보면 다음과 같습니다.

            - public static Runtime getRuntime(): 현재 실행되고 있는 자바 애플리케이션과 관련된 런타임 객체를 리턴해 줍니다.

            - public void exit(int status): 현재 자바 가상머신을 종료합니다. status 매개변수는 종료시의 상태값을 나타내며, 일반적으로 0 이외의 값은 비정상적으로 종료되었음을 의미합니다.

            - public Process exec(String command) throws IOException: 주어진 명령어를 독립된 프로세스로 실행시켜 줍니다. exec(command, null)와 같이 실행시킨 것과 같습니다.

            - public Process exec(String command, String envp[]) throws IOException: 주어진 명령어를 주어진 환경을 갖는 독립된 프로세스로 실행시켜 줍니다. 이 메소드는 명령어 문자열을 토큰으로 나누어 이 토큰들을 포함하고 있는 cmdarray라는 새로운 배열을 생성합니다. 그리고 나서 exec(cmdarray, envp)을 호출합니다.

            - public Process exec(String cmdarray[]) throws IOException: 주어진 문자열 배열에 있는 명령어와 매개변수를 이용하여 독립된 프로세스로 실행시켜 줍니다. exec(cmdarray, null)을 호출합니다.

            - public Process exec(String cmdarray[], String envp[]) throws IOException: 주어진 문자열 배열에 있는 명령어와 매개변수를 이용하여 주어진 환경을 갖는 독립된 프로세스로 실행시켜 줍니다. 문자열 배열 cmdarray에는 명령어와 명령행 인자들을 나타내고 있습니다.

            - public native long freeMemory(): 시스템에 남아있는 메모리의 양을 얻습니다. 이 값은 항상 totalMemory() 메소드에 의해 얻어지는 값보다 작습니다.

            - public native long totalMemory(): 자바 가상머신의 최대 메모리 크기를 얻습니다.

Process 클래스가 제공해 주는 주요 메소드를 살펴보면 다음과 같습니다.

            - public abstract OutputStream getOutputStream(): 자식 프로세스의 출력 스트림을 얻습니다.

            - public abstract InputStream getInputStream(): 자식 프로세스의 입력 스트림을 얻습니다.

            - public abstract InputStream getErrorStream(): 자식 프로세스의 에러 스트림을 얻습니다.

            - public abstract int waitFor() throws InterruptedException: 자식 프로세스가 종료될 때까지 기다립니다.

            - public abstract int exitValue(): 자식 프로세스가 종료할 때의 상태값을 얻습니다.

            - public abstract void destroy(): 자식 프로세스를 강제로 종료시킵니다.

다음에 나오는 자바 프로그램은 위의 Runtime 클래스 및 Process 클래스를 이용하여 새로운 프로세스를 생성하고 종료하는 과정을 보여주기 위해 윈도우의 계산기를 실행시키는 간단한 예제입니다.

import java.io.*;

public class ProcessTest {

   static public void main(String args[]) {

      try {

         Process p1 = Runtime.getRuntime().exec("calc.exe");

         Process p2 = Runtime.getRuntime().exec("freecell.exe");

         Process p3 = Runtime.getRuntime().exec("Notepad.exe");

         p1.waitFor();

         p2.destroy();

         System.out.println("Exit value of p1: "+p1.exitValue());

         System.out.println("Exit value of p2: "+p2.exitValue());

      } catch(IOException e) {

         System.out.println(e.getMessage());

      } catch(InterruptedException e) {

         System.out.println(e.getMessage());

      }

      System.exit(0);

   }

}

/*

 * Results:

 D:\AIIT\JAVA\06>java ProcessTest

 Exit value of p1: 0

 Exit value of p2: 1

 D:\AIIT\JAVA\06>

 */

<프로그램 1. ProcessTest.java>

나. 상호작용 명령어의 실행

그런데, 위와 같이 프로세스를 이용하여 방식으로 명령어를 실행하다 보면, 명령어에 따라 사용자에게 메시지를 출력하고 이에 대한 적절한 답을 사용자로부터 입력 받기를 원하는 명령어가 있습니다. 이러한 명령어를 상호작용(interactive) 명령어라고 합니다.

D:\AIIT\JAVA\06>ping 203.252.134.126

Pinging 203.252.134.126 with 32 bytes of data:

Reply from 203.252.134.126: bytes=32 time<10ms TTL=128

Reply from 203.252.134.126: bytes=32 time<10ms TTL=128

Reply from 203.252.134.126: bytes=32 time<10ms TTL=128

Reply from 203.252.134.126: bytes=32 time<10ms TTL=128

D:\AIIT\JAVA\06>

<그림 1. 상호작용 명령어의 실행>

그림에서와 같이 ping 명령어를 실행시키게 되면, ping 명령어는 그 실행 결과를 표준 출력을 이용하여 화면상에 출력해 줍니다. 이렇게 자바에서 실행시킨 프로세스가 출력하는 결과를 자바 프로그램은 알아야 하고, 또한 프로세스가 자바 프로그램으로부터 어떤 대답을 원할 경우가 있는데 이 때 사용자는 이에 대해 적절하게 답을 해 주어야 합니다. 이 때, ping 명령어는 메시지를 자신의 표준 출력에 장치에 출력하게 되는데, 이렇게 프로세스의 표준 출력을 자바 프로그램에서는 p.getInputStream 메소드를 이용하여 얻고, p.getOutputStream 메소드를 이용하여 프로세스의 표준 입력 장치에 쓰게 됩니다. 이 때, 한 가지 주의할 사항은 표준 출력 스트림에 대답을 쓴(write) 후, 꼭 flush 또는 close 메소드를 이용하여 표준 출력 스트림을 비워(flush) 주어야 합니다.

<그림 2. 자바 프로그램과 프로세스 간의 데이터의 전달>

다음에 나오는 자바 프로그램은 도스 상에서 상호작용 명령어를 사용하는 간단한 예제를 보여줍니다.

import java.io.*;

import java.lang.*;

public class InteractiveProcessTest {

   public static void main(String[] args) {

      try {

         Process p = Runtime.getRuntime().exec("ping 203.252.134.126");

         byte[] msg = new byte[128];

         int len;

         while((len=p.getInputStream().read(msg)) > 0) {

            System.out.print(new String(msg, 0, len));

         }

         String rs = "\n";

         byte[] rb  = new byte[] { (byte)'\n' } ; //rs.getBytes();

         OutputStream os = p.getOutputStream();

         os.write(rb);

         os.close();

      } catch (Exception e) {

         e.printStackTrace();

      }

   }

}

/*

 * Results:

 D:\AIIT\JAVA\06>java InteractiveProcessTest

 Pinging 203.252.134.126 with 32 bytes of data:

 Reply from 203.252.134.126: bytes=32 time<10ms TTL=128

 Reply from 203.252.134.126: bytes=32 time<10ms TTL=128

 Reply from 203.252.134.126: bytes=32 time<10ms TTL=128

 Reply from 203.252.134.126: bytes=32 time<10ms TTL=128

 D:\AIIT\JAVA\06>

*/

<프로그램 2. InteractiveProcessTest.java>

반응형
Java SE 6 릴리스에서는 AWT(Abstract Window Toolkit)에 새로운 기능 몇 가지를 추가했다. 사용자는 GUI 구성 요소를 향상시킬 때 더 이상 Swing에만 의존하지 않아도 된다. Java SE 6 덕분에 이전 팁, JDIC를 사용하여 네이티브 애플리케이션과 통신하기에서 JDIC(JDesktop Integration Components)라고 불렀던 것을 통해 데스크탑 애플리케이션 등에 새로운 방식으로 액세스할 수 있다. 그 패키지가 java.awt로 바뀌었지만 API의 상당 부분은 그 팁에서 설명한 그대로이다. 또한 Microsoft Windows 작업 표시줄, Gnome 알림 영역 또는 KDE 시스템 트레이에 애플리케이션을 추가할 수도 있다. 이 팁에서도 바로 그 내용에 대해 알아보기로 한다.

시스템 트레이 액세스에는 단지 두 개의 새 클래스만 있으면 된다. 데스크탑의 시스템 트레이를 나타내는 SystemTray와 그 아이콘을 나타내는 TrayIcon이다. ImageIcon을 쓰지 않는 이유는? TrayIconPopupMenu와 툴 팁 텍스트가 연결되어 있기 때문이다. 자, 모든 조각이 어떻게 들어맞는지 살펴보자.

SystemTray 클래스는 플랫폼이 하나의 트레이 인스턴스를 갖는다는 개념에서 출발한다. SystemTraygetSystemTray() 메소드를 호출하면 그 인스턴스가 반환된다. 그러나 일부 플랫폼에서는 시스템 트레이를 지원하지 않을 수도 있으므로, 먼저 isSupported() 메소드를 통해 확인하는 것이 가장 좋다. 그렇지 않으면 플랫폼에서 시스템 트레이를 지원하지 않을 경우 UnsupportedOperationException이 발생한다. 시스템 트레이 인스턴스를 얻는 데 필요한 일반적인 패턴은 다음과 같다.

  if (SystemTray.isSupported()) {
    SystemTray tray = SystemTray.getSystemTray();
  }

Microsoft Windows, Solaris Operating System, Linux 등 일반적인 플랫폼 대부분은 시스템 트레이를 지원하지만, 그렇지 않은 플랫폼도 있을 것이다.

SystemTray를 얻었다면 TrayIcon이 제 역할을 하기 시작한다. 추가할 메뉴와 툴팁별로 하나씩, 물론 Image와 함께 트레이에 추가한다.

SystemTray를 사용하는 기본적인 프레임워크로 시작하면 다음 프로그램을 얻게 된다. 이 프로그램은 단일 TrayIconSystemTray에 두는데, 그 PopupMenu에는 하나의 MenuItem이 있다. 설치된 JDK 디렉토리에 데모 하위 디렉토리 하나가 있다. 그 하위 디렉토리의 아이콘을 얻을 수 있다. 지원되는 형식이면 뭐든지 가능하다.

import javax.swing.*;
import java.awt.*;

public class BasicTray {
  public static void main(String args[]) {
    Runnable runner = new Runnable() {
      public void run() {
        if (SystemTray.isSupported()) {
          SystemTray tray = SystemTray.getSystemTray();
          Image image = Toolkit.getDefaultToolkit().getImage("gifIcon.gif");
          PopupMenu popup = new PopupMenu();
          MenuItem item = new MenuItem("A MenuItem");
          popup.add(item);
          TrayIcon trayIcon = new TrayIcon(image, "The Tip Text", popup);
          try {
 tray.add(trayIcon);
          } catch (AWTException e) {
            System.err.println("Can't add to tray");
          }
        } else {
          System.err.println("Tray unavailable");
        }
      }
    };
    EventQueue.invokeLater(runner);
  }
}

마우스를 아이콘 위에 두면 툴팁 텍스트가 표시된다. 아이콘을 클릭하면 팝업 메뉴가 나타나 메뉴 항목을 표시한다. Action/ActionListenerMenuItem에 추가되었기 때문에 선택 시 활성화되었을 것이다.

메뉴 항목 선택 시 애플리케이션의 큰 프레임을 작성하는 기능 외에도 TrayIcon의 또 다른 중요한 메소드에 대해 알아볼 필요가 있다. 바로 displayMessage()이다. 이 메소드를 호출하면 시스템 트레이에서 그 아이콘 근처에 팝업 메시지가 나타난다. 이 메소드는 3개의 인수, 즉 팝업 창 제목(null이 될 수 있음), 메시지 자체 그리고 메시지 형식을 나타내는 MessageType이 필요하다. ERROR, WARNING, INFO 또는 NONE 형식을 사용할 수 있다. NONE을 제외한 모든 형식은 팝업 창에 자체 아이콘을 추가한다. 이 아이콘은 JOptionPane에 나타나는 것보다 더 작은 버전이다.

다음 프로그램에서는 앞의 예에 메뉴 항목을 몇 개 더 추가하여 displayMessage() 메소드와 그 모든 메시지 형식을 보여 준다. 최종 메뉴 항목 Close에서는 SystemTrayremove() 메소드를 사용하여 TrayIconSystemTray에서 제거하고 종료한다.

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class FullTray {
  static class ShowMessageListener implements ActionListener {
    TrayIcon trayIcon;
    String title;
    String message;
    TrayIcon.MessageType messageType;
    ShowMessageListener(
        TrayIcon trayIcon,
        String title,
        String message,
        TrayIcon.MessageType messageType) {
      this.trayIcon = trayIcon;
      this.title = title;
      this.message = message;
      this.messageType = messageType;
    }
    public void actionPerformed(ActionEvent e) {
      trayIcon.displayMessage(title, message, messageType);
    }
  }


public static void main(String args[]) {
    Runnable runner = new Runnable() {
      public void run() {
        if (SystemTray.isSupported()) {
          final SystemTray tray = SystemTray.getSystemTray();
          Image image = Toolkit.getDefaultToolkit().getImage("gifIcon.gif");
          PopupMenu popup = new PopupMenu();
          final TrayIcon trayIcon = new TrayIcon(image, "The Tip Text", popup);

          MenuItem item = new MenuItem("Error");
  item.addActionListener(new ShowMessageListener(trayIcon,
            "Error Title", "Error", TrayIcon.MessageType.ERROR));
          popup.add(item);
          item = new MenuItem("Warning");
  item.addActionListener(new ShowMessageListener(trayIcon,
            "Warning Title", "Warning", TrayIcon.MessageType.WARNING));
          popup.add(item);
          item = new MenuItem("Info");
  item.addActionListener(new ShowMessageListener(trayIcon,
            "Info Title", "Info", TrayIcon.MessageType.INFO));
          popup.add(item);
          item = new MenuItem("None");
  item.addActionListener(new ShowMessageListener(trayIcon,
            "None Title", "None", TrayIcon.MessageType.NONE));
          popup.add(item);
          item = new MenuItem("Close");
  item.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
     tray.remove(trayIcon);
            }
  });
          popup.add(item);
          try {
            tray.add(trayIcon);
          } catch (AWTException e) {
            System.err.println("Can't add to tray");
          }
        } else {
          System.err.println("Tray unavailable");
        }
      }
    };
    EventQueue.invokeLater(runner);
  }
}


프로그램을 컴파일하고 실행하여 트레이 아이콘이 시스템 트레이에 추가되게 한다. Microsoft Windows 시스템에서는 아이콘에서 마우스 오른쪽 버튼을 클릭해야 팝업 메뉴가 나타난다. 각 아이콘을 선택하면 각 메시지가 표시되며, 마칠 때에는 Close를 선택하면 된다. 트레이 아이콘을 제거하면 실제로 이벤트 디스패치 스레드가 종료하므로 프로그램이 종료된다.

*******

jMaki는 Ajax 기반 웹 애플리케이션을 손쉽게 빌드할 수 있는 경량급 프레임워크이다. Deep Dive에서 jMaki 프로젝트 리더인 Greg Murray와 함께 더 자세히 알아볼 수 있다.

*******

이 아티클의 영문 원본은
http://blogs.sun.com/CoreJavaTechTips/entry/getting_to_know_system_tray
에서 볼 수 있습니다

+ Recent posts