숭실대학교 최종명님의 자바 프로그래밍 강좌

Size: px
Start display at page:

Download "숭실대학교 최종명님의 자바 프로그래밍 강좌"

Transcription

1 숭실대학교최종명님의자바프로그래밍강좌 최종명님의몽땅자바강좌 이글은자바스터디 문서링크입니다 자바강좌 ::::: 자바 강좌 ( 기초부터고급까지몽땅!!) 1. 자바 초보를위하여 I - 자바입문 2. 자바 초보를위해 II - 초보자가하기쉬운 실수 3. 자바애플릿의기초 I 4. 자바애플릿의기초 II 5. 자바제어구조 6. 자바 AWT 7. 자바이벤트 8. 자바네트워크 9. 자바 데이타베이스프로그래밍 - JDBC 와 Postgres 10. 자바 데이타베이스프로그래밍 - JDBC 와 msql 11. 자바분산프로그래밍 - RMI 12. 자바 분산프로그래밍 - CORBA 13. 자바 분산프로그래밍 - CORBA CALLBACK 14. 자바 OS 15. 자바 프로그래밍 - 자바쓰레드 16. 자바 프로그래밍 - 라운드로빈스케쥴러 17. 자바 IO ( 입출력 ) 18. 자바 그래픽프로그래밍 - 폰트를이용하자. 19. 자바 웹 프로그래밍 - CGI 1편 ( 인터넷검색엔진의원리 ) 20. 자바웹프로그래밍 - CGI 2편 21. 자바 문서화프로그램 - JAVADOC 22. JACL 소개 23. 자바 프로그래밍 - 다형성 ( 폴리모피즘 ) 24. 자바 Cut & Paste 25. 자바스크립트를이용한자바애플릿제어 26. 자바 그래픽프로그래밍 - 스윙 1편 27. 자바 그래픽프로그래밍 - 스윙 2편 (1 / 2) 오전 1:57:36

2 숭실대학교최종명님의자바프로그래밍강좌 자바 웹프로그래밍 (Servlet/JSP) 1.JSWDK 사용법과간단한 JSP 2. 자카르타프로젝트소개 프로그래밍예제 1.JPEG 프로그래밍예제 2. 더블버퍼링예제 3. 이미지스케일링 4. 텍스트필드에서글자를오른쪽으로 5.AWT 에서메뉴숏컷 프로그래머를위한 JAVA 2 이 책은 대학교 전산전공자와전산실에근무하는프로그래머들이 자버 언어를 체계적으로기초에서부터현업에서사용할수있는전 문가 수준의 내용까지배울수있도록구성하였다 가격 25000원출판사 : 홍릉과학출판사페이지 : 824페이지 Copyright All right reservered by Byungwook Cho (2 / 2) 오전 1:57:36

3 최종명님의자바강좌 1. - 자바초보자를위해 I 자바초보자를위해.. 이글은 숭실대학교 최종명님의강좌에서발최한내용입니다. 최종명 자바란? 간단하고 (simple) 객체지향적이고 (object-oriented) 분산처리되고 (distributed) 인터프리트되고 (interpreted) 강건하고 (robust) 컴퓨터 하드웨어에 영향을 받지않고 (architecture-neutral) 보안성이 있으며 (secure) 포팅하기 쉽고 (portable) 성능이 우수하고 (hight-performance) 멀티쓰레드를사용하고 (multithreaded) 동적인 (dynamic) 언어이다. 썬에서는가전제품을제어하기위해초기에는 C++ 언어를이용해서 oak 프로젝진하였지만 C++ 언어를이용하는경우에잘못사용된포인터때문에너무많은디작업이필요해지자새로운언어를개발하기로결정하였다. 새로운언어는 C++ 언어문법과유사하면서, 의미적으로는 Smalltalk 과유사한특징을가지도록했 + 언어의불필요하고복잡한포인터연산과가비지콜렉션등의기능을제거하였다. oak 프로젝트를수행하면서컴퓨터업계에는새로운기류가형성되고있었다. 바 Mosaic 웹브라우저의출현이었다. 1993년마크앤드슨은모자익웹브라우저고, 1994년넷스케입사를설립하였다. 웹브라우저의출현으로 oak 프로젝트는품을위한언어에서웹브라우저를위한언어로방향을급선회하게되었다 웹브라우저를위한언어로 Java를발표하게되었다. 당시정적이던웹브라우저에자바애플릿은큰관심을불러일으켰다. 초기에사용자들은웹브라우저에서수행되간단한애플릿에관심을두었지만, 썬의지속적인홍보덕분으로자바를이용한응용그램을작성하는프로그래머들이점차늘어나게되었다. 썬에서는자바언어를이용해프로그램을개발할수있는개발환경 (JDK) 을무료속지원하고있으며, 이것은자바의개념을점차확대시키는계기가되었다. 자제단순한언어가아니라개발환경으로확대된것이다. 썬에서는개발환경을지차원을넘어서점차자바를이용할수있는분야를확대시켜나가고있다. 자바를해개발한핫자바브라우저, 핫자바뷰어등의사용자응용프로그램에서부터 swi JMF 등의각종지원클래스, javaos 등의시스템프로그램, 자바반지, 자바등의하드웨어까지응용분야를넓히고있다. 자바는언어, 개발환경의개서이제는하나의컴퓨팅환경으로자리잡아가고있는것이다. (1 / 8) 오전 1:

4 최종명님의자바강좌 1. - 자바초보자를위해 I 자바 관련서적 자바와관련된서적은세계적으로 1997 년 11 월현재 900 여권을넘어서고있도없이많은책들이있는것이다. 초보자들에게책을선정하는것도쉬운일은아 The Java Programming Language 우선자바언어를개발한직접저술한 "The Java Programming Language" 는 Add 간되었다. 자바언어자체를조금깊이알아보고싶은분에게꼭권하고싶은책반초보자에게는좀지겨운느낌이들지도모르겠다. Java in Nutshell 저자는 David Flanagan 이고첫판과두은 JDK1.0 에관해, 두번째판은 JDK1.1 에관해설명하고있다. 간결부분들을잘설명해두었기때문에자바프로그래머에게꼭권하고싶은책이다. O'Reilly 출판사에서출간되었다. teach yourself Database Programming with JDB JDBC 프로그래밍에관련해잘설명하고있다. 저자는 Ashton Hobbs 이서출간되었다. Client/Server Programming with Java and CORB 들에게꼭권하고싶은책이다. Robert Orfali 와 Dan Harkey John Willey & Sons에서출간하였다. (2 / 8) 오전 1:

5 최종명님의자바강좌 1. - 자바초보자를위해 I Java Network Programming 저자는 Hughes 이고, Mann 네트워크 및 I/O 스트림에 대해자세히설명하고있다. 자바네트워크프로그래 장할만한 책이다. Java Network Programming 저자는 Elliotte 이고 O'R 바네트워크프로그래밍팁을중심으로서술되어있어서네트워크프로그래머에게권만한책이다. Java Threads Scott 과 Henry 가공동으로저술한책으로자바들이기술되어있다. O'Reilly 출판사에서출간되었다. Concurrent Programming in Java Doug Lea가집필한해서병행응용프로그램을작성하는사람에게권장할만하다. 책은 Addison W 판사에서출간되었고, 웹에서도무료로제공하고있다. (3 / 8) 오전 1:

6 최종명님의자바강좌 1. - 자바초보자를위해 I modern compiler implementation in Java Andre 에서출판되었고, 자바를이용해서컴파일러를작성하는사람들에게권할만하다. 자바 관련사이트 자바를개발한썬 (SUN) 사의공식자바사이트이다. 자바와관련된각종문서와구및 JDK 를얻을수있는사이트이다. 는자바프로그래밍을설명해주는온라인책이있다. 세계의수많은자바프로그램을모아놓은곳이다. 다양한자바프로그램들을분류사용자에게제공한다. 많은자바프로그램들이소스를공개해놓고있기때문에프램을작성하기전에이곳에있는프로그램들을참조하는것이바람직하다. 자바월드는온라인상에서발행되는자바관련잡지이다. 96 년부터발행되는이잡각종자바프로그래밍기법을설명해준다. 각종프로그래밍기법들을소개하기때문전문프로그래머는반드시보아두어야할사이트이다. 자바 언어맛보기 1. 에디터를이용해서 HelloWorld.java 라는파일을작성한다. HelloWorld.java 파일 1 class HelloWorld { 2 3 // 주석부분 4 publ args[]) { 5 6 String msg = "World"; 7 8 System.out.println(msg); javac 라는자바컴파일러를이용해서 HelloWorld.java 파일을 % javac HelloWorld.java 3. javac를이용하여컴파일하면 HelloWorld.class라는파일이생성된 HelloWorld.class 파일은 java라는자바인터프리터에의해 (4 / 8) 오전 1:

7 최종명님의자바강좌 1. - 자바초보자를위해 I % java HelloWorld HelloWorld.java 파일설명자바프로그램의확장자는.java 이고실행파일의확장자는.class 이다. 1 class HelloWorld { 자바는객체지향언어이다. 따라서자바에서는모든것이클래스되어있다. 1 번문장은 HelloWorld 라는클래스를정의하는것이다. javac를이용하여된다. 컴파일하면각클래스는.class 확장자를갖는파일로 3 // 주석부분 /* */ : C 스타일주석, 여러줄에걸쳐서사용할수있다. // : C++ 스타일주석, 한줄을주석으로사용할때편리하다. /* **/ : javadoc 을이용하여도큐먼트할때사용된다. 4 public static void main (String args public : 함수의억세스퍼미션을의미 static : void : 함수의리턴타입 main : 함수이름. main은프로그램의시작함수이다. String args[] : main의아규먼트, 스트링배열 6 String msg = "World"; String : 문자열을나타내는데이타타입클래스 msg = "World" : msg 라는변수에 World라는문자열을넣는다. ; : 모든문장은 ; 로끝난다. System.out.print : System 클래스의 out 멤버필드의 pri 8 System.out.print("Hello "); System : 자바가제공하는클래스이름 화면에문자를출력하는데사용된다. "Hello " : Hello라는문자열 9 System.out.println(msg); println : print line이라는뜻이다. 문자열을출력하고라인을바 msg : String 타입의변수 10 main함수의 끝을 의미한다. 모든함수와블락은 { 안에들어간다. (5 / 8) 오전 1:

8 최종명님의자바강좌 1. - 자바초보자를위해 I 11 C 나 C++ 와는 다르게 클래스의모든메소드는클래스안에정의되어있어야 한다. 이것은 PASCAL과유사하다. 자바 애플릿만들어보기 1. 에디터를이용하여 Hello.java 파일을작성한다. 1 import java.awt.*; 2 import java.apple Applet { 5 private String Greeting[] = { void paint(graphics g) { 10 g.drawstring 에디터를이용해서 Hello.html 파일을작성한다. 1 <html><head><title>hello</title></head code=hello.class width=250 height=250> 4 html> 3. javac 를이용해서 Hello.java 를컴파일한다. % javac Hello.java 4. appletviewer 나넷스케이프를이용해서 Hello.html 파일을 % appletviewer Hello.html (6 / 8) 오전 1:

9 최종명님의자바강좌 1. - 자바초보자를위해 I Hello.java 파일 설명 애플릿 (applet) : 웹브라우저상에서실행되는프로그램 (Hello.java appletviewer 나넷스케이프를이용해서 어플리케이션 : 일반적인응용프로그램 (HelloWorld.java) java 라는인터프리터를이용해서실행시킨다. 1 import java.awt.*; import : C 언어의 #include 에해당된다. java.awt : 자바언어가제공하는패키지이름이다. 패키지란비슷한종류의클래스를모아서만든클래스들의모임이다. java.awt 패키지는 GUI나 java.awt.* : java.awt 패키지에있는모든클래스를의미한다. 2 import java.applet.*; java.applet : 애플릿프로그램을작성하기위해서만든에플릿패키 java.applet.* : 애플릿패키지의모든클래스. 4 public class Hello extends Applet { public : 클래스의억세스퍼미션 class Hello : Hello 라는클래스를선언한다. extends : Applet 클래스에서상속받아 Hello 라는클 의미이다. Applet : java.applet패키지에있는 Applet 클래 5 private String Greeting[] = private : 클래스멤버필드의억세스퍼미션 String Greeting[] : Hello 클래스의멤베필드. 타입은문 = { : 배열에값을초기화하기위해서사용되었다. 6 "Hello, world" Greeting[0] 에 Hello, world 라는문자열로초기화했다. 7 ; ; : Greeting 문자열배열에초기화를끝내고블락 9 public void paint(graphics g) public : 함수의 억세스퍼미션 void : 함수의 리턴타입 void는아무것도리턴하지않는다. paint : Hello 클래스의메소드 Graphics : 그림을 그리는데필요한정보를가지고있는자료구조타입 (7 / 8) 오전 1:

10 최종명님의자바강좌 1. - 자바초보자를위해 I 애플릿에서는 System.out.prin 10 g.drawstring(greetin g.drawstring : 문자열을화면에그린다. 문자열을출력할수없다. Greeting[0], 25, 25 : 문자열 Greeting[0] 을 X좌표 2 11 paint 메소드의 끝을 의미한다. 12 Hello 클래스의 끝을 의미한다. (8 / 8) 오전 1:

11 최종명님의자바강좌 2 - 초보자가하기쉬운실수 <%@ Language=VBScript %> 자바초보자가자주범하는실수들 1. 자바는대소문자를구별한다. 도스에서는대소문자를구별하지않기때문에, 자바파일이름도대소문자구별없이사용하는경우가많이있는데, 유감스럽게도자바는프로그램내에서는물론파일이름도대소문자를구별한다. 2. 한글이름으로된디렉토리에서는잘안된다. 도스에서한글이름의디렉토리를사용하는경우에도자바에서는문제가될있다. 이것은주로클래스패스를찾는동안에한글이름의디렉토리는자잘인식하지못하기때문이다. 3. 자바소스파일은.java 로끝나고, 텍스트형태로저장해야한다. 윈도우 95 에서자바소스파일을편집하는데많이사용되는편집기는메모장이나 MS 워드등이다. 메모장이나워드를사용하는경우에자바소스파일의이름이.java 로끝나는지확인해봐야한다. 특히워작성하는경우에는워드포맷이아닌텍스트형태로저장하는것을잊어서는안된다. 4. 자바실행파일패스와클래스패스가제대로설정되어야한다. autoexec.bat 파일에다음변수가설정되어있어야한다. set JAVA_HOME=c: java set CLASSPATH=.;c: java lib classes PATH=%PATH%;%JAVA_HOME% bin 5. main() 이있는클래스를실행시켜야한다. 초보자들은때로는 main() 이없는클래스를 java 인터프리터로실행 main() 이없는클래스는 java 인터프리터로실행시킬수없다. 6. main 은항상 public static void main(string 7. 애플릿으로작성한클래스는항상 public 이다. 자바가처음나왔을때 teach yourself 책들중하나가애플릿않은프로그램이애플릿프로그램첫예제로나온적이있었다. 물론당시많지않은상황에서자바를배우려는사람들은이부분에서많이고생했을애플릿클래스는항상 public 이어야한다. 8. 한파일에 public 클래스는 1 개를초과할수없다. 한파일에는 public 클래스가최대 1 개이다. 1 개를초과하는경우에 (1 / 3) 오전 1:

12 최종명님의자바강좌 2 - 초보자가하기쉬운실수 에러메시지를보여준다. 9. public 으로선언된클래스가있는경우에파일이름은클래스이름과 10. 생성자 (constructor) 는리턴타입이없고, 클래스이름과동일어떤때는클래스의생성자가제대로작동하니않응경우가있다. 이런대부분생성자선언이잘못되어있기때문이다. 생성자는클래스이름과리턴타입이없어야한다. 리턴타입이있는경우에는다른일반함수로 11. 애플릿은애플릿뷰어나웹브라우저를이용해서실행시켜야한다. 12. HTML 에서애플릿의 width 와 height 사이에는 "," 가없다. <applet code= 클래스파일 width=300 height=200 </applet> 13. 자바에서제공하는클래스이름과동일한이름으로클래스를만들지않는좋다. 14. 클래스의멤버필드와함수의아규먼트이름이같은경우, 아규먼트의이높다. 예를들면, public class Test { int x; public Test(int x) { x = x; 는원하는결과를얻을수없다. 프로그래머는멤버필드 x 에아규먼트할당하려고하였는데결과는아규먼트 x 에아규먼트자신의값을다시되었다. 이런경우에는항상클래스의멤버필드임을확실히하기위해서사용한다. 즉, this.x = x; 형태로변경해야한다. 15. HTML 에서애플릿의 code 부분에클래스이름이정확한가확인해보라 <applet code= 클래스파일이름 width=300 height=2 </applet> 에서 " 클래스파일이름 " 의철자가틀리는경우에 IOException 에철자가틀리지않도록조심해야한다. 16. BorderLayout 에서컴포넌트를붙이는경우 "East", "So 의대소문자구별및철자에유의해야한다. 철자가틀리는경우에컴포넌화면에안보일수있다. (2 / 3) 오전 1:

13 최종명님의자바강좌 2 - 초보자가하기쉬운실수 (3 / 3) 오전 1:

14 최종명님의자바강좌 3 - 애플릿 #1 <%@ Language=VBScript %> 애플릿의기조 1 자바프로그래밍 최종명 애플릿 (applet) 이란웹브라우저상에서실행되는프로그램을말한다. 애플릿과케이션이라는것도있는데이것은우리가일반적으로알고있는응용프로그램을의라서어플리케이션은일반컴퓨팅환경에서실행되는프로그램을의미하고, 애플릿이라우저에서만실행되는프로그램을의미한다. 프로그래머는자바라는언어를이용해서애플릿과어플리케이션프로그램을모두작성있다. 그러나이곳에서는주로애플릿에관련된내용만다루도록하자. 이곳에서는의특징이나구조에대해서자세하게언급하지는않겠다. 이곳에서는주로제가자면서실습한내용들로꾸밀예정이다. 다음은 Hello.java 라는애플릿프로그램이다. 되도록이면실제로자신이입직하다. import java.awt.*; // 여기부터는주석문.. import java.applet.applet; // import 는 C- public class Hello extends Applet { // private String Greeting[] = { "Hello, world" ; public void paint(graphics g) { g.drawstring(greeting[0] g.drawline(25, 27, 150, 작성된자바프로그램은 javac 라는자바컴파일러를이용해서컴파일시킨다. 는목적코드로.class 파일을생성한다..class 파일은자바프로그램마다하나씩생성된다. class 파일이생성되면, html 파일에애플릿을인인클루드하기위해서는 <applet> 라는태그를이용한다. (1 / 2) 오전 1:

15 최종명님의자바강좌 3 - 애플릿 #1 <html><head><title>hello</title></head> <body> <applet code=hello.class width=250 height=2 </applet> </body> </html> 작성된애플릿을실행시켜보기위해서는웹브라우저를이용할수도있지만, 보통하는 appletviewer라는프로그램을이용한다. 다음예는자바프로그램뷰어로애플릿을실행시키는내용이다. % javac Hello.java % appletviewer Hello.html (2 / 2) 오전 1:

16 최종명님의자바강좌 4 - 애플릿 #2 <%@ Language=VBScript %> 애플릿의기초 2 여기서는앞장에서한 Hello.java 를조금변형해보자. import java.awt.*; import java.applet.applet; public class Hello extends Applet { Image img; // 그림을위한변수를선언했다. Image img2; private String Greeting[] = { "Hello, world" ; public void init() { // 원하는그림을읽어들인다. // 여러분은가지고있는그림이름으로다음두줄을변경해야한다. img = getimage(getdocume img2 = getimage(getdocum public void paint(graphics g) { //drawstring 은 (25,25) 에서부터문자열을출력한다. g.drawstring(greeting[0] //drawline 은 (25,27) 과 (150,27) 두점을연결하는선 g.drawline(25, 27, 150, //drawimage 는읽어들인그림을출력한다. g.drawimage(img, 25, 33, g.drawimage(img2, 100, 3 오전 1:58:56

17 최종명님의자바강좌 5 - 제어구조 <%@ Language=VBScript %> 자바프로그래밍기초최종명 자바는 C 나 C++ 와비슷한연산자와제어구조를가지고있다. 이제자바언어의제어구조의형태와제어구조를이용한간단한프로그램들을작성해보자. IF 문 if boolean ( ) { statements; else { statements; HelloSomebody.java 파일 1 class HelloSomebody { 2 3 public static void main (String 4 5 System.out.print("Hello "); 6 if (args.length > 0) { 7 System.out.println(args[0]) 8 9 else { 10 System.out.println("?????") % javac HelloSomebody.java % java HelloSomebody CHOI Hello CHOI % java HelloSomebody Hello????? --> 실행결과 --> 실행결과 (1 / 5) 오전 1:

18 최종명님의자바강좌 5 - 제어구조 FOR 문 for( init_expr; test_expr2; ) { increment_expr3 statements; HelloFrields.java 파일 1 class HelloFrields { 2 3 public static void main (String 4 5 int i; 6 7 System.out.print("Hello "); 8 for (i=0; i < args.length; i+ 9 System.out.print(args[i]); 10 System.out.print(" "); System.out.println(); % javac HelloFrields.java % java HelloFrields CHOI LEE KIM SONG PARK Hello CHOI LEE KIM SONG PARK YANG --> 실 while 문 while( boolean ) { statements; (2 / 5) 오전 1:

19 최종명님의자바강좌 5 - 제어구조 HelloFriendsWhile.java 파일 1 class HelloFriendsWhile { 2 3 public static void main (String 4 5 int i = 0; 6 7 System.out.print("Hello "); 8 while(i < args.length) { 9 System.out.print(args[i 10 System.out.print(" "); 11 i++; System.out.println(); % javac HelloFriendsWhile.java % java HelloFriendsWhile CHOI LEE KIM SONG Hello CHOI LEE KIM SONG PARK YANG --> 실 do-while 문 do { statements; while( boolean ); (3 / 5) 오전 1:

20 최종명님의자바강좌 5 - 제어구조 1 class HelloFriendsDoWhile { 2 3 public static void main (String 4 5 int i = 0; 6 7 System.out.print("Hello "); 8 do { 9 System.out.print(args[i 10 System.out.print(" "); 11 i++; 12 while(i < args.length); 13 System.out.println(); % javac HelloFriendsDoWhile.java % java HelloFriendsDoWhile CHOI LEE KIM SON Hello CHOI LEE KIM SONG PARK YANG --> 실 switch 문 switch( expr ) { expr1 case : statements; break; expr2 case : statements; break; default: statements; break; (4 / 5) 오전 1:

21 최종명님의자바강좌 5 - 제어구조 YesOrNo.java 파일 1 import java.io.*; 2 3 class YesOrNo { 4 public static void main(string 5 6 System.out.println("Yes/No 7 try { 8 char c = (char)system.i 9 10 switch(c) { 11 case 'y': 12 case 'Y': 13 System.out.prin 14 break; 15 case 'n': 16 case 'N': 17 System.out.prin 18 break; 19 default: 20 System.out.prin 21 break; catch(ioexception e) { % javac YesOrNo.java % java YesOrNo Yes/No? y Yes <-- 사용자입력 (5 / 5) 오전 1:

22 최종명님의자바강좌 6 - AWT <%@ Language=VBScript %> 자바프로그래밍기초최종명 AWT 클래스 프레임 (Frame) 1. new 를이용해서프레임을생성한다. 2. resize() 함수를호출해서크기를조정한다. 3. 원도우를화면에출력하기위해서는 show() 함수를호출한다. (1 / 14) 오전 1:59:30

23 최종명님의자바강좌 6 - AWT import java.awt.*; public class FrameDemo { public static void main(string[] args) { Frame f = new Frame(); f.resize(300, 200); f.show(); 버튼 (Button) StandardButton.java 파일 import java.awt.*; import java.applet.applet; public class StandardButton extends Applet { Button button1,button2,button3; public void init() { button1 = new Button("OK"); button2 = new Button("Cancle"); button3 = new Button("Help"); add(button1); add(button2); add(button3); public boolean action (Event evt, Object arg) { if (evt.target instanceof Button) { handlebutton(evt,arg); return true; return false; public void handlebutton(event evt, Object arg) { if("ok".equals((string) arg)) System.out.println("O else if("cancel".equals((string) arg)) System.out.println("Cancel"); else if("help".equals((string) arg)) System.out.pri (2 / 14) 오전 1:59:30

24 최종명님의자바강좌 6 - AWT 체크박스버튼 (CheckboxButton) CheckboxButton.java 파일 import java.awt.*; import java.applet.applet; public class CheckboxButton extends Applet { public void init() { add(new Checkbox("Cake")); add(new Checkbox("Ice cream")); add(new Checkbox("Pie")); public boolean action (Event evt, Object arg) { if (evt.target instanceof Checkbox) { handlecheckbox(evt,arg); return true; return false; public void handlecheckbox(event evt,object arg) { System.out.print(((Checkbox)evt.target).getLabel() System.out.println("=" + arg); 선택버튼 (ChoiceButton) (3 / 14) 오전 1:59:30

25 최종명님의자바강좌 6 - AWT ChoiceButton.java 파일 import java.awt.*; import java.applet.applet; public class ChoiceButton extends Applet { Choice mychoice; public void init() { mychoice = new Choice(); mychoice.additem("one for the money..."); mychoice.additem("two for the show..."); mychoice.additem("three to get ready..."); mychoice.additem("and away we go!"); add(mychoice); public boolean action(event evt,object arg) { if (evt.target instanceof Choice) { handlechoice(evt,arg); return true; return false; public void handlechoice(event evt,object arg) { System.out.println(arg); 리스트 (List) (4 / 14) 오전 1:59:30

26 최종명님의자바강좌 6 - AWT ListDemo.java 파일 import java.awt.*; import java.applet.applet; public class ListDemo extends Applet { List l1,l2; public void init() { l1 = new List(5,false); l1.additem("choose"); l1.additem("one"); l1.additem("word"); l1.additem("from"); l1.additem("this"); l1.additem("list"); add(l1); l2 = new List(5,true); l2.additem("as"); l2.additem("many"); l2.additem("words"); l2.additem("from"); l2.additem("this"); l2.additem("list"); l2.additem("as"); l2.additem("you"); l2.additem("want"); add(l2); public boolean action(event evt,object arg) { if (evt.target instanceof List) { handlelistaction(evt, arg); return true; return false; public void handlelistaction(event evt, Object arg) System.out.println("You double clicked o '"+ arg + (5 / 14) 오전 1:59:31

27 최종명님의자바강좌 6 - AWT 텍스트영역 (TextArea) TextAreaDemo.java 파일 import java.awt.*; import java.applet.applet; public class TextAreaDemo extends Applet { TextArea ta1,ta2,ta3; public void init() { ta1 = new TextArea(); add(ta1); ta2 = new TextArea("Hello",3,20); add(ta2); ta3 = new TextArea("Not editable",3,20); ta3.seteditable(false); add(ta3); public boolean action(event evt,object arg) { if (evt.target instanceof TextArea) { handletextarea(evt, arg); return true; return false; public void handletextarea(event evt, Object arg) { System.out.println("You typed'"+ arg + "'."); (6 / 14) 오전 1:59:31

28 최종명님의자바강좌 6 - AWT 스크롤바 (Scrollbar) scroll.java 파일 import java.awt.*; public class scroll extends Frame{ Scrollbar hbar; Label verylong; int offset; Point p; Dimension s; public scroll() { offset = 0; verylong = new Label("This is very long hbar = new Scrollbar(Scrollbar.HORIZONT setlayout(new BorderLayout(0,0)); add("south", hbar); add("center", verylong); public boolean handleevent(event e) { if(e.target == hbar) { switch(e.id) { case Event.SCROLL_LINE_UP: case Event.SCROLL_LINE_DOWN: case Event.SCROLL_PAGE_DOWN: case Event.SCROLL_PAGE_UP: offset = ((Integer)e.ar m(offset); break; return true; public void m(int o) { p = verylong.location(); s = verylong.size(); verylong.move(-o, p.y); verylong.resize(s.width+o,s.height); public static void main(string[] args) { scroll s = new scroll(); s.resize(100, 80); s.show(); (7 / 14) 오전 1:59:31

29 최종명님의자바강좌 6 - AWT 레이아웃매니저 화면에 AWT 구성요소들의모양과위치는 2가지요소에의해서결정된다. 첫번째는 AWT 요소들이패널에추가되는순서이고, 두번째는레이아웃 매니저이다. 레이아웃매니저는화면에서각 AWT요소들을어디에위치 시킬 것인가를결정한다. AWT는 "FlowLayout", "GridLayout", "BorderLayout", "C 기본적인 4가지레이아웃을제공한다. FlowLayout Flow 레이아웃은컨테이너에컴포넌트들을가로나세로방향의줄단위로 늘어놓을 때적절하게사용된다. 만약구성요소들이한줄에들어가지 않으면 다음줄로이동한다. FlowLayout은각줄안에서정렬위치를결정 할 수 있는 alignment 값을가지고있다. alignment의기본값은 "CENTE 이고, 이것은구성요소를중앙에정렬시킨다. Panel 컨테이너는디폴트로 Flow 레이아웃을이용한다. setlayout(new FlowLayout()); (8 / 14) 오전 1:59:31

30 최종명님의자바강좌 6 - AWT FlowTest.java 파일 import java.applet.*; import java.awt.*; public class FlowTest extends java.applet.applet { public void init() { setlayout(new FlowLayout()); add(new Button("1")); add(new Button("2")); add(new Button("3")); add(new Button("4")); add(new Button("5")); add(new Button("6")); add(new Button("7")).hide(); add(new Button("8")); add(new Button("9")); add(new Button("10")); add(new Button("11")); BorderLayout BorderLayout은컨테이너에컴포넌트들의위치를 " 동 / 서 / 남 / 북 / 중앙 " 중에서하나를지정해서사용할수있다. 모든가장자리의요소들은필요한크기만큼배열되고, 중앙에있는요소는만은여백을사용한다. setlayout(new BorderLayout()); add("north", new TextField("Name", 30)); (9 / 14) 오전 1:59:31

31 최종명님의자바강좌 6 - AWT BorderTest.java 파일 import java.io.*; import java.awt.*; import java.applet.*; public class BorderTest extends Applet { public void init() { setlayout(new BorderLayout(5, 5)); add("north", new Button("North")); add("center", new Button("Center")); add("south", new Button("South")); add("west", new Button("West")); add("east", new Button("East")); show(); Grid 레이아웃 Grid 레이아웃은컴포넌트들을행열식으로행과열의수에맞게배치할때 사용된다. 컴포넌트들의위치는맨윗줄부터시작해서왼쪽에서오른쪽으로 움직이며 각줄을이동한다. add() 메소드를호출하는순서에따라컴포넌트의 위치가 달라진다. Grid 레이아웃을생성하기위해서는행과열을지정해야한다. 각 행과 열의크기가동일하기때문에 Grid 레이아웃에서는각 컴포넌트는동일한크기를갖는다. setlayout(new GridLayout(3,4)); (10 / 14) 오전 1:59:31

32 최종명님의자바강좌 6 - AWT GridTest.java 파일 import java.applet.*; import java.awt.*; class GridPanel extends Panel { GridPanel(int rows, int cols) { setlayout(new GridLayout(rows, cols, 5, add(new Button("1")); add(new Button("2")); add(new Button("3")); add(new Button("4")); add(new Button("5")); add(new Button("6")); add(new Button("7")); add(new Button("8")); add(new Button("9")); add(new Button("10")); add(new Button("11")); public class GridTest extends Applet { public void init() { setfont(new Font("Dialog", Font.PLAIN, setlayout(new BorderLayout()); Panel p = new GridPanel(3, 4); add("center", p); p.add(new GridPanel(4, 3)); show(); (11 / 14) 오전 1:59:31

33 최종명님의자바강좌 6 - AWT GridBag 레이아웃 자바에서 가장복잡한레이아웃이 GridBag 레이아웃이다. GridBag 레이아웃은 Grid 레이아웃과비슷한성질을가지고있지만, 각컴포넌트의크기가동일할 필요는 없다는것이차이점이다. GridBag 레이아웃은 GridBagConstraints를 이용해서 컴포넌트의위치를지정해줄수있다. GridBagConstraints 변수 gridx, gridy 컴포넌트의좌측상단모서리의시작위치를지정한다. 화면의좌측상단모서리의좌표값은 gridx=0, gridy=0 이다. 컴포넌트의좌측상단시작위치를이전컴포끝나는곳다음부터 ( 이전컴포넌트의오른쪽혹은아래쪽 ) 사용하고자할때는 GridBagConstraints.RELATIVE 값을사용한다. 기본값은 GridBagCo 로정의되어있다. gridwidth, gridheight 컴포넌트가화면에출력되는행과열의셀 (cell) 수를지정한다. 기본값은 1로정의되어있다. gridwidth의값으로 GridBagConstraints.REMAINDER이설정마지막에위치하고, gridheight의값으로설정되면열의마지막에위치한다. GridBagConstraints.RELATIVE 로값이설정되면, 행과열의마지막컴포 컴포넌트의크기가컨테이너보다커야할때사용된다. GridBagConstraints.NON fill 값이설정되면컨테이너의크기는변경되지않는다. GridBagConstraints.HORI 설정되면 가로측이확장된다. GridBagConstraints.VERTICAL인 경우에는 세 확장된다. GridBagConstraints.BOTH인경우에는가로세로방향으로 모두 확 된다. ipadx, ipady insets anchor 컴포넌트의크기가컨테이너보다작은경우에컴포넌트를컨테이너의어느곳에위치시킬것인가를결정한다. 사용가능한값으로는 GridBagConstraints.CENTER ( 기본값 ) GridBagConstraints.NORTH GridBagConstraints.NORTHEAST GridBagConstraints.EAST GridBagConstraints.SOUTHEAST GridBagConstraints.SOUTH GridBagConstraints.SOUTHWEST GridBagConstraints.WEST GridBagConstraints.NORTHWEST (12 / 14) 오전 1:59:31

34 최종명님의자바강좌 6 - AWT weightx, weighty GridBagTest.java 파일 import java.awt.*; import java.util.*; import java.applet.applet; public class GridBagTest extends Applet { protected void makebutton(string name, GridBagLayout gridbag, GridBagConstraints c) { Button button = new Button(name); gridbag.setconstraints(button, c); add(button); public void init() { GridBagLayout gridbag = new GridBagLayout(); GridBagConstraints c = new GridBagConstraints() setfont(new Font("Helvetica", Font.PLAIN, 14)); setlayout(gridbag); c.fill = GridBagConstraints.BOTH; c.weightx = 1.0; makebutton("button1", gridbag, c); makebutton("button2", gridbag, c); makebutton("button3", gridbag, c); c.gridwidth = GridBagConstraints. REMAINDER; makebutton("button4", gridbag, c); c.weightx = 0.0; makebutton("button5", gridbag, c); c.gridwidth = GridBagConstraints.RELATI makebutton("button6", gridbag, c); c.gridwidth = GridBagConstraints. REMAINDER; makebutton("button7", gridbag, c); c.gridwidth = 1; c.gridheight = 2; (13 / 14) 오전 1:59:31

35 최종명님의자바강좌 6 - AWT c.weighty = 1.0; makebutton("button8", gridbag, c); c.weighty = 0.0; c.gridwidth = GridBagConstraints. REMAINDER; c.gridheight = 1; makebutton("button9", gridbag, c); makebutton("button10", gridbag, c); resize(300, 100); (14 / 14) 오전 1:59:31

36 최종명님의자바강좌 7 - EVENT <%@ Language=VBScript %> 자바 : 이벤트처리최종명 대부분의 프로그램은사용자의명령어를기다리고 있다가, 사용자의 액션에 반응해서 작동하게된다. 마우 블클릭, 마우스이동등의모든사용자액션에 대해 응답하는 형태로 작동하도록 프로그래밍하는것을이 (event-driven) 프로그래밍이라고 한다. 윈도우 환경에서는 대부분의 응용프로그램이이벤트-드리 로작성된다. 자바의 AWT에서도물론이벤트-드리븐프로그래밍을 지원한다. 자바에서는 모든 사용자의액션을이벤트 표현하고 있다. 사용자의액션에의해발생된 이벤트 객체는 사용자의 액션에 관련된 정보를가지고있다. 이벤트타입정보 : 예 ) 마우스클릭, 키보드 키 누름 등 이벤트타겟 : 예 ) 사용자가클릭한 버튼, 사용자가 입력한 텍스트 필드 등 이벤트가발생한시각 이벤트가발생한 X-Y 좌표위치 : 예 ) 마우스가 클릭된 위치 등 눌려진키보드키 : 예 ) 사용자가누른 키보드의 키값 아규먼트 모디파이어키의상태 : 예 ) Shift, Cntl 등 컴포넌트 (Component) 클래스에서이벤트를처리하는함수들이정의되어있다. 프로그래머는원하는함수를 overriding 방법을통해자신이원하는형태로정의할수있다. 이벤트처리함수들중 handleevent() 라는함수이다. handleevent() 는모든이벤트를처리할수있는함수 handleevent() 함수가자동적으로호출된다. handleevent() 는모든이벤트를처리할은가급적자제하는것이좋다. 왜냐하면, 모든이벤트를하나의함수에서모두처리하기때문에함수의다. 이것은프로그램작성, 수정, 이해하는데많은장애요인이된다. 두번째이유로는많은이벤트를간에상호작용에의해원하지않는결과를가져올수있다. 컴포넌트 (Component) 클래스에서는 handleevent() 이외에특정이벤트만처리할수있는런특정이벤트만처리하는함수가정의되어있으면, 원하는이벤트가발생하는경우 handleeven 당되는이벤트처리함수를호출한다. 이러한함수들로는다음과같은것들이있다. (1 / 9) 오전 1:59:59

37 최종명님의자바강좌 7 - EVENT 모든이벤트처리함수들은적어도하나의아규먼트 (Event) 를가지며, boolean 값을리턴한다를리턴하면, 이것은이벤트핸들러가이벤트를상위컴포넌트계층으로전달한다는것을의미한다. 반대면이벤트는더이상전달되지않고현재이벤트처리함수에서처리된다는것을의미한다. handle 벤트가적당한이벤트처리함수에전달되도록 super.handleevent() 를리턴값으로호출해 public boolean handleevent(event e) { if(e.target instanceof Scrollbar) { textfield.settext(string.valueof(slider.getvalu return super.handleevent(e); 다음과같은모양의애플릿을작성하였다. 이애플릿은사용자가버튼을클릭하면텍스트영역에이벤트가을기록한다. (2 / 9) 오전 1:59:59

38 최종명님의자바강좌 7 - EVENT 다음그림은앞그림에서본애플릿의계층적 구성도이다. 그림에서 화살표는 사용자가 버튼을클릭하는 위계층으로전달되는과정을보여주고있다. 파일 Example1.java import java.awt.*; class NewButtonEx1 extends { private TextArea ta; Button public NewButtonEx1(String str, TextArea ta) { super(str); this.ta = ta; public boolean handleevent(event evt) { if (evt.id == Event.ACTION_EVENT) { ta.appendtext("button " + getlabel() + " saw ac return super.handleevent(evt); (3 / 9) 오전 1:59:59

39 최종명님의자바강좌 7 - EVENT class NewPanelEx1 extends { private String str; private TextArea ta; Panel public NewPanelEx1(String str, TextArea ta) { super(); this.str = str; this.ta = ta; public Insets insets() { return new Insets(5, 5, 5, 5); public void paint(graphics g) { g.drawrect(0, 0, size().width - 1, size().height - public boolean handleevent(event evt) { if (evt.id == Event.ACTION_EVENT) { ta.appendtext("panel " + str + " saw action... else if (evt.id == Event.MOUSE_DOWN) { ta.appendtext("panel " + str + " saw mouse down return super.handleevent(evt); public class Example1 extends java.applet.applet { TextArea ta = new TextArea(); public void init() { setlayout(new BorderLayout()); add("center", ta); NewPanelEx1 p1 = new NewPanelEx1("1", ta); NewPanelEx1 p2 = new NewPanelEx1("2", ta); p2.add(new NewButtonEx1("One", p2.add(new NewButtonEx1("Two", ta)); ta)); p1.add(p2); (4 / 9) 오전 1:59:59

40 최종명님의자바강좌 7 - EVENT add("south", p1); public Dimension preferredsize() { return new Dimension(400, 230); public Insets insets() { return new Insets(5, 5, 5, 5); public boolean handleevent(event evt) { if (evt.id == Event.ACTION_EVENT) { ta.appendtext("applet saw action... n n"); else if (evt.id == Event.MOUSE_DOWN) { ta.appendtext("applet saw mouse down... n n"); return super.handleevent(evt); public static void main(string [] args) { Frame f = new Frame("Example 1"); Example1 ex = new Example1(); ex.init(); f.add("center", ex); f.pack(); f.show(); 다음그림은이벤트를테스트하는애플릿이다. 각종 이벤트가 발생할 때마다 System.out.prin 용을출력하도록하였다. (5 / 9) 오전 1:59:59

41 최종명님의자바강좌 7 - EVENT 파일 EventTutor.java import java.applet.applet; import java.awt.*; public class EventTutor extends Applet { public void init() { System.out.println("init public void paint(graphics g) { System.out.println("paint public void start() { System.out.println("start event"); event"); event"); public void destroy() { System.out.println("destroy event"); (6 / 9) 오전 1:59:59

42 최종명님의자바강좌 7 - EVENT public void update(graphics g) { System.out.println("update event"); public boolean mouseup(event e, int x, int y) { System.out.println("mouseUp event"); return false; public boolean mousedown(event e, int x, int y) { System.out.println("mouseDown"); return false; public boolean mousedrag(event e, int x, int y) { System.out.println("mouseDrag event"); return false; public boolean mousemove(event e, int x, int y) { System.out.println("mouseMove event"); return false; public boolean mouseenter(event e, int x, int y) { System.out.println("mouseEnter event"); return false; public boolean mouseexit(event e, int x, int y) { System.out.println("mouseExit event"); return false; public void getfocus() { System.out.println("getFocus public void gotfocus() { System.out.println("gotFocus public void lostfocus() { System.out.println("lostFocus event"); event"); event"); public boolean keydown(event e, int x) { System.out.println("keyDown event"); return true; (7 / 9) 오전 1:59:59

43 최종명님의자바강좌 7 - EVENT 다음은사각형을그리는애플릿의예이다. 파일 drawrec.java import java.applet.*; import java.awt.*; public class DrawRec extends Applet { int startx, starty, w, h; public void init() { startx = 0; starty = 0; w = 0; h = 0; public void paint(graphics g) { g.drawrect(startx, starty, w, h); public boolean mousedown(event e, int x, int y) startx = x; starty = y; return true; public boolean mousedrag(event e, int x, int y) w = Math.abs(startX -x); h = Math.abs(startY - y); repaint(); return true; (8 / 9) 오전 2:00:00

44 최종명님의자바강좌 7 - EVENT public boolean mouseup(event e, int x, int y) { w = Math.abs(startX -x); h = Math.abs(startY - y); repaint(); return true; (9 / 9) 오전 2:00:00

45 Language=VBScript %> 자바프로그래밍 : 네트워크글 : 최종명그림 : 박준서 TCP/IP 이해 국제표준단체인 ISO 가제정한 OSI 7 layers 는실제로사용되지않는프로토콜이지만, 통신프로토콜개발과이해하는데이용된다. ARPA 네트워크에서부터시작된 TCP/IP 프로토콜은 1983 년버클리대학교에서개발된 BSD 유닉스에포함되면서부터점차많이사용되게되었다. BSD 유닉스가소켓기능을제공하면서부터네트워크프로그래밍은휠씬간단하게되었다. 즉, 프로그래머는 OSI 7 layer 에서트랜스포트계층이하는무시하고, 소켓함수만이용해서프로그래밍할수있게된것이다. System V 계열의유닉스도소켓의영향을받아서 STREAM 을개발해서 TLI 프로그래밍을지원하고있다. (1 / 12) 오전 2:00:20

46 TCP/IP 프로토콜에서각계층은상대방에게 전달할 데이터와 제어 정보를 가지고 있다. 데이터와제어정보를메시지라고 한다. 메시지는 하위 계층으로 전달되면 기존메시지에추가적인제어 정보를 붙이게 되는데 이것을 캡슐화 (encapsulation) 라고 한다. 이와 반대되는 과정을 decapsulation 한다. 다음그림은인터넷상에서메시지가전송되는과정을보여준다. 인터넷상에는수많은컴퓨터들이존재하고, 이컴퓨터들중에서어떤것들은메시지를 (2 / 12) 오전 2:00:20

47 받아서다른곳으로전송하는역할을하기도한다. 이러한역할을하는컴퓨터나장치를라우터라고한다. 라우터는전송받은내용을 decapsulation 해서제어정보를알아보고적당한곳으로메시지를전송한다. URL protocol://hostname[:port]/path/filename#section 프로토콜에는다음과같은것이있다. file : 하드디스크에있는파일 ftp : FTP 서버에연결 http : 웹서버에연결 gopher : gopher 서버에연결 news : usenet 뉴스그룹에 연결 telnet : 텔넷서비스를이용 wais : wais 서버에연결 URL 을이용해서다른곳으로이동하는애플릿을작성해보자. (3 / 12) 오전 2:00:20

48 URLButton.java 파일 import java.awt.*; import java.net.*; import java.applet.applet; public class URLButton extends Applet { URL url = null; String title = null; public void init() { String urlstring = null; setlayout(new GridLayout(1,1)); title = getparameter("title"); if(title == null) title = "URLButton"; urlstring = getparameter("url"); if(urlstring == null) urlstring = " try { url = new URL(urlString); catch(malformedurlexception e) { System.out.println("Invali Button site = new Button(title); add(site); resize(100, 60); getappletcontext().showdoc public boolean action(event e, Object arg) if((e.target instanceof Button)&&( return false; URLButton.html 파일 (4 / 12) 오전 2:00:20

49 <body bgcolor="#ffffff"> <applet code=urlbutton width=100 height=50> <param name=title value="webzine"> <param name=url value=" </applet> <applet code=urlbutton width=100 height=50> <param name=title value="bbs"> <param name=url value=" </applet> <applet code=urlbutton width=100 height=50> <param name=title value="webnews"> <param name=url value=" </applet> 실행 예 소켓 일반적으로 C 언어를이용해서네트워크프로그램을작성하는경우, 프로그램절차는다음그림과같다. 서버프로그램은소켓을생성하고, bind() 를이용해서소켓과어드레스및포트를결합시킨다. listen() 함수를호출하고, bind() 함수를호출해서클라이언트로부터요청이올때까지블락되어서기다린다. bind() 함수는클라이언트로부터요청이오면클라이언트와콩신할수있는소켓을만들어서리턴한다. 리턴된소켓을통해서서버와클라이언트는 read()/write() 함수를이용통신할수있다. 클라이언트에서는소켓을생성하고, connnect() 함수를통해서서버에연결을시도한다. connect() 를호출하면서버에서는 accept() 함수가실행된다. 서버와연결되면통해 read/write 를할수있다. (5 / 12) 오전 2:00:20

50 서버소켓 자바에서네트워크프로그래밍을하기위해서는 java.net 패키지를이용한다. 서버프로그램을만들때는소켓을만들고, bind() 하고 listen() 하는일들이항상자바에서는이러한반복작업을제거하기위해서서버소켓 (ServerSocket) 이라는클만들었다. 프로그래머는서버소켓을만들어서 accept() 메소드를호출한다. accept() 메소드는클라이언트로부터컨넥션이요청될때까지블락되있다가, 요청이들어오면클라이언트와통신할수있는소켓을생성해서리턴해준다. 서버는리턴된소켓을이용해서클라이언트와통신할수있다. 클라이언트에서도마찬가지로반복되는작업을제거하기위해, connect() 라는함수를호필요가없도록소켓 (Socket) 이라는클래스를만들었다. 따라서, 클라이언트에서는소켓을소켓을이용해서만든 I/O 스트림을이용해서서버와통신할수있다. (6 / 12) 오전 2:00:20

51 예 : 자바채팅 프로그램 다음채팅프로그램은 "Java Network programming" 의저자인 Hughes 프로그램소스이다. 프로그램을너무간단하고도잘작성했기때문에저자의허락없이인용한다. 프로그램의저작권은 hughes 에있슴을밝혀둔다.( 국내에서는출처만밝히면인용해저작권법에저촉되지않는것으로알고있다. -_-;;;) 서버실행시키기 % java ChatServer 9830 & 애플릿뷰어로본채팅클라이언트 (7 / 12) 오전 2:00:20

52 ChatServer.java 파일 import java.net.*; import java.io.*; import java.util.*; public class ChatServer { public ChatServer (int port) throws IOException ServerSocket server = new ServerSocket (port); while (true) { Socket client = server.accept (); System.out.println ("Accepted from " + clien ()); ChatHandler c = new ChatHandler (client); c.start (); public static void main (String args[]) throws I if (args.length!= 1) throw new RuntimeException ("Syntax: ChatSer new ChatServer (Integer.parseInt (args[0])); ChatHandler.java 파일 (8 / 12) 오전 2:00:20

53 import java.net.*; import java.io.*; import java.util.*; public class ChatHandler extends Thread { protected Socket s; protected DataInputStream i; protected DataOutputStream o; public ChatHandler (Socket s) throws IOException this.s = s; i = new DataInputStream (new BufferedInputStre o = new DataOutputStream (new BufferedOutputSt ())); protected static Vector handlers = new Vector () public void run () { String name = s.getinetaddress ().tostring (); try { broadcast (name + " has joined."); handlers.addelement (this); while (true) { String msg = i.readutf (); broadcast (name + " - " + msg); catch (IOException ex) { ex.printstacktrace (); finally { handlers.removeelement (this); broadcast (name + " has left."); try { s.close (); catch (IOException ex) { ex.printstacktrace(); protected static void broadcast (String message) synchronized (handlers) { Enumeration e = handlers.elements (); while (e.hasmoreelements ()) { ChatHandler c = (ChatHandler) e.nextelemen try { synchronized (c.o) { c.o.writeutf (message); (9 / 12) 오전 2:00:20

54 c.o.flush (); catch (IOException ex) { c.stop (); ChatApplet.java 파일 import java.net.*; import java.io.*; import java.awt.*; import java.applet.*; // Applet parameters: // host = host name // port = host port public class ChatApplet extends Applet implements protected DataInputStream i; protected DataOutputStream o; protected TextArea output; protected TextField input; protected Thread listener; public void init () { setlayout (new BorderLayout ()); add ("Center", output = new TextArea ()); output.seteditable (false); add ("South", input = new TextField ()); input.seteditable (false); public void start () { listener = new Thread listener.start (); (this); public void stop () { if (listener!= null) listener.stop (); listener = null; (10 / 12) 오전 2:00:20

55 public void run () { try { String host = getparameter ("host"); if (host == null) host = getcodebase ().gethost (); String port = getparameter ("port"); if (port == null) port = "9830"; output.appendtext ("Connecting to " + host + Socket s = new Socket (host, Integer.parseIn i = new DataInputStream (new BufferedInputSt o = new DataOutputStream (new BufferedOutput ())); output.appendtext (" connected. n"); input.seteditable (true); input.requestfocus (); execute (); catch (IOException ex) { ByteArrayOutputStream out = new ByteArrayOut ex.printstacktrace (new PrintStream (out)); output.appendtext (" n" + out); public void execute () { try { while (true) { String line = i.readutf (); output.appendtext (line + " n"); catch (IOException ex) { ByteArrayOutputStream out = new ByteArrayOut ex.printstacktrace (new PrintStream (out)); output.appendtext (out.tostring ()); finally { listener = null; input.hide (); validate (); try { o.close (); catch (IOException ex) { ex.printstacktrace (); public boolean handleevent (Event e) { if ((e.target == input) && (e.id == Event.ACTI (11 / 12) 오전 2:00:20

56 try { o.writeutf ((String) e.arg); o.flush (); catch (IOException ex) { ex.printstacktrace(); listener.stop (); input.settext (""); return true; else if ((e.target == this) && (e.id == Even if (listener!= null) listener.stop (); hide (); return true; return super.handleevent (e); (12 / 12) 오전 2:00:20

57 최종명님의자바강좌 9 - Postgres DBMS + JDBC <%@ Language=VBScript %> POSTGRES DBMS + JDBC 데이타베이스만들기 % createdb mydb % psql mydb Welcome to the POSTGRESQL interactive sql m Please read the file COPYRIGHT for copyri type? for help on slash commands type q to quit type g or terminate with semicolon to e You are currently connected to the databas mydb=> create table weather (city varchar(8 CREATE mydb=> insert into weather values('seoul', mydb-> g INSERT mydb=> insert into weather values('pusan', mydb-> g INSERT mydb=> select * from weather ; city temp_lo temp_hi date seoul pusan (2 rows) mydb=> select * from weather where city='se city temp_lo temp_hi date seoul (1 row) (1 / 4) 오전 2:

58 최종명님의자바강좌 9 - Postgres DBMS + JDBC mydb=> select city from weather where temp_ city seoul pusan (2 rows) mydb=> select city, temp_hi from weather wh city temp_hi seoul 32 pusan 34 (2 rows) mydb=> q JDBC 이용해서데이타베이스접근하기 Postgres DBMS용 JDBC 드라이버를 /usr/local/java/j 설치한다. JDBC 드라이버는 JDBC 드라이버를설치한다음에자신의 CLASSPATH 환경변수를변경해 C-Shell 사용자는다음내용을 $HOME/.cshrc 파일에추가한다. setenv CLASSPATH /usr/local/java/javapost 추가한후에 % source $HOME/.cshrc Bourne-Shell 과 Korn-Shell 사용자는다음내용을 $HOME CLASSPATH=/usr/local/java/JavaPostgres95-0. export $CLASSPATH 추가한후에 #. $HOME/.profile % vi JdbcTest.java 1 import java.sql.*; (2 / 4) 오전 2:

59 최종명님의자바강좌 9 - Postgres DBMS + JDBC 2 3 public class JdbcTest { 4 public static void main(string a 5 try { 6 // DriverManager.setLogStre 7 8 Driver pgd = (Driver) new 9 10 String url = "jdbc:postgre Connection conn = DriverMa Statement stat = conn.crea ResultSet rs = stat.execut while ( rs.next() ) { 19 String city = rs.getstr 20 short lo = rs.getshort( 21 short hi = rs.getshort( 22 Date date = rs.getdate( 23 System.out.println(city stat.close(); 26 conn.close(); 27 catch ( Exception e ) { % javac JdbcTest.java % java JdbcTest 간단한 설명 JDBC 프로그래밍절차 1. 각데이타베이스에맞는 JDBC 드라이버를메모리에로드한다. (3 / 4) 오전 2:

60 최종명님의자바강좌 9 - Postgres DBMS + JDBC 8 Driver pgd = (Driver) new po 2. DriverManager의 getconnection() 메소드를이용해서연결한다. getconnection() 메소드는 Connection 을 12 Connection conn = DriverMan 3. Connection 의 createstatement() 메소드를이용해서 14 Statement stat = conn.creat 4. Statement 의 executequery() 메소드를이용해서 SQL 전달한다. executequery() 메소드는 ResultSet 을리턴한테이블형태로되어있다. 16 ResultSet rs = stat.execute 5. ResultSet 은테이블형태로되어있기때문에 cursor 를이동하면검색한다. next() 메소드는 cursor 를한행씩이동시킨다. c 위치한행에서각필드의값을검색하기위해서는 getxxx() 함수를이주의할점은값을한번읽으면, 다시접근할수없다는사실이다. 18 while ( rs.next() ) { 19 String city = rs.getstri 20 short lo = rs.getshort(2 21 short hi = rs.getshort(3 22 Date date = rs.getdate(5 23 System.out.println(city 작업이끝난경우에는 Statement 와 Connection 에서 clo 호출해주어야한다. 25 stat.close(); 26 conn.close(); (4 / 4) 오전 2:

61 최종명님의자바강좌 10 - JDBC 와 MSQL <%@ Language=VBScript %> msql 설치 msql 은 mini SQL DBMS 로서널리알려진공개 DBMS 이다. 호주의제공하고있으며, 가격은저렴하지만공짜는아니다. 다운받아서사용하는경우 14 일동안공짜로사용할수있다. msql 버전예 1. msql-2.0-b7.1.tar.gz 파일을다운로드받는다. 2. 다운로드받은파일을압축을푼다. % gzip -d msql-2.0-b7.1.tar.gz tar xvf 3. msql 소스파일이있는디렉토리로이동해서 INSTALL 파일을읽어본다. % cd msql-2.0-b make 유틸리티를이용해서컴퓨터타입을체크한다. % make target 5. make target 를하면, target 디렉토리가생성된다. targ 에는자신의컴퓨터타입에맞는디렉토리가존재한다. % cd target % ls -af./../ S 6. 자신의컴퓨터타입에맞는디렉토리로이동한다. % cd Solaris Sparc 7. setup 유틸리티를이용해서컴파일전셋업작업을한다. %./setup 8. make 유틸리티를이용해서컴파일한다. % make 9. 컴파일이성공적으로끝나는경우에 msql 을인스톨한다. % su % make install (1 / 4) 오전 2

62 최종명님의자바강좌 10 - JDBC 와 MSQL 10. 인스톨이성공적으로종료되는경우에 msql 은 /usr/local/hughes 디렉토리에인스톨된다. 11. msql 계정을만든다. 12. /usr/local/hughes/msqldb 디렉토리의 owner 를 13. ACL 파일을만들어준다. % cd /usr/local/hughes % cp msql.acl.sample msql.acl 13. 루트권한으로 msql 데몬을실행시킨다. % /usr/local/hughes/bin/msql2d & 14. 필요한경우에 msql 이어떤포트를사용하는지알아본다. % more /usr/local/hughes/msql.conf #### 자바 JDBC 사용자를위해 를방문해서 ms 받아온다. 2. 받아온 msql-jdbc.tar.gz 파일을압축을풀어서 $JAVA_H 설치한다. 만약 $JAVA_HOME 이 /usr/local/java 이 1.0a4라면 /usr/local/java/msql-jdbc_1.0a4 된다. 3. JDBC 드라이버설치가완료되었으면 CLASSPATH 환경변수를설정 CLASSPATH 가 /usr/local/java/msql-jdbc_1. % setenv CLASSPATH /usr/local/java/msql 4. 적당한데이타베이스를만든다. % msqladmin create mydb Database "mydb" created. (2 / 4) 오전 2

63 최종명님의자바강좌 10 - JDBC 와 MSQL % msql mydb Welcome to the minisql monitor. Type h msql > create table weather (city char(2 -> g Query OK. 1 row(s) modified or retrieve msql > insert into weather values('seoul -> g Query OK. 1 row(s) modified or retrieve msql > select * from weather -> g Query OK. 1 row(s) modified or retrieve city temp SEOUL JDBC 를이용한자바프로그램을작성한다. % vi mydb.java 1 import java.sql.*; 2 import COM.imaginary.sql.msql.*; 3 4 public class mydb { 5 public static void main(string 6 try { 7 new MsqlDriver(); 8 String url="jdbc:msql:/ 9 10 Connection conn = Drive 11 Statement stmt = conn.c (3 / 4) 오전 2

64 최종명님의자바강좌 10 - JDBC 와 MSQL 12 ResultSet rs = stmt.exe while(rs.next()) { 15 System.out.println( 16 System.out.println( stmt.close(); 20 conn.close(); 21 catch(exception e) { 22 e.printstacktrace(); 자바프로그램을컴파일한다 % javac mydb.java 7. 자바프로그램을실행시킨다. % java mydb City :SEOUL Temperature :20 (4 / 4) 오전 2

65 최종명님의자바강좌 RMI 기초 <%@ Language=VBScript %> Java RMI 이글은숭실대학교최종명님의강좌에서발최한내용입니다. 최종명 1. Hello 인터페이스 파일과 Hello 인터페이스를 implement 하는클래 를 만든다. % vi Hello.java 1 import java.rmi.*; 2 3 public interface Hello extends Remote { 4 5 public String sayhello() throws jav Hello 인터페이스 파일과 implement 한클래스를 javac를이용해서 한다. % vi HelloImpl.java 1 import java.rmi.*; 2 import java.rmi.server.*; 3 import java.net.*; 4 5 public class HelloImpl extends UnicastR 6 7 public HelloImpl() throws RemoteExc 8 super(); public String sayhello() throws Rem return "Hello World"; public static void main(string[] ar 17 System.setSecurityManager(new R try { 20 HelloImpl h = new HelloImpl 21 Naming.rebind("hello", h); 22 System.out.println("Hello S (1 / 3) 오전 2:01:

66 최종명님의자바강좌 RMI 기초 23 catch (RemoteException re) { 24 System.out.println("Excepti 25 catch (MalformedURLException 26 System.out.println("Malform % javac -d. Hello.java HelloImpl.java % ls./ Hello.class Hello.java H../ Hello.html HelloApplet.java H 3. rmic 를 이용해서 stub 과 skeleton 클래스를만든다. % rmic -d. HelloImpl % ls./ Hello.html HelloClie../ Hello.java HelloImpl Hello.class HelloApplet.java HelloImpl 4. rmiregistry 를등록한다. % rmiregistry & [1] rmi 서버를가동시킨다. % java HelloImpl & [2] 7387 Hello Server ready 6. Hello 클라이언트 프로그램을작성한다. % vi HelloClient.java 1 import java.rmi.*; 2 3 public class HelloClient { 4 5 public static void main(string[] ar 6 7 System.setSecurityManager(new R 8 9 try { 10 Hello h = (Hello) Naming.lo (2 / 3) 오전 2:01:

67 최종명님의자바강좌 RMI 기초 String message = h.sayhello 13 System.out.println("HelloCl 14 catch(exception e) { 15 System.out.println("Excepti javac 를이용해서클라이언트프로그램을컴파일한다. % javac HelloClient.java 8. 클라이언트프로그램을실행시킨다. % java HelloClient HelloClient: Hello World (3 / 3) 오전 2:01:

68 최종명님의자바강좌 12 - 코바 (CORBA) 프로그래밍시작 <%@ Language=VBScript %> 코바 프로그래밍 1 편 이글은숭실대학교최종명님의 강좌에서 발최한 내용입니다. 최종명 VisiBroker 환경맞추기 를 방문해서 VisiBroker for Java 3.0을받아온 다운받은프로그램의 압축을 풀면 다양한 파일들이 나타난다. 이 파일들 중에서 vbinstall를 실행시키면자동적으로 비지브로커를 설치해준다. 기본적으로 비지브로커는 /usr/local/vbroker 디렉토리에설치된다. 비지브로커를설치한후에사용자의환경변수를설정해주어야한다. C-Shell 사용자는 $HOME/.cshrc 파일에다음과같은내용을추가해준다. setenv VBROKER_ADM /usr/local/vbroker/adm setenv CLASSPATH /usr/local/vbroker/lib/vbj30.jar:${classpat setenv PATH /usr/local/vbroker/bin:${path Bourne-Shell 과 Korn-Shell 사용자는 $HOME/.profile 파일에 VBROKER_ADM=/usr/local/vbroker/adm export VBROKER_ADM CLASSPATH=/usr/local/vbroker/lib/vbj30.jar:${CLASSPATH export CLASSPATH PATH=/usr/local/vbroker/bin:${PATH export PATH 를추가한다. Count 예제따라하기 이제간단한 Count 예제를만들에보자. IDL 만들기 Counter.idl 파일 module Counter { interface Count { attribute long sum; long increment(); ; ; (1 / 5) 오전 2:01:12

69 최종명님의자바강좌 12 - 코바 (CORBA) 프로그래밍시작 idl 컴파일러를이용해서 Stub/Skeleton 파일만들기 % idl2java Counter.idl Creating: Counter Creating: Counter/Count.java Creating: Counter/CountHolder.java Creating: Counter/CountHelper.java Creating: Counter/_st_Count.java Creating: Counter/_sk_Count.java Creating: Counter/_CountImplBase.java Creating: Counter/CountOperations.java Creating: Counter/_tie_Count.java Creating: Counter/_example_Count.java % ls./../ Counter/ Counter.idl % cd Counter % ls./ CountHelper.java _CountImplBase../ CountHolder.java _example_count Count.java CountOperations.java _sk_count.java % javac -d.. *.java % cd.. 서버 프로그램만들기 % vi CountServer.java import Counter.*; class CountImpl extends _sk_count implements Count { private int sum; CountImpl(String name) { super(name); System.out.println("Count Object Created"); sum = 0; public int sum() { return sum; public void sum(int val) { sum = val; public int increment() { sum++; return sum; public class CountServer { public static void main(string args[]) { try { org.omg.corba.orb orb = org.omg.cor (2 / 5) 오전 2:01:12

70 최종명님의자바강좌 12 - 코바 (CORBA) 프로그래밍시작 org.omg.corba.boa boa = orb.boa_init CountImpl count = new CountImpl("hi" boa.obj_is_ready(count); boa.impl_is_ready(); catch(exception e) { System.out.println(e); % javac -d. CountServer.java 클라이언트만들기 % vi CountClient.java import Counter.*; public class CountClient { public static void main(string args[]) { try { System.out.println("Initializing the org.omg.corba.orb orb = org.omg.corb System.out.println("Binding to Count Count counter = CountHelper.bind(orb System.out.println("sum <- 0"); counter.sum(0); for(int i=0; i<1000;i++) { counter.increment(); System.out.println("Sum = "+counter. catch(exception e) { System.out.println(e); % javac -d. CountClient.java 실행시키기 % osagent & % gatekeeper & % vbj CountServer & [1] (3 / 5) 오전 2:01:12

71 최종명님의자바강좌 12 - 코바 (CORBA) 프로그래밍시작 Count Object Created % vbj CountClient Initializing the ORB Binding to Count Object sum <- 0 Sum = 1000 Applet 클라이언트만들기 % vi CountApplet.java import java.applet.*; import java.awt.*; import Counter.*; public class CountApplet extends Applet { private TextField countfield, pingtimefield; private Button runcount; private Count counter; public void init() { setlayout(new GridLayout(2, 2, 10, 10)); add(new Label("Count")); add(countfield = new TextField()); countfield.settext("1000"); add(runcount = new Button("Run")); add(pingtimefield = new TextField()); pingtimefield.seteditable(false); try { showstatus("initializing the ORB") org.omg.corba.orb orb = org.omg.cor showstatus("binding to Count Object" counter = CountHelper.bind(orb, "hi" catch(exception e) { showstatus("applet Exception:"+e); public boolean action(event e, Object arg) { if(e.target == runcount) { try { showstatus("sum <- 0"); //counter.sum((int)0); showstatus("increment..."); int stopcount = Integer.par pingtimefield.settext(" "); long starttime = System.curr for(int i=0; i < stopcount; counter.increment(); (4 / 5) 오전 2:01:12

72 최종명님의자바강좌 12 - 코바 (CORBA) 프로그래밍시작 +" msec"); return long stoptime = System.curre pingtimefield.settext("time showstatus("sum = "+ counter catch(exception ex) { showstatus("system Exception System.out.println(ex); ex.printstacktrace(system.ou return true; false; % javac -d. CountApplet.java % vi CountApplet.html <applet code=countapplet.class width=300 height=400> <param name=gatekeeper_port value=15000> <param name=orbbackcompat value=true> <param name=org.omg.corba.orbclass value=com.visigenic.vbrok </applet> % appletviewer CountApplet.html % netscape & 애플릿보기... (5 / 5) 오전 2:01:12

73 최종명님의 자바강좌 2 - 코바 (CORBA) Callback <%@ Language=VBScript %> 코바프로그래밍 2 편 - CallBack 이글은숭실대학교최종명님의강좌에서발최한내용입니다. 최종명 idl 파일 만들기 HelloCallback.idl 파일 1 // Copyright Choi Jong Myung, Soongsil Univ. 2 // jmchoi@amin.soongsil.ac.kr 3 module HelloCallback { 4 interface Hello { 5 void writemsg(); 6 ; 7 8 interface HelloCallbackServer { 9 boolean register(in Hello client); 10 void broadcast(); 11 ; 12 ; % idl2java HelloCallback.idl % cd HelloCallback % javac -d.. *.java % cd.. 서버만들기 % vi HelloServer.java HelloServer.java 파일 1 // Copyright Choi Jong Myung, Soongsil Univ. 2 // jmchoi@amin.soongsil.ac.kr 3 4 import java.util.*; 5 import HelloCallback.*; 6 7 public class HelloServer { 8 public static void main(string args[]) { 9 try { 10 org.omg.corba.orb orb = org.omg.corba 11 org.omg.corba.boa boa = orb.boa_init( 12 HelloCallbackServerImpl registor = n 13 boa.obj_is_ready(registor); 14 boa.impl_is_ready(); 15 catch(exception e) { 16 System.out.println(e); 17 (1 / 2) 오전 2:01:22

74 최종명님의 자바강좌 2 - 코바 (CORBA) Callback class HelloCallbackServerImpl extends _sk_helloc 23 Vector clientlist; public HelloCallbackServerImpl(String name) { 26 super(name); 27 clientlist = new Vector(10); 28 System.out.println("HelloCallbackServerIm public boolean register(hello client) { 33 try { 34 clientlist.addelement(client); 35 System.out.println("Client registered 36 return true; 37 catch (Exception e) { 38 return false; public void broadcast() { 44 Enumeration e = clientlist.elements(); 45 while(e.hasmoreelements()) { 46 Hello client = (Hello)e.nextElement() 47 client.writemsg(); 48 System.out.println("broadcast is call % javac -d. HelloServer.java 클라이언트만들기 % vi HelloClientApplet.java 1 // Copyright Choi Jong Myung, Soongsil Univ. 2 // jmchoi@amin.soongsil.ac.kr 3 (2 / 2) 오전 2:01:22

75 최종명님의자바강좌 15 - 자바쓰레드프로그래밍 쓰레드기초 자바쓰레드프로그래밍 " 실행중인프로그램 " 을프로세스라고한다. 그러니까명령어를입력해서돌아가는프로그램은전부프다. 프로세스에는명령어들이순차적으로실행이되는데이것을실행쓰레드하고한다. 순차적으로실들을하나의실로꿸수있기때문이다. 이렇게하나의실로꿸수있는프로그램은단일쓰레드다. 그런데어떤프로그램에는여러개의함수들이서로독립적으로수행되는경우도있다. 이런이순차적으로수행되는것이아니기때문에하나의실로꿸수없을것이다. 이런프로그램은다중이라고한다. 다음그림은세차하는프로그램이다. 홍길동이스케쥴표에나와있는대로세차를하고있다. 여기서로그램명령어들이고, 스케쥴표대로일을하는홍길동은쓰레드가된다. 홍길동이세차하기위해사 물, 호수등은시스템자원들이다. 다음그림은홍길동이두동생 ( 홍길숙, 홍길찬 ) 을데리고세차를하고있다. 이세명은각자스게할당된일을한다. 스케쥴표는프로그램명령어들이고, 홍길동, 홍길숙, 홍길찬은일을하는일하는쓰레드가많은프로그램을다중쓰레드프로그램이라고한다. 우선직관적으로봐도다중쓰이단일쓰레드프로그램보다효율적일것이다. 다중쓰레드를사용하는프로그램이대부분효과적이런것은아니다. " 사공이많으면배가산으로간다 " 라는속담이있는것처럼쓰레드가많으면 (1 / 8) 오전 2:01:49

76 최종명님의자바강좌 15 - 자바쓰레드프로그래밍 율적인경우도있다. 쓰레드는 Thread 클래스로부터상속을받아서만들수도있고, Runnable 인터페이스를수도있다. 두가지방법중에서프로그래머는그때그때상황에맞게사용하면된다. 두방법모려면 run() 함수를만들어야한다. 이 run() 함수에쓰레드가일할작업의내용을기술해 쓰레드를만든다음에쓰레드를실행시키려면 start() 함수를호출해주어야한다. start( 으로 run() 함수가수행된다. 쓰레드는 run() 함수를마치거나 stop() 함수가호출되면실레드는 start() 함수로다시실행시킬수는없다. 쓰레드의스케쥴링은자바가상머신에서이루어진다. 자바가상머신은우선순위에따라선점방방식으로스케쥴링된다. 선점방식이란우선숭위가높은쓰레드가등장하면현재실행중인쓰레드는순위가높은쓰레드가실행되는것을의미한다. 우선순위가낮은쓰레드는우선순위가높은쓰레 sleep, blocked 될때까지기다려야한다. 예제 : CountThread CountThread.java 파일 1 class CountThread extends Thread { 2 int maxcount; 3 4 CountThread(int maxcount) { 5 this.maxcount = maxcount; public void run() { 9 10 for(int count = 1;count 쓰레드가 종료되면 ThreadDeath 예외가 발생한다. 어떤 경우에는 쓰레드가 종료하기 전에 일들이 있을 수도 있다. 이런 경우에 쓰레드가 종료할 때 발생되는 ThreadDeath 예외를 직전에 필요한 작업들을 처리할 수 있다. 모든 작업이 처리된 다음에는 ThreadDeath 예외 해주어야 한다. (2 / 8) 오전 2:01:49

77 최종명님의자바강좌 15 - 자바쓰레드프로그래밍 CatchDeath.java 파일 1 class MyThread extends Thread { 2 MyThread(String name) { 3 super(name); public void run() { 7 try { 8 while (true) { 9 sleep(500); 10 System.out.println(getName() catch (ThreadDeath ouch) { 13 System.out.println("I ("+getname( 14 throw(ouch); 15 catch (InterruptedException e) { public class CatchDeath { 20 static public void main(string args[]) { 21 MyThread thr_a = new MyThread("A"); System.out.println("Starting the thre 24 thr_a.start(); try { 27 Thread.sleep(2000); 28 catch (InterruptedException e) { System.out.println("Stopping the thre 31 thr_a.stop(); 결과 % java CatchDeath Starting the thread... A: is running A: is running A: is running Stopping the thread... I (A) is being killed. 설명 3 super(name); 쓰레드에이름을붙이기위해서 Thread(String name) 생성자를사용할수있다. s 생성자, 즉 Thread(String name) 를의미한다. 12 catch (ThreadDeath ouch) { 13 System.out.println("I ("+getname( 14 throw(ouch); (3 / 8) 오전 2:01:49

78 최종명님의자바강좌 15 - 자바쓰레드프로그래밍 쓰레드가 종료되면 ThreadDeath 예외가 발생한다. 13번째 줄에서 쓰레드가 종료하기 전 리할 수있다. 작업이 끝나면 ThreadDeath 예외를 다시 throw 해서 쓰레드가 종료되도록한 8.2 자바쓰레드 다음은 쓰레드의 상태도이다. 쓰레드는 생성자를 통해 생성되면 Newborn 상태에 있게된다. N start() 메소드가 호출되면 Runnable 상태로 전이된다. Runnable 상태는 쓰레드 (queue) 에 등록된 상태이다. Runnable 상태에서 Running 상태로의 전이는 운영체 다. Runnable 상태에 우선 순위에 따라 가장 높은 우선 순위의 쓰레드가 Running 상태로 쓰레드가 CPU를 차지하고 실행중인 상태이다. 쓰레드가 차지하고 있는 CPU를다른 쓰레드에 넘 suspend()/sleep()/wait() 메소드들과 yield() 메소드가있다. suspe 블락상태로 전이해서 다른 쓰레드에게 CPU를 넘겨주는 형태이고, yield() 메소드는 쓰레드가 전이해서 다른 쓰레드에 CPU를 넘겨줄 수 있다. 그런데 두 종류의 메소드에는스케쥴링에 약간의 suspend()/sleep()/wait() 메소드들은 쓰레드가 블락되기 때문에 CPU를 다른 메소드는 Runnable 상태로 가기 때문에 현재 쓰레드가 우선 순위가 가장 높다면 다시 CPU 것이다. 이렇게되면 우선 순위가 낮은 쓰레드들은 CPU를 차지해서 실행할 기회를 얻을 수 없을 suspend() 메소드에 의해 블락된 쓰레드는 resume() 메소드를 통해 블락 상태에서 Ru 있다. 반면에 wait() 메소드에 의해 블락된 쓰레드는 notify() 메소드를 통해서 블락 상태에서 될수 있다. sleep() 메소드에 의해 블락된 쓰레드는 일정 시간이 되면 자동적으로 Runn (4 / 8) 오전 2:01:49

79 최종명님의자바강좌 15 - 자바쓰레드프로그래밍 자바에서쓰레드는실제운영체제의쓰레드로매핑이이루어져야실제로쓰레드로서작업을할수있다. UNIX 나 NT, Win95, OS/2 등이쓰레드를지원하는방식이다르때문에자바쓰레드와실제운영체제의쓰레드와매핑이달라질수있다. 실제운영체제에서쓰레드는사용자쓰레드와커널쓰레드로구분된다. 사용자쓰레드는사용자가라이브러리를이용해서만든쓰레드이고, 커널쓰레드는실제스케쥴링이일어나는스케쥴링단위가된다. 사용자쓰레드와커널쓰레드는 M-1 관계, 1-1 관계, M-N 관계를갖을수있다. NT 와 Win95 는 1-1 관계의대표적인예이고, M-N 은 Solaris 쓰예이다. 자바쓰레드는일종의사용자쓰레드이다. M-1 매핑 자바쓰레드는사용자쓰레드와 1:1 관계를갖고, 사용자쓰레드는커널쓰레드와 M:1 관계를 (5 / 8) 오전 2:01:49

80 최종명님의자바강좌 15 - 자바쓰레드프로그래밍 갖는다. 따라서, 커널쓰레드는하나만있기때문에다중쓰레드의장점을살리지못하고있다. M-1 매핑의대표적인예는 green_threads 이다. 솔라리스 2.4, 2.5 운영체제에모두 green_threads 를사용하고있다. One-One 매핑 1:1 매핑관계는 NT, Win95 에서사용되는쓰레드이다. 자바쓰레드 1 개에커널쓰레드가매핑되기때문에다중쓰레드의장점을잘살릴수있다. (6 / 8) 오전 2:01:49

81 최종명님의자바강좌 15 - 자바쓰레드프로그래밍 M-N 매핑 솔라리스 2.6 에서지원되는자바 native 쓰레드를사용하는경우에, C 언어에서쓰레드를사용하는것처럼쓰레드를자유롭게사용할수있다. 프로그래머는원하는경우사용자쓰레드가원하는만큼의커널쓰레드와매핑이되도록프로그램할수있다. NT 의 1:1 매핑보다프로그래가프로그램하는데편리하면서, 다중쓰레드의장점을최대한활용할수있다. (7 / 8) 오전 2:01:49

82 최종명님의자바강좌 15 - 자바쓰레드프로그래밍 (8 / 8) 오전 2:01:49

83 최종명님의강좌 16 - 라운드로빈스케쥴러 RoundRobin 스케쥴러만들기 - 글 & 코딩 : 최종명 RoundRobin 방식으로스케쥴링하기 CircularList.java 파일 1 public class CircularList { 2 Node head, nil; 3 Node current; 4 5 public CircularList() { 6 head = null; 7 nil = null; 8 current = null; public synchronized Object getne 12 if(current == null) { 13 current = head; 14 else { 15 current = current.next; if(current == null) { 18 current = head; if(current!= null) 21 return current.value; 22 else 23 return null; public synchronized void insert( 27 if(head == null) { 28 Node node = new Node(o); 29 head = node; 30 nil = node; 31 else { 32 Node node = new Node(o); 33 Node temp = nil; 34 nil = node; (1 / 6) 오전 2

84 최종명님의강좌 16 - 라운드로빈스케쥴러 35 temp.next = nil; public void delete(object o) { 40 Node temp1 = head; 41 Node temp2 = null; while(temp1!= null) { 44 if(temp1.value == o) { 45 if(temp2 == null) { 46 head = temp1.ne 47 else { 48 temp2.next = te break; temp2 = temp1; 53 temp1 = temp1.next; public class Node { 58 Object value; 59 Node next; public Node(Object o) { 62 value = o; 63 next = null; Scheduler.java 파일 1 public class Scheduler extends Thre 2 private int timeslice; 3 static private CircularList 4 5 static { 6 threads = new CircularList( (2 / 6) 오전 2

85 최종명님의강좌 16 - 라운드로빈스케쥴러 9 public Scheduler(int t) { 10 timeslice = t; 11 setdaemon(true); 12 start(); static public void addthread(th 16 threads.insert(t); 17 System.out.println("new thr 18 t.setpriority(2); static public void removethread 22 if(t.isalive()) 23 t.setpriority(5); 24 threads.delete(t); public void run() { 28 Thread current; 29 setpriority(6); 30 while(true) { 31 current = (Thread) thre 32 if(current == null) { 33 System.out.println( 34 continue; if(current.isalive()) { 37 current.setpriority 38 else { 39 removethread(curren //System.out.println("S 42 try { 43 Thread.sleep(timesl 44 catch (InterruptedExc 45 System.out.println( if(current.isalive()) { 48 current.setpriority 49 else { 50 removethread(curren 51 (3 / 6) 오전 2

86 최종명님의강좌 16 - 라운드로빈스케쥴러 Task.java 파일 1 class Task extends Thread { 2 String id; 3 4 public Task(String s) { 5 id = s; 6 Scheduler.addThread(this); public void run() { 10 for(int i =0; i < 10 ; i++) 11 docalc(i); 12 System.out.println(id+" public void docalc(int n) { 17 for(int i = 0; i < n* ; App.java 파일 1 class App { 2 public static void main(string 3 Task t1, t2, t3; 4 Scheduler c = new Scheduler 5 t1 = new Task("T1"); 6 t2 = new Task("T2"); 7 t3 = new Task3("T3"); 8 9 t1.start(); 10 t2.start(); 11 t3.start(); class Task3 extends Task { 16 (4 / 6) 오전 2

87 최종명님의강좌 16 - 라운드로빈스케쥴러 17 public Task3(String id) { 18 super(id); public void run() { 22 for(int i =0; i < 10 ; i++) 23 docalc(i); 24 System.out.println("Tas public void docalc(int n) { 29 for(int i = 0; i < n* ; 결과 % java App new thread inserted new thread inserted new thread inserted T1:4 T2:4 T2:4 Task3 id =T3:4 Task3 id =T3:4 T1:4 T2:4 Task3 id =T3:4 T1:4 T2:4 Task3 id =T3:4 T1:4 T1:4 T2:4 Task3 id =T3:4 T1:4 T2:4 Task3 id =T3:4 T1:4 T2:4 (5 / 6) 오전 2

88 최종명님의강좌 16 - 라운드로빈스케쥴러 Task3 id =T3:4 T1:4 T2:4 Task3 id =T3:4 Task3 id =T3:4 T1:4 T2:4 T1:4 T2:4 Task3 id =T3:2 (6 / 6) 오전 2

89 최종명님의자바강좌 자바입출력 ( 예제를통해본 ) <%@ Language=VBScript %> 예제를통해본자바입출력 이글은숭실대학교최종명님의강좌에서발최한내용입니다. 최종명 바이트의연속을스트림 (stream) 이라고 한다. 자바에서는 스트림을 이용해서 입출력을 한다. 입력을하는스트림을 입력스트림 (input stream) 이라고 하고, 출력하는 스트림을 출력 스트림 (out 다. 입출력스트림은 java.io 패키지에 만들어져 있다. 화면에출력하고, 키보드로 부터 입력을 받아들이기 위해서는 System 클래스의 out 과 in 을 사용했다. System 클래스의 out은 PrintStream 타입의 멤버 필드이고, in은 InputStream 타입의 멤버 필드이다. 자바에서 입력 스트림 클래스들은 InputStream 클래스로부터 상속된 클래스이다. 출력 스트림 클래스들은 OutputStream 클래스로부터상속된 클래스이다 InputStream 클래스 System 클래스의 in 멤버필드는 대표적인 InputStream 타입이다. InputStream은 입력 위해다음과같은 메소드들을 이용할 수 있다. int read() int read(byte[]) int read(byte[], int, int) read() 메소드를 이용하는 경우에 바이트 값을 읽어오거나 파일의 끝인 경우에는 -1을리턴한다. read(byte[]) 메소드는 읽은 내용을 바이트 배열에 채우고, 읽은 바이트의 수를리턴한다. read(byte[], int, int) 메소드는 바이트 배열에서 시작 위치와 끝 위치를 지정한뒤에내용을 읽어오고, 읽은 바이트의 수를 리턴한다. inout.java 파일 1 import java.io.*; 2 3 class inout { 4 public static void main (String args[]) throws 5 int b, count = 0; 6 while ((b = System.in.read())!= -1) { 7 count++; 8 System.out.print((char)b); 9 10 System.out.println(); 11 System.err.println("total bytes = " + count 결과 % java inout Hello Hello 한글??±? ^D total bytes = 11 (1 / 12) 오전 2:02:21

90 최종명님의자바강좌 자바입출력 ( 예제를통해본 ) 설명 6 while ((b = System.in.read())!= -1) { System.in.read() 메소드를이용해서키보드로부터입력을받는다. read() 메소드는바이트입력을리턴하고, 입력이종료되면 (Cntl-D) -1을리턴한다. 8 System.out.print((char)b); System.out.print() 메소드를 이용해서 읽어온 바이트를 문자 타입으로 변환해서 출력한다. 11 System.err.println("total bytes = " + count System 클래스의 err 멤버 필드를 이용해서 출력하였다. err 멤버필드는 표준에러 출력을위해사용된다. total bytes = 11 유닉스시스템에서테스트하였기때문에영어문자당 1 개의바이트와한글에 2 바이트가사용되었다. 따라서, 영어 5 개문자 (5 바이트 ), 한글 2 개문자 (4 바이트 ), 리턴값 (1 바이트 x 2), 총 11 바이트가된다 InputStreamReader 클래스 JDK 1.0의입출력 스트림은 JDK 1.1에서 Reader 와 Writer 클래스로 대체되었다. 입력을위해서는 Reader 클래스를 이용하고, 출력을 위해서는 Writer 클래스를 이용할수있다. Reader 클래스는 입력을 위해 다음과 같은 메소드들을 이용할 수있다. int read() int read(char[]) int read(char[], int, int) InputStreamReader 클래스는 InputStream 을아규먼트로만들어진다. InputStreamReader 클래스의 getencoding() 메소드는스트림에서사용된인코딩이름을 BufferedReader 클래스는 Reader 클래스를아규먼트로만들수있다. BufferedRead 는다음과같은메소드를이용해서입력을받을수있다. int read() String readline() read() 메소드는한문자를읽어서리턴하는메소드이고, readline() 메소드는한줄을읽어서문자열을리턴하는메소드이다. CharInput.java 파일 1 import java.io.*; 2 3 public class CharInput { 4 5 public static void main(string args[]) { 6 String s; 7 BufferedReader in; 8 in = new BufferedReader(new InputStreamRead 9 10 try { 11 System.out.print("Put characters:"); 12 while((s = in.readline())!= null) { 13 System.out.println(" tcharacters fr 14 System.out.print("Put characters:") catch (IOException ex) { 17 (2 / 12) 오전 2:02:21

91 최종명님의자바강좌 자바입출력 ( 예제를통해본 ) 18 결과 % java CharInput Put characters:hello? Characters from console :Hello? Put characters: 안녕하세요? Characters from console : 안녕하세요? Put characters:^d 설명 8 in = new BufferedReader(new InputStreamRead 키보드로부터입력을받는 BufferedReader 클래스를만들기위해, InputStreamReade 클래스와 System.in 을이용했다. 12 while((s = in.readline())!= null) { BufferedReader 클래스의 readline() 메소드를이용해서한줄을읽어들였다 FileOutputStream 클래스 FileOut.java 파일 1 import java.io.*; 2 3 public class FileOut { 4 private FileOutputStream fout; 5 private byte msg[]; 6 private int len; 7 8 FileOut(String fname) throws IOException { 9 msg = new byte[1024]; 10 len = 0; 11 fout = new FileOutputStream(fname); 12 int b =0; System.out.print("Put characters:"); 15 b = System.in.read(); 16 while(b!= 10) { 17 msg[len++] = (byte)b; 18 b = System.in.read(); write(msg); 21 System.out.println("Total "+ len + " bytes public void write(byte[] m) throws IOException{ 25 for(int i=0; i < len; i++) { 26 fout.write(m[i]); public void close() { 31 try { 32 fout.close(); 33 catch(ioexception ex) { (3 / 12) 오전 2:02:21

92 최종명님의자바강좌 자바입출력 ( 예제를통해본 ) 37 public static void main(string[] args) throws I 38 FileOut o = new FileOut("temp"); 39 o.close(); 결과 % java FileOut Put characters:hello? 안녕하세요? Total 20 bytes. % more temp Hello? 안녕하세요? 설명 11 fout = new FileOutputStream(fname); 파일이름을아규먼트로갖고 FileOutputStream 클래스를만든다. 15 b = System.in.read(); 키보드로부터입력을 받아들인다. 26 fout.write(m[i]); FileOutputStream 클래스를이용해서파일에기록한다. 32 fout.close(); close() 메소드를이용해서파일을닫는다 RandomAccessFile 클래스 RandomAccessFile 클래스는 seek() 메소드를이용해서입출력포인터의위치를이동할수있다. 포인터를이동시킨뒤에파일에기록하거나내용을읽을수있다. RandomAccessFile 클래스는다음과같은생성자를이용해서만들수있다. RandomAccessFile(String filename, String openmode) 첫번째아규먼트는파일의이름을의미하고, 두번째아규먼트는파일을오픈할때읽기전용인가아니면읽기 / 쓰기가능한지를나타낸다. 두번째아규먼트는읽기전용인경우에는 "r", 읽기 / 쓰기인경우에는 "rw" 이다. RandomAccessFile 클래스는파일의길이를알아볼수있는 length() 메소드, 각자료타입을읽을수있는 readboolean(), readbyte(), readchar(), readdoub readint(), readlong(), readshort() 등의메소드들이있다. 마찬가지로각자료기록할수있는 writeboolean(boolean), writebyte(int), writebytes( writechars(string), writedouble(double), writefloat(float), writeshort(int) 등의메소드들이있다. EmployeeDB.java 파일예제는자바에서 C 언어에서레코드를어떻게사용하는가를보여준다. 자바는레코드가없기때문에클래스를레코드로사용한다. Record 클래스는레코드를표현하기위해사용된클래스이다. Table 클래스는레코드를처리하기위해사용된클래스이다. Table 클래스에서레코드를읽거나기록하기위한루틴들을포함하고있다. EmployeeDB 클래스는주로 GUI 를위한코드가들어있다. EmployeeDB.java 파일 1 import java.awt.*; 2 import java.awt.event.*; 3 import java.io.*; public class EmployeeDB extends Frame implements Ac (4 / 12) 오전 2:02:21

93 최종명님의자바강좌 자바입출력 ( 예제를통해본 ) 7 static final int NONE = 0; 8 static final int ADD = 1; 9 static final int TOTAL = 2; 10 static final int SEARCH = 3; 11 static final int REMOVE = 4; 12 static final int ESC = 5; 13 Panel left, bottom; 14 LabeledTextField name, number, dept, phone; 15 TextArea display; 16 Button addb, totalb, searchb, remove 17 Table table; 18 int action; public EmployeeDB() { 22 setlayout(new BorderLayout()); 23 action = NONE; 24 left = new Panel(); 25 bottom = new Panel(); 26 display = new TextArea(); 27 display.seteditable(false); 28 name = new LabeledTextField(" 이 름 "); 29 name.seteditable(false); 30 number = new LabeledTextField(" 사 번 "); 31 number.seteditable(false); 32 dept = new LabeledTextField(" 부 서 "); 33 dept.seteditable(false); 34 phone = new LabeledTextField(" 전화 "); 35 phone.seteditable(false); 36 left.setlayout(new GridLayout(4,1)); 37 left.setsize(400, 300); 38 left.add(name); 39 left.add(number); 40 left.add(dept); 41 left.add(phone); addb = new Button(" 추 가 "); 44 addb.addactionlistener(this); 45 addb.setactioncommand("add"); 46 totalb = new Button(" 전체 보기 "); 47 totalb.addactionlistener(this); 48 totalb.setactioncommand("total"); 49 searchb = new Button(" 검 색 "); 50 searchb.addactionlistener(this); 51 searchb.setactioncommand("search"); 52 removeb = new Button(" 삭 제 "); 53 removeb.addactionlistener(this); 54 removeb.setactioncommand("remove"); 55 escb = new Button(" 취 소 "); 56 escb.addactionlistener(this); 57 escb.setactioncommand("esc"); 58 exitb = new Button(" 종 료 "); 59 exitb.addactionlistener(this); 60 exitb.setactioncommand("exit"); 61 exitb.setbackground(color.red); 62 bottom.setlayout(new GridLayout(1,6)); 63 bottom.add(addb); 64 bottom.add(totalb); 65 bottom.add(searchb); 66 bottom.add(removeb); 67 bottom.add(escb); 68 bottom.add(exitb); (5 / 12) 오전 2:02:21

94 최종명님의자바강좌 자바입출력 ( 예제를통해본 ) add("center", display); 71 add("west", left); 72 add("south", bottom); table = new Table(); public void initialize() { 78 action = NONE; 79 addb.enable(); 80 totalb.enable(); 81 searchb.enable(); 82 removeb.enable(); 83 name.settext(""); 84 number.settext(""); 85 dept.settext(""); 86 phone.settext(""); 87 name.seteditable(false); 88 number.seteditable(false); 89 dept.seteditable(false); 90 phone.seteditable(false); public void actionperformed(actionevent e) { 94 int index = 0; 95 String cmd = e.getactioncommand(); 96 String namestring, num, part, tel; 97 boolean found = false; 98 String msg = ""; if(cmd.equals("add")) { 101 if(action!= ADD) { 102 action = ADD; 103 name.seteditable(true); 104 number.seteditable(true); 105 dept.seteditable(true); 106 phone.seteditable(true); 107 totalb.disable(); 108 searchb.disable(); 109 removeb.disable(); 110 return; namestring = name.gettext().trim(); 113 if(namestring == null namestring.len 114 return; 115 num = number.gettext().trim(); 116 if(num == null num.length() == 0) 117 return; 118 part = dept.gettext().trim(); 119 if(part == null part.length() == 0) 120 return; 121 tel = phone.gettext().trim(); display.settext(namestring + num + part 124 table.add(namestring, num, part, tel); 125 display.appendtext(" n 등록을 성공적으로 마쳤습니다. 126 initialize(); 127 else if(cmd.equals("total")) { 128 action = TOTAL; 129 initialize(); 130 index = table.getindex(); (6 / 12) 오전 2:02:21

95 최종명님의자바강좌 자바입출력 ( 예제를통해본 ) 131 display.settext(" n 검색 건수 : 총 " + Integ 132 display.appendtext (" n============================================"); 133 display.appendtext(" n 순번 t성명 t사번 134 display.appendtext (" n n n"); 135 if(index < 0) { 136 display.appendtext(" 등록된 자료가 없습니다. 137 return; for(int i = 0; i <= index; i++) { 140 Record rec = table.readrec(i); 141 msg = " " + Integer.toString(i+1) msg += rec.getname() + " t"; 143 msg += Integer.toString(rec.getNum 144 msg += rec.getpart() + " t"; 145 msg += rec.gettel() + " n"; 146 display.appendtext(msg); else if(cmd.equals("search")) { 149 if(action!= SEARCH) { 150 action = SEARCH; 151 name.seteditable(true); 152 addb.disable(); 153 totalb.disable(); 154 removeb.disable(); 155 return; Record rec; 158 index = table.getindex(); 159 namestring = name.gettext().trim(); 160 if(namestring == null namestring.len 161 return; 162 display.settext(" n ## 개인 조회 ########## 163 display.appendtext (" n============================================"); 164 display.appendtext(" n 순번 t성명 t사번 165 display.appendtext (" n n n"); 166 for(int i = 0; i <= index; i++) { 167 rec = table.readrec(i); 168 if(namestring.equals(table.readname 169 found = true; if(found) { 172 msg = " " + Integer.toString(i+ 173 msg += rec.getname() + " t"; 174 msg += Integer.toString(rec.ge 175 msg += rec.getpart() + " t"; 176 msg += rec.gettel() + " n"; 177 display.appendtext(msg); 178 msg = ""; 179 break; if (!found) { 183 display.settext(" 조회하신 성명이나 사번의 직원 initialize(); 186 else if(cmd.equals("remove")) { 187 if(action!= REMOVE) { 188 action = REMOVE; (7 / 12) 오전 2:02:21

96 최종명님의자바강좌 자바입출력 ( 예제를통해본 ) 189 name.seteditable(true); 190 addb.disable(); 191 totalb.disable(); 192 searchb.disable(); 193 return; index = table.getindex(); 196 namestring = name.gettext().trim(); 197 if(namestring == null namestring.len 198 return; 199 display.settext(" n ## 삭제 ########### n 200 display.appendtext (" n============================================"); 201 display.appendtext(" n 순번 t성명 t사번 202 display.appendtext (" n n n"); 203 for(int i = 0; i <= index; i++) { 204 Record rec = table.readrec(i); 205 if(namestring.equals(table.readname 206 found = true; if(found) { 209 msg = rec.getname(); 210 msg += Integer.toString(rec.get 211 msg += rec.getpart(); 212 msg += rec.gettel(); 213 display.appendtext(msg); 214 msg = ""; 215 found = true; 216 display.appendtext(" n 위의 자료를 삭 217 for(int j=i+1; j <= index; j++) 218 rec = table.readrec(j); 219 table.writerec(rec.getname( table.remove(--index); 222 break; if(!found) { 226 display.appendtext(" 조회하신 성명의 직원이 없 initialize(); 229 else if(cmd.equals("esc")) { 230 action = NONE; 231 initialize(); 232 else if(cmd.equals("exit")) { 233 table.close(); 234 setvisible(false); 235 dispose(); 236 System.exit(0); class Table { 243 private RandomAccessFile myrafile; 244 private int recordcount; 245 private int recordlength = 50; 246 private int recordoffset = 4; public Table() { (8 / 12) 오전 2:02:21

97 최종명님의자바강좌 자바입출력 ( 예제를통해본 ) 249 try { 250 myrafile = new RandomAccessFile("em 251 if(myrafile.length() ==0) { 252 recordcount = -1; 253 else { 254 recordcount = myrafile.readint( catch(ioexception e) { 257 System.out.println("Can't access em public int getindex() { 263 return recordcount; public void add(string name, String num, St 267 writerec(name, Integer.parseInt(num), p public void close() { 271 try { 272 myrafile.close(); 273 catch(ioexception ioe) { 274 System.out.println("IOException dur public Record readrec(int index) { 279 String name="", part="", tel="" ; 280 int num = -1 ; try { 283 myrafile.seek(index * recordlength 284 for(int i = 0; i < 5;i++) { 285 name += myrafile.readchar(); num = myrafile.readint(); 288 for(int i = 0; i < 6;i++) { 289 part += myrafile.readchar(); for(int i = 0; i < 8;i++) { 292 tel += myrafile.readchar(); catch(ioexception ioe) { 296 System.out.println("IOException dur return (new Record(name, num, part, tel public String readname(int index, int len) 302 String name=""; 303 try { 304 myrafile.seek(index * recordlength 305 for(int i = 0; i < len;i++) { 306 name += myrafile.readchar(); catch (IOException ioe) { 309 System.out.println("IOException :" (9 / 12) 오전 2:02:22

98 최종명님의자바강좌 자바입출력 ( 예제를통해본 ) 311 return (name); public void remove(int i) { 316 recordcount = i; public void writerec(string name, int num, 321 int len = 0; try { 324 myrafile.seek(index * recordlength 325 len = name.length(); 326 for(int i =0;i < 5;i++) { 327 myrafile.writechar((i < len? n myrafile.writeint(num); len = part.length(); 332 for(int i =0;i < 6;i++) { 333 myrafile.writechar((i < len? p len = tel.length(); 337 for(int i =0;i < 8;i++) { 338 myrafile.writechar((i < len? t myrafile.seek(0); 341 myrafile.writeint(recordcount); 342 catch(ioexception ioe) { 343 System.out.println("IOException whi class Record { 351 private String name; 352 private int num; 353 private String part; 354 private String tel; public Record(String na, int n, String p, S 357 name = na; 358 num = n; 359 part = p; 360 tel = t; public String getname() { 364 return(name); public int getnum() { 368 return(num); public String getpart() { (10 / 12) 오전 2:02:22

99 최종명님의자바강좌 자바입출력 ( 예제를통해본 ) 372 return(part); public String gettel() { 376 return(tel); public static void main(string agrs[]) { 381 EmployeeDB db = new EmployeeDB(); 382 db.setsize(550, 300); 383 db.setvisible(true); LabeledTextField.java 파일 1 import java.awt.*; 2 3 public class LabeledTextField extends Panel{ 4 private Label label; 5 private TextField field; 6 private String labelposition; 7 private String fieldposition; 8 9 public LabeledTextField(String labelstring) { 10 this(labelstring, "1%, 5%, 25%, 95%", "27%, public LabeledTextField(String labelstring, Str 15 super(); 16 setlayout(new PositionLayout()); 17 this.labelposition = labelposition; 18 this.fieldposition = fieldposition; 19 label = new Label(labelString); 20 field = new TextField(20); 21 add(labelposition, label); 22 add(fieldposition, field); public String gettext() { 26 return field.gettext(); public void settext(string m) { 30 field.settext(m); public void seteditable(boolean t) { 34 boolean able = field.iseditable(); 35 if(t!= able) 36 field.seteditable(t); public static void main(string args[]) { 40 Frame f = new Frame(); 41 LabeledTextField lt = new LabeledTextField( 42 f.add("south", lt); 43 f.setsize(400, 200); 44 f.setvisible(true); 45 (11 / 12) 오전 2:02:22

100 최종명님의자바강좌 자바입출력 ( 예제를통해본 ) 46 결과 % java EmployeeDB 설명 250 myrafile = new RandomAccessFile("em employee.db 파일을읽기 / 쓰기로오픈한다. 251 if(myrafile.length() ==0) { 파일의길이가 0 이면, 즉파일에내용이없으면 recordcount = myrafile.readint( 파일로부터정수를하나읽어온다. 283 myrafile.seek(index * recordlength 입출력포인터를특정위치로이동시킨다. 327 myrafile.writechar((i < len? n 문자를파일에기록한다. (12 / 12) 오전 2:02:22

101 Language=VBScript %> 색 색 / 폰트 / 커서 - 최종명 java.awt.color 클래스는프로그래머가많이사용하는색은상수로만들어놓고, 많이사용되지않는색은 RGB 값을이용해서만들어사용하도록하고있다. Color 클래스의상수로정의된색 Color.black Color.green Colo Color.blue Color.lightGray Colo Color.cyan Color.magenta Colo Color.darkGray Color.orange Color.gray Color.pink Color 클래스의상수를이용하지않는경우에는여러형태의생성자를이용해서원하는색을사용할수있다. new Color(int r, int g, int b); r, g, b 는 0 ~ 255 사이의값을갖는다. new Color(float r, float g, float b) r, g, b 는 0.0 ~ 1.0 사이의값을갖는다. 폰트 자바에서는모든시스템에서사용될만한대표적인폰트를자바독자적인이름을붙여서사용하고있다. 폰트는다음과같은생성자를이용해서만들어사용할수있다. new Font(String fontname, int style, int si 다음표는자바에서사용되는폰트이름들이다. 자바 폰트 이름 X 윈도우폰트이름 윈도우즈폰트이름 Helvetica adobe-hevetica Arial TimesRoman adobe-times Times New Roman Courier adobe-courier Courier New Dialog b&h-lucida MS Sans Serif DialogInput b&h-lucidatypewriter MS Sans Serif ZapfDingbats itc-zapfdingbats WingDings default misc-fixed Arial 다음표는폰트의스타일을나타낸다. (1 / 5) 오전 2:03:15

102 Font 클래스상수 스타일 Font.PLAIN 일반문자 Font.ITALIC 이탤릭체 Font.BOLD 볼드체 Font.BOLD+Font.ITALIC 이탤릭볼드체 마우스 커서 마우스커서는프레임에서 setcursor(int cursortype) 메소드를이용해서변경다음은자바에서지원하는마우스커서들이다. Frame.DEFAULT_CURSOR Frame.S_RESIZE_CURSOR Frame.CROSSHAIR_CURSOR Frame.E_RESIZE_CURSOR Frame.TEXT_CURSOR Frame.W_RESIZE_CURSOR Frame.WAIT_CURSOR Frame.NE_RESIZE_CURSOR Frame.HAND_CURSOR Frame.NW_RESIZE_CURSOR Frame.MOVE_CURSOR Frame.SE_RESIZE_CURSOR Frame.N_RESIZE_CURSOR Frame.SW_RESIZE_CURSOR AppletMenu.java 파일 1 import java.awt.*; 2 import java.applet.*; 3 4 public class AppletMenu extends Applet { 5 Panel bottom; 6 Button ok, cancel; 7 Component c; 8 9 public void init() { 10 setbackground(color.white); 11 MenuBar menubar = new MenuBar(); 12 Menu menu = new Menu("File"); (2 / 5) 오전 2:03:15

103 ((Frame)c).setCursor(Frame.WAIT_CURSOR); 56 return t 13 Menu submenu1 = new Menu("Open"); 14 MenuItem item1 = new MenuItem("File 15 MenuItem item2 = new MenuItem("URL" 16 submenu1.add(item1); 17 submenu1.add(item2); 18 menu.add(submenu1); Menu submenu2 = new Menu("Save As") 21 MenuItem item3 = new MenuItem("text 22 MenuItem item4 = new MenuItem("html 23 subsubmenu2.add(item3); 24 submenu2.add(item4); 25 menu.add(submenu2); 26 menubar.add(menu); c = this; 29 while (c!= null &&!(c instanceof 30 c = c.getparent(); ((Frame)c).setMenuBar(menubar); bottom = new Panel(); 35 ok = new Button("OK"); 36 cancel = new Button("CANCEL"); 37 bottom.add(ok); 38 bottom.add(cancel); 39 setlayout(new BorderLayout()); 40 add("south", bottom); public void paint(graphics g) { 44 Color fg = new Color(123, 230, 10); 45 g.setcolor(fg); 46 g.drawrect(25, 25, 100, 100); 47 Font fn = new Font("Helvetica", Font 48 g.setfont(fn); 49 g.drawstring("hello", 30, 150); public boolean mousemove(event e, int x, 53 if(25 <= x && x <="125" && 25 <="y" { 60 ((Frame)c).setCursor(Frame.DEFAULT_CURSOR); 결과 % appletviewer AppletMenu.html (3 / 5) 오전 2:03:15

104 % netscape 설명 10 setbackground(color.white); Color 클래스의상수를이용해서애플릿의배경을바꿀수있다. (4 / 5) 오전 2:03:15

105 11 MenuBar menubar = new MenuBar(); 애플릿에붙일메뉴바를만든다. 28 c = this; 29 while (c!= null &&!(c instanceof 30 c = c.getparent(); ((Frame)c).setMenuBar(menubar); 메뉴바는 프레임에만붙일수있다. 그러나애플릿에는프레임이없기때문에편법을사용해서 메뉴바를 붙일 수 있다. 애플릿을보기위한애플릿뷰어나웹브라우저는프레임이라는것을이용해 프레임을 얻어낸다. 얻어낸프레임을이용해서메뉴바를붙인다. 그러나, 넷스케입으로보는경우 메뉴바가 잘 나타나지않는것에주의하라. 44 Color fg = new Color(123, 230, 10); 상수가아닌 R, G, B 값을이용해서 Color 클래스를만들수있다. 47 Font fn = new Font("Helvetica", Font 원하는폰트를 만들어사용할수있다. 55 ((Frame)c).setCursor(Frame.W 프레임을이용해서커서의모양을변경할수있다. (5 / 5) 오전 2:03:15

106 최종명님의자바강좌 19 - JAVA CGI #1 <%@ Language=VBScript %> 자바와 CGI - 글 & 코딩 : 최종명 자바 CGI C, Perl 언어를 이용해서 CGI 응용 프로그램을 나드는 것처럼, 자바를 이용해서 CGI 응용프 바를이용해서 CGI 응용 프로그램을 작성하기 위해서는 Durante 가 작성한 cgi_lib 클래 음에나와 있는 cgi_lib 클래스는 Durante 가 작성한 코드에서 "'" 문자를사용하지못 이다. cgi_lib.java 파일 1 import java.util.*; 2 import java.io.*; 3 4 class cgi_lib { 5 6 public static Hashtable ReadParse(InputStream 7 Hashtable form_data = new Hashtable(); 8 9 String inbuffer = ""; if (MethGet()) { 12 inbuffer = System.getProperty("c 13 else { 14 DataInput d = new DataInputStream(inS 15 String line; 16 try { 17 while((line = d.readline())!= nu 18 inbuffer = inbuffer + line; catch (IOException ignored) { StringTokenizer pair_tokenizer = new Stri while (pair_tokenizer.hasmoretokens()) { 27 String pair = pair_tokenizer.nexttoke 28 StringTokenizer keyval_tokenizer = ne 29 String key = new String(); 30 String value = new String(); 31 if (keyval_tokenizer.hasmoretokens()) 32 key = urldecode(keyval_tokenizer.ne 33 else { 34 System.out.println("cgi_lib er if (keyval_tokenizer.hasmoretokens()) 37 value = urldecode(keyval_tokenizer. 38 else { 39 System.out.println("cgi_lib er 40 (1 / 21) 오전 2:04:24

107 최종명님의자바강좌 19 - JAVA CGI #1 41 form_data.put(key,value); return form_data; public static String urldecode(string cgi_msg) 48 String msg = ""; cgi_msg = cgi_msg.replace('+', ' '); 51 int len = cgi_msg.length(); 52 char c; 53 for(int i=0; i<len; i++) { 54 c="cgi_msg.ch c="(char)" Integer.parseInt(cgi_msg.substring(i+1, i+3) return msg; public static String Header() { charset="ks_c_5601_1987 n n";" public s Top="new" String(); 70 Top="<html> n" ; 71 Top+=" 73 Top+="Title;" 74 Top+=" n" ; 75 Top+="</title> +="<body> n" ; return Top; publi n</html> n"; public static boolean MethGet() { 87 String RequestMethod = System.getProperty( 88 boolean returnval = false; if (RequestMethod!= null) { 91 if (RequestMethod.equals("GET&quo 92 RequestMethod.equals("get&quo 93 { 94 returnval=true; return returnval; public static boolean MethPost() { 101 String RequestMethod = System.getProperty( 102 boolean returnval = false; if (RequestMethod!= null) { 105 if (RequestMethod.equals("POST&qu 106 RequestMethod.equals("post&qu 107 { 108 returnval=true; return returnval; public static String MyBaseURL() { 115 String returnstring = new String(); 116 returnstring = " System.getProperty("c 118 if (!(System.getProperty("cgi.server (2 / 21) 오전 2:04:24

108 최종명님의자바강좌 19 - JAVA CGI #1 119 returnstring += ":" + Syste 120 returnstring += System.getProperty(" return returnstring; public static String MyFullURL() { 126 String returnstring; 127 returnstring = MyBaseURL(); 128 returnstring += System.getProperty(" 129 String querystring = System.getProperty(& 130 if (querystring.length() > 0) 131 returnstring += "?" + querys 132 return returnstring; public static String Environment() { 136 String returnstring; returnstring = "<dl compact> n" 139 returnstring += "<dt><b>content_type 140 System.getProperty(" 141 "</i>:<br> n"; 142 returnstring += "<dt><b>content_leng 143 System.getProperty(" 144 "</i>:<br> n"; 145 returnstring += "<dt><b>request_meth 146 System.getProperty(" 147 "</i>:<br> n"; 148 returnstring += "<dt><b>query_string 149 System.getProperty(" 150 "</i>:<br> n"; 151 returnstring += "<dt><b>server_name< 152 System.getProperty(" 153 "</i>:<br> n"; 154 returnstring += "<dt><b>server_port< 155 System.getProperty(" 156 "</i>:<br> n"; 157 returnstring += "<dt><b>script_name< 158 System.getProperty(" 159 "</i>:<br> n"; 160 returnstring += "<dt><b>path_info</b 161 System.getProperty(" 162 "</i>:<br> n"; return returnstring; public static String Variables(Hashtable form 170 String returnstring = "<dl compact> for (Enumeration e = form_data.keys() ; e 173 String key = (String)e.nextElement(); 174 String value = (String)form_data.get( 175 returnstring += "<dt><b>" + (3 / 21) 오전 2:04:24

109 최종명님의자바강좌 19 - JAVA CGI #1 176 value + "</i>:<b returnstring += "</dl> n"; 180 return returnstring; public static void main( String args[] ) { 184 System.out.println(Header()); 185 System.out.println(HtmlTop("Hello Wo 186 System.out.println("<hr>"); if (MethGet()) 189 System.out.println("REQUEST_METH 190 if (MethPost()) 191 System.out.println("REQUEST_METH 192 System.out.println("<hr>"); System.out.println("Base URL: " 195 System.out.println("<hr>"); System.out.println("Full URL: " 198 System.out.println("<hr>"); System.out.println(Environment()); 201 System.out.println("<hr>"); Hashtable form_data = ReadParse(System.in System.out.println(Variables(form_data)); 206 System.out.println("<hr>"); String name = (String)form_data.get(&quot 209 System.out.println("Name=" + na 210 System.out.println("<hr>"); System.out.println(HtmlBot()); 이 cgi_lib 클래스를이용해서 "Hello World" 를출력하는간단한 CGI 프로그램을작자바를 CGI 로이용하기위해서는원하는작업을수행하는자바클래스와웹서버의요청에의해서자바클래스를실행시키는부분이필요하다. 우선적으로 "Hello World" 를출력하는자바클래스를만들어보자. HelloCGI.java 파일 1 public class HelloCGI { 2 public static void main(string agrs[]) { 3 System.out.println(cgi_lib.Header()); 4 System.out.println("Hello World"); 5 System.out.println(cgi_lib.HtmlBot()); (4 / 21) 오전 2:04:24

110 최종명님의자바강좌 19 - JAVA CGI #1 HelloCGI.java 파일을작성한뒤에 javac 를이용해서컴파일한다. 이제는웹서버가요청 HelloCGI 클래스를실행시켜줄프로그램이필요하다. 이러한구동프로그램은보통간단한쉘스이용하는것이보통이다. HelloCGI 클래스를구동시키는쉘스크립트를 javacgi.pl 이라 javacgi.pl 파일 1 #!/bin/sh 2 /usr/local/java/bin/java 3 -Dcgi.content_type=$CONTENT_TYPE 4 -Dcgi.content_length=$CONTENT_LENGTH 5 -Dcgi.request_method=$REQUEST_METHOD 6 -Dcgi.query_string=$QUERY_STRING 7 -Dcgi.server_name=$SERVER_NAME 8 -Dcgi.server_port=$SERVER_PORT 9 -Dcgi.script_name=$SCRIPT_NAME 10 -Dcgi.path_info=$PATH_INFO 11 HelloCGI 결과 CGI를지원하는웹서버에서 javacgi.pl 파일을 웹브라우저를 이용해 방문한다 정보검색 과학논문을검색하기위해 1940 년대부터발달하기시작한정보검색은, 대학교 / 연구소 / 도서관등엄청난문서들속에서원하는정보를검색하도록도와주고있다. 또한정보검색은인터넷이발달하면서그중요성은더욱가중되고있다. 정보검색은사용자의질의어에매치되는적절한문서들을사용자에게제공하는역할을한다. 다음그림은일반적인정보검색시스템의작업을보여준다. 인터넷서치엔진경우에는인터넷에서문서들을가져올수도있을것이다. 문서들은문서번호를부여받고, 문서의내용단어로처리된다. 각단어들은불용어처리단계를거치면불용어들이제거되고의미있는단어들만남게된다. 불용어란전치사, 관사등많이사용되지만정보검색에서별로의미가없는단어를말한의미있는단어들은다시어근처리단계를거쳐어근형태로가중치값을가지고데이타베이스에저장된다. 데이타베이스는꼭 DBMS 일필요는없다. 데이타베이스는역파일 (invert 시그니쳐 (signiture), 팻트리 (Pat trees), 그래프, 해슁등의형태로저장될수있 (5 / 21) 오전 2:04:24

111 최종명님의자바강좌 19 - JAVA CGI #1 관한자세한내용은 Williams B. Frakes의 "Information Retrieval D 참조하기바란다. (6 / 21) 오전 2:04:24

112 최종명님의자바강좌 19 - JAVA CGI #1 이장에서는정보검색에서가장간단한역파일을만들어서사용자의질의어에맞는정보를추출하는방법을알아보자. 문서번호가할당된여러개의문서들이있고, 각문서에키워드들이있다고가정하각키워드는소속된문서번호정보를가지고있다. 키워드를알파벳순으로정렬하면사용자질의어에따라키워드만찾으면키워드가소속된문서를쉽게찾을수있다. 이알파벳순으로정렬된키워드파일을역파일이라고한다. 역파일은배열 /B 트리 /trie/ 해슁구조등다양한자료구조를이용해작성할수있다. 이곳에서는배열을이용하는방법을알아보자. 배열을이용해서역파일을만드는절차는다음그림과같다. 먼저입력된파싱과정을통해문서는문서에서위치에따라단어의연속으분리된다. 파싱과정을통과한단어는문서내에서단어의위치순으로정렬되어있다. 이것을역파일로만들기위해서는단어의알파벳순으로정렬해야한다. 정렬과정을통과한단어들은중요도에따라가중치값을갖을수있다. 배열을이용해서역파일을효과적으로만드는방법이버지니아공대에서 Edward A. Fox 에의 FAST-INV 라불리는알고리즘이개발되었다. 각페이지의중요한단어들은컨섭넘버 (concep 라는유일한번호로표현된다. FAST-INV 의입력은문서번호와문서에포함된컨셉넘버의쌍으로된도규먼트벡터파일 (document vector file) 이다. 도큐먼트벡터파일은컨셉넘버있다. HCN 은컨셉넘버에서가장큰수라고정의하자. 다음그림은 FAST-INV 가작동하는모그림으로보여주고있다. (7 / 21) 오전 2:04:24

113 최종명님의자바강좌 19 - JAVA CGI #1 FAST-INV 는도큐먼트벡터파일을입력으로받아서 Preparation 단계를거쳐 LOADT 만든다. Preparation 단계는다음과절차를수행된다. 1. HCN 크기의 cont_entries_cnt[] 배열을만들고값을모두 0 으로 2. 도큐먼트벡터파일에서이나올때마다, con_entries_cnt[cont 증가시킨다. (8 / 21) 오전 2:04:24

114 최종명님의자바강좌 19 - JAVA CGI #1 3. con_entries_cnt[] 배열을 CONPTR 파일에저장한다. 4. 적당한크기의로드를결정하고, LOADTABLE 파일을작성한다. 적당한로드한번에처리될만큼의데이타양이다. 그림에서는로드의크기를 4,3,3 으로 Preparation 단계의산출물인 LOADTABLE 은 Splitting 단계를거쳐 DVL 파각로드마다의쌍을갖는파일이다. Inverting 단계에서는 DVL 파일과 LOADTABLE, CONPTR 파일을이용해서각로드별로컨셉넘버순으로정렬이된역파일 (INVERT) 을생성한다 FAST-INV 알고리즘이작동되는방법을살펴보았으니, 이제도큐먼트벡터파일을작성하는방법을알아보자. 도큐먼트벡터파일은 perl 언어를이용한 dvf 라는프로그램을통해서만들수있다. dvf 는문서를읽고단어를추출해서 common_word 라는파일에기록된불용어인가를판단해서불용어가아닌경우에 ndbm 파일에 < 단어, 컨셉넘버 > 데이타베이스를만든다. dvf 는또한도큐먼트벡터파일을만들어서의데이터를저장한다. dvf 파일 1 #!/usr/local/bin/perl 2 3 # 4 # Read a series of documents (separated by newl 5 # database, split each document into words, r 6 # (specified in the stoplist), assign a uniqu 7 # word (if an identifier has not already been 8 # the (word, identifier) pair to an ndbm file 9 # (document, word id) pairs in binary, intege 10 # 11 # 12 # Usage: dvf <document database filename> 13 # <common words filename> 14 # <ndbm file name> 15 # <dvf file name> 16 # $docdatabase = $ARGV[0]; 19 $commonwords = $ARGV[1]; 20 $dbmfile = $ARGV[2]; 21 $dvffile = $ARGV[3]; # 25 # Subroutine used for comparisons in sort 26 # 27 sub numerically { $a <=> $b; # 32 # Read the stoplist into an associative array 33 # 34 open(commonwords, $commonwords) die("er n"); while ($word = <commonwords>) 37 { 38 $word =~ s/ s+//g; 39 $common{$word = $word; (9 / 21) 오전 2:04:24

115 최종명님의자바강좌 19 - JAVA CGI #1 42 close(commonwords); # 46 # Set the record separator to " n n". 47 # an entire document at a time. 48 # 49 $/ = " n n"; # 53 # Open the document database 54 # 55 open(docdatabase, "<$docdatabase") die( 58 # 59 # Open the DVF output file 60 # 61 open(dvf, "> file n"); # 64 # Open the ndbm file and bind it to the associa 65 # 66 dbmopen(%db, $dbmfile, 0666); # Write a dummy HCN as first integer in the fil 70 $hcn = 0; 71 print(dvf pack("i", $hcn)); # 75 # Read a document, split it into individual wor 76 # words, and save it to the dbm file if it is 77 # 78 $docid = 0; 79 $uniqueid = 0; while ($doc = <docdatabase>) 82 { 83 # translate all characters to lower case 84 $doc =~ tr/a-z/a-z/; # remove all HTML commands 87 $doc =~ s/<[^>]*>//g; # remove the whitespace at the beginning of 90 $doc =~ s/^ W+//; # perform the split and process each word = split(/ W+/, $doc); 94 foreach $word (@doc) 95 { 96 if ((!defined($common{$word)) && ( 97 { 98 $DB{"$word" = pack("i&q print("adding: $word (id = $unique (10 / 21) 오전 2:04:24

116 최종명님의자바강좌 19 - JAVA CGI #1 101 $uniqueid++; if (!defined($common{$word)) 105 { + 1] = unpack("i", # Sort and write the dvf file for this docu = 112 foreach $element (@dvf) 113 { 114 print(dvf pack("i", $docid)); 115 print(dvf pack("i", $element)); print("<$docid, $element> n"); $docid++; = (); 122 print(" # 127 # Write the real HCN in the first integer of th 128 # 129 $uniqueid--; 130 seek(dvf, 0, 0); 131 print(dvf pack("i", $uniqueid)); 132 print(" n nhcn = $uniqueid n"); # 135 # Close the files 136 # 137 dbmclose(db); 138 close(dvf); 139 close(docdatabase); % dvf documents common_words documents documents.dvf % ls common_words documents documents.dir documents. dbm 은 유닉스에서 제공되는 key/content 의 쌍으로 되어 있는 데이타 베이스로서키값을 값을가져올수있는 일련의 라이브러리 함수들이다. dbm을 이용해서 데이타 베이스를만들면.dir 파일과.pag 파일이 생성된다. dbm 에 관련된 간단한 프로그램 소개는이장의마지막 소개하도록하자. 이제도큐먼트벡터파일이만들어졌으니 FAST-INV 알고리즘을이용해서역파일 (INVERT) 을만들어보자. 다음의 FastInv.java 파일은도큐먼트벡터파일을입력으로받아서 CONPT LOADTABLE, INVERT 파일을만드는프로그램이다. (11 / 21) 오전 2:04:24

117 최종명님의자바강좌 19 - JAVA CGI #1 FastInv.java 파일 1 import java.util.*; 2 import java.io.*; 3 4 public class FastInv { 5 final int DEBUG_DVF = 0; 6 final int DEBUG_CONPTR = 1; 7 final int DEBUG_LOADTABLE = 1; 8 final int DEBUG_DVL = 1; 9 final int DEBUG_IN = 1; 10 RandomAccessFile dvf; 11 RandomAccessFile LOADTABLE; 12 RandomAccessFile CONPTR; 13 RandomAccessFile DVL; 14 RandomAccessFile INV; 15 int hnc = 0; // total # of concepts 16 int start = 0; // start concept # (used i 17 int end = 0; // end concept # (used in 18 int loadsize = 10; // load file size 19 int loadnum = 0; 20 int cntptr[], conoffset[]; 21 String dvfname = null; public FastInv(String s) { 24 try { 25 dvf = new RandomAccessFile(s, &quot 26 dvfname = s; 27 catch(ioexception e) { System.out.pri 28 prepare(); 29 splitninvert(); public void prepare() { 34 int doc; 35 int con; try { 38 hnc = dvf.readint(); 39 if(debug_dvf!= 0) 40 System.out.println("HNC:&q 41 cntptr = new int[hnc+1]; 42 conoffset = new int[hnc+1]; 43 for(int i=0; i <= hnc; i++) 44 cntp ((doc="dvf.readint())"!="-1)" { 48 con="dvf.readint(); 되는내용 삭제 50 if(debug_dvf!="0)" { 51 System.out.print(" +">"); cntptr[con]++; 55 olddoc = doc; 56 oldcon = con; catch(ioexception e) { ; 60 (12 / 21) 오전 2:04:24

118 최종명님의자바강좌 19 - JAVA CGI #1 ("CONPTR: t"+i+" t"+offset+" t"+cntptr[i]+" t"+ loadnum 61 // cntptr[] 테스트 62 if(debug_conptr!= 0) 63 for(int i=0; i <= hnc; i++) 64 Syst CONPTR & Load Table 만들기 67 int offset="0;" 68 loadnum=" cono="0;" // # of occurrence of concepts 71 try { 72 CO 73 LOADTABLE="new" RandomAccessFile("LOADTABLE", "rw"); { 76 // CONPTR 만들기 77 loadnum="(int)i/loadsize;" 78 if( CONPTR.writeInt(offset); // Offset 82 CONPTR.writeInt(c writeint(loadnum); // Load Number 84 conoffset[i]="offs +="cntptr[i];" 86 cono +="cntptr[i];" // LoadTabl 0)) (i="=" hnc)) { 90 if(i="=" hnc) { 91 end="i;" 92 c conn="end" start + 1; 96 if(debug_loadtable!="0)" 97 S +" t"+start+" t"+end+" t"+conn+" t "+cono); 98 LOADTABL writeint(start); 100 LOADTABLE.writeInt(end); 101 LOADT writeint(cono); 103 start="end+1;" 104 cono="cntptr[i]; finally { 109 try { 110 CONPTR.close(); 111 LOADTABLE.c (IOException e) { ; publi docn="-1;" 122 try { 123 INV="new" RandomAccessFile("IN RandomAccessFile("DVL", "rw"); 125 LOADTABLE="new" Rand catch(ioexception ioe) { System.out.println("118"); 1 println(" ndoc Vectors Loads Files: <doc#, con#>") int ntuple = 0; 133 int countingtuple = 0; 134 int dvlincore[][]; try { 137 for(int i=0; i <= loadnum; i++) { / number를읽는다. 139 start="loadtable.readint();" // start readint();" // end concept # 를 읽는다. 141 LOADTABLE.readIn ntuple="loadtable.readint();" // 튜플의 갯수를 읽는다. 143 dvlin DVL 파일 in-core 버전 144 dvf.readint(); // HNC를 읽는다 println("load Number: t"+ i+" t:"+ ntuple+" tuples"); 1 olddoc="-1;" 152 int oldcon="-1;" // DVL 파일만들기 1)" { 156 conn="dvf.readint();" 157 if(((start <="conn) (oldcon"!="conn)))" { 158 if(debug_dvl!="0)" { 159 Sy +">"); DVL.writeInt(docN); 162 DVL.writeInt(conN); 163 dvlincore[countingt 164 dvlincore[countingt 165 countingtuple++; if(countingtuple == ntu 169 break; 170 olddoc = docn; 171 oldcon = conn; // END of WHILE 174 catch (IOException ioe) { ; (13 / 21) 오전 2:04:24

119 최종명님의자바강좌 19 - JAVA CGI #1 176 if(debug_dvl!= 0) 177 System.out.println(" & // Inverted File 만들기 180 int kk = 0; 181 int inv[][] = new int[ntuple][ 182 int startoffset = conoffset[sta 183 while(kk <countingtuple) { //System.out.print("start: "+start+" tconoffset["+c startoffset)+"]: t"+c); 187 //System.out.println(","+d) [conoffset[c]-startoffset][1]="d;" 190 conoffset[c]++; (" nend of LOAD: " + i +": t"+kk+" items n"); f 장한다. 196 INV.writeInt(inv[hh][0]); 197 INV.writeInt(inv ="0)" { 201 countingtuple="kk;" 202 kk="0;" 203 while(k ["+(kk+start)+"]: t"+inv[kk][0] +", "+inv[kk][1]); dvf.seek(0); 211 // End of FOR LOADTA 216 INV.close(); 217 catch (IOException e){ System.ou main(string[] args) { 221 FastInv p="new" FastInv(args[ % java FastInv documents.dvf % ls CONPTR DVL INVERT LOADTABLE... 이제역파일을만들었으니 사용자 질의어를 받아서 정보를 검색하는프로그램을 만들어야겠다. 역파일을 이용해서 키워드가 속한 문서를 찾기 위해서는 다음 그림과 같은 절차의 작업이 필요하다. 사용자의질의어는토큰으로분리되서각각 dbm 파일에서단어에해당되는컨셉넘버를받아온다. CONPTR 파일은컨셉넘버순으로정렬되어있기때문에컨셉넘버를알면쉽게 offset 을알 (14 / 21) 오전 2:04:24

120 최종명님의자바강좌 19 - JAVA CGI #1 offset 은컨셉넘버가역파일 (INVERT) 에존재하는위치를가리킨다. offset 을이용해내용을읽으면키워드가속한문서들의번호를알수있다. 문서의번호를안다음에는각문서의시작위치를.ind 파일에서알아보아야한다. 다음은.ind 파일을만드는 perl 프로그램이다. makeindex 파일 1 #!/usr/local/bin/perl 2 3 # 4 # Creates a binary index for the document datab 5 # two carriage returns. 6 # 7 # usage: makeindex infile outfile 8 # $sizeofint = 4; $/ = " n n"; $infile 17 $outfile print("infile = $infile n"); 20 print("outfile = $outfile n"); open(infile, "$infile"); 23 open(outfile, ">$outfile"); $currentpos = 0; 26 while ( $line = <infile> ) 27 { 28 print("line = $line"); 29 print(outfile pack("i", $currentp 30 $currentpos += length($line); print(outfile pack("i", $currentpos)) close(outfile); 36 close(infile); % makeindex documents documents.ind 다음은.ind 파일의 내용을 확인하는 perl 프로그램이다. readindex 파일 1 #!/usr/local/bin/perl 2 3 # 4 # Reads the document database index file. 5 # 6 # Usage: readindex <index> 7 # (15 / 21) 오전 2:04:24

121 최종명님의자바강좌 19 - JAVA CGI #1 8 9 $sizeofint = 4; 10 $filename open(index, $filename) die("couldn't op $docnum = 0; 16 while(read(index, $byteoffset, $sizeofint)) 17 { 18 $byteoffset = unpack("i", $byteoffs print("document $docnum begins at byte $ 21 $docnum++; 22 다음은질의어토큰을잘라서정보를검색하는프로그램이다. dbm 파일을접근하기위해서네이티브메소드를사용했다. getquery.java 파일 1 import java.util.*; 2 import java.io.*; 3 4 class getquery { 5 6 public native int lookupconceptword(string 7 8 static { 9 System.loadLibrary("lookup"); public getquery() { public static void main( String args[] ) 17 { 18 getquery q = new getquery(); 19 int id = -1, offset = 0; 20 int numofdoc = 0; // 도큐먼트의 갯수 21 int docnum = -1; // 도큐먼트 번호 22 int docbase = -1; // 도큐먼트의 시작 주소 23 int len = 0; // 도큐먼트의 길이 24 Date date = null; 25 Date date2 = null; 26 long timeold = 0; 27 long timenew = 0; 28 int base[] = new int[15]; 29 int doclist[] = new int[14]; 30 Vector tokenlist = new Vector(); 31 RandomAccessFile CONPTR = null; 32 RandomAccessFile INV= null; 33 RandomAccessFile IND= null; (16 / 21) 오전 2:04:24

122 최종명님의자바강좌 19 - JAVA CGI #1 String query_field="(string)form_data.get("query_f 34 RandomAccessFile DOC= null; 35 try { 36 CONPTR = new RandomAccessFile("CON 37 INV= new RandomAccessFile("INVERT& 38 IND= new RandomAccessFile("documen 39 DOC= new RandomAccessFile("documen 40 for(int i =0; i <base.length; i++) 41 b date="new" Date(); 45 timeold="date.gettime();" System.out.println(cgi_lib.Header()); 50 Hashtabl bgcolor="#ffffff">"); if(query_field == null) { 56 System.out.println("There is no Qu 57 System.out.println(cgi_lib.HtmlBot()); 58 System.exit(0); StringTokenizer st = new StringTokenizer(qu 62 String token = null; 63 System.out.println("<table border="1"> +"</tr></table>"); System.out.println("<table>"); 66 while(st.hasmoretokens()) { 67 token = st.nexttoken(); 68 tokenlist.addelement(token); 69 id = q.lookupconceptword("document 70 if(id <0) { 71 System.out.print("<br>&q 72 continue; try { 75 CONPTR.seek(id*4*4+4); 76 offset = CONPTR.readInt(); 77 numofdoc = CONPTR.readInt(); 78 System.out.print("<tr bgcolor= #"+id+"<td># of Docs<td>"+numOfDoc); 79 INV.seek(offset*4*2+4); 80 docnum = INV.readInt(); 81 doclist[docnum] = 1; 82 for(int i = 1; i <numofdoc; i++) { [docnum]="1;" catch(ioexception ioe) { System print("</tr>"); System.out.print("</table><hr>"); for(int i=0; i<14; i++) { 93 if(doclist[i]= t"+i); 97 byte b[]="new" byte[1]; 98 docbase="base[i]; []="new" byte[len]; 101 int l="0;" 102 try { 103 DOC.se border="1"><tr bgcolor="#aabbaa"><td>doc #<td>"+i+ </tr></table>"); 105 DOC.read(contents); 106 String s = new String(contents, 0); 107 StreamTokenizer stkn = new StreamT 108 stkn.ordinarychars(1, 8); (17 / 21) 오전 2:04:24

123 최종명님의자바강좌 19 - JAVA CGI #1 109 stkn.ordinarychars(33, 47); 110 stkn.ordinarychars(58, 64); 111 String word = null; 112 int c = 0; 113 boolean iswordtype = false; 114 boolean isamper = false; 115 EOF: 116 while(true) { 117 try { 118 c = stkn.nexttoken(); 119 catch (IOException e) { Syste 120 switch(c) { 121 case StreamTokenizer.TT_EOF 122 break EOF; 123 case StreamTokenizer.TT_WOR 124 word = stkn.sval; 125 iswordtype = true; 126 break; 127 default: 128 word = new Character((c 129 //System.out.print(word 130 iswordtype = false; 131 if(word.equals("<" 132 isamper = true; for(int ii =0; ii<tokenlist.siz ((String)tokenList.elementAt(ii))) { 136 word="<stro 137 break; if(iswordtype && (!isam 141 System.out.print(" &qu 142 isamper = false; 143 else if(iswordtype) { 144 System.out.print(word); 145 isamper = false; 146 else { 147 System.out.print(word); catch(ioexception ioe) { 151 System.out.print("IOException& 152 catch(exception e) { 153 System.out.print("Exception&qu date2 = new Date(); 157 timenew = date2.gettime(); 158 float elapsed = (float)(timenew - timeold)/ 159 System.out.println("<hr><center>It tak center>"); 160 System.out.println(cgi_lib.HtmlBot()); (18 / 21) 오전 2:04:24

124 최종명님의자바강좌 19 - JAVA CGI #1 설명 28 int base[] = new int[15]; 29 int doclist[] = new int[14]; 도큐먼트의수가 14개인프로그램을테스트하기위해배열의크기를 15/14로했다. 도큐먼트의수가달라지면이부분을수정해야한다. lookupconcept.c 파일 1 #include <stdio.h> 2 #include <fcntl.h> 3 #include <string.h> 4 #include <ndbm.h> 5 #include "getquery.h" 6 #include <stubpreamble.h> 7 8 long getquery_lookupconceptword(struct HgetQue 9 struct Hjava_lang_String * dbmname, struc char * token; 12 DBM * dbm; 13 datum key, content; 14 int i, id; dbm = dbm_open(makecstring(dbmname), O_RDON 17 token = makecstring(javatoken); for(i = 0; i <strlen(token); i++) 20 token[ dsize="strlen(token);" content="dbm_fetch(dbm," k (&id, content.dptr, sizeof(int)); 28 return (long)id; 2 query.pl 파일 1 #!/bin/sh 2 LD_LIBRARY_PATH=/user2/ss/jmchoi/htdocs/ir/lab3 3 export LD_LIBRARY_PATH 4 5 /usr/local/java/bin/java 6 -Dcgi.content_type=$CONTENT_TYPE 7 -Dcgi.content_length=$CONTENT_LENGTH 8 -Dcgi.request_method=$REQUEST_METHOD 9 -Dcgi.query_string=$QUERY_STRING 10 -Dcgi.server_name=$SERVER_NAME 11 -Dcgi.server_port=$SERVER_PORT 12 -Dcgi.script_name=$SCRIPT_NAME 13 -Dcgi.path_info=$PATH_INFO 14 getquery query.html 파일 1 <html><head><title>query Example</title></head> 2 <body bgcolor="#ffffff"> 3 4 <br> 5 <h3><tt>welcome to My <u>words Search</u> Engin 6 <br> (19 / 21) 오전 2:04:24

125 최종명님의자바강좌 19 - JAVA CGI #1 7 <center> 8 <form ACTION="query.pl" method="post"> 9 <table border="2"> 10 <tr align="center" bgcolor="#e7a068"> <td><b>en 11 <tr align="center" bgcolor="#eeeeee"><td><input <br> </tr> 12 <tr align="center" bgcolor="#eeeeee"> <td><inpu Submit Query "> 13 <input name="reset_button" type="reset" value=" 14 </table> 15 </form> 16 </center> 17 </body> 18 </html> (20 / 21) 오전 2:04:24

126 최종명님의자바강좌 19 - JAVA CGI #1 (21 / 21) 오전 2:04:25

127 최종명님의자바강좌 20 - JAVA CGI #2 <%@ Language=VBScript %> 1. HTTP 와 CGI 이해 자바와 CGI(2) - 글 & 코딩 : 최종명 인터넷웹에서가장많이이용되는클라이언트 / 서버형태는웹브라우저와 CGI를이용하 HTTP 프로토콜은 TCP/IP 상위계층에서 RPC와유사한형태의간단한기능들을브라우저로부터요청을받으면 CGI(Common Gateway Interface) 프로그램에파라메타를전달한다. HTTP 프로토콜은상태를유지하지않는 (stateless) 간단한프로토콜이다. 즉, 요청하는경우에웹브라우저는웹서버와 TCP로네트워크를연결한다. 네트워크가연결되면요청을서버측에전달하고, 서버는요청에맞는응답을브라우저에전달한다. 서버에서응나면 TCP 연결을끊어진다. HTTP 프로토콜은간단하지만비효율적이다. HTTP 프가지작업만지원하기때문에웹문서에그림이 3장포함되어있다면최소 4번 TCP 연각그림을위해 TCP 연결을해야되고웹문서를위해 TCP 연결이필요한것이다. HTTP 프로토콜에서전송되는데이터에는내용은물론데이터자신에관한정보도포함되한특성은 HTTP의상태를유지하지않는특성을가능하게하였다. HTTP에서클라이터랙션은요청 (request)/ 응답 (reply) 으로이루어진다. 다음은요청에사용되는 <method><resource identifier><http [<Header>: <value>] <crlf>... [<Header>: <value>] <crlf> <crlf> [Entity body] versi 예제 : GET /index.html HTTP/1.1 Accept: text/html Accept: audio/x User-agent: CHOI 웹브라우저의요청에응답하는서버의 HTTP 포맷은다음과같은형태를취한다. <HTTP> <result code> [<explanation>]<crl [<Header>: <value>]<crlf>... [<Header>: <value>]<crlf> <crlf> [Entity body] (1 / 7) 오전 2:05:25

128 최종명님의자바강좌 20 - JAVA CGI #2 예제 : HTTP 200 Document follows Date: Sat, 07 Mar :59:15 GMT Server: NCSA/1.5.2 Last-modified: Sun, 07 Dec :09:04 Content-type: text/html Content-length: 388 % telnet it.soongsil.ac.kr 80 Trying Connected to it. Escape character is '^]'. GET /index.html HTTP/1.1 Accept: text/html Accept: audio/x User-agent: CHOI HTTP 200 Document follows Date: Sat, 07 Mar :59:15 GMT Server: NCSA/1.5.2 Last-modified: Sun, 07 Dec :09:04 Content-type: text/html Content-length: 388 GMT <html> <head> <title> 숭실대학교 : 정보과학대학 : 웹신문 </title> </head> <frameset frameborder=0 border=0 bordercolor=whi <frame src="menu.html" noresize marginheight=0 m scrolling=auto> <frameset frameborder=0 border=0 name="main" bor <frame src="body.shtml" name=main marginheight=2 </frameset> </frameset> Connection closed by foreign host. 2. 서버측 CGI 응용프로그램 웹서버측에다음과같은 CGI 프로그램을자바를이용하여작성하였다. (2 / 7) 오전 2:05:25

129 최종명님의자바강좌 20 - JAVA CGI #2 CGIName.java 파일 1 import java.util.*; 2 3 public class CGIName { 4 public static void main(string args[ 5 System.out.println(cgi_lib.Heade 6 Hashtable form_data = cgi_lib.re 7 String name = (String)form_data. 8 System.out.println("<body bgcolo 9 System.out.println(" 문자열길이 :"+ na 10 System.out.println("<hr>Hello ~~ 11 System.out.println(cgi_lib.HtmlB % telnet it.soongsil.ac.kr 80 Trying Connected to it. Escape character is '^]'. POST /~jmchoi/classes/cgi/cgi.pl HTTP/1.0 ACCEPT: */* Content-type: application/x-www-form-urlencoded Content-length:12 name= 최종명 HTTP 200 Document follows Date: Sat, 07 Mar :11:07 GMT Server: NCSA/1.5.2 Content-type: text/html; <body bgcolor=#ffffff> 문자열길이 :6 <hr>hello ~~ 최종명 </body> </html> Connection closed by foreign host. 3. CGI 클라이언트프로그램 대부분의 CGI 클라이언트는 HTML의 FORM 태그를이용한다. FORM은 HTML 지원되는태그이다. FORM 태그에는 METHOD 와 ACTION 두개의어트리뷰트를 (3 / 7) 오전 2:05:25

130 최종명님의자바강좌 20 - JAVA CGI #2 기술해주어야한다. METHO는 POST나 GET을사용할수있다. 이것은 파라메터의 웹서버측의 CGI 응용프로그램에어떻게전송되는가를결정한다. ACTION은 FORM에 기입된 값들이전송되서처리되는 CGI 응용프로그램을나타낸다. 다음은 HTML의 FO 태그를 사용해서 CGI를이용할수있는파일이다. form.html 파일 1 FORM 을이용한 CGI 클라이언트 2 <FORM METHOD="POST" ACTION=" 3 이름을넣으세요 <br> 4 <INPUT NAME="name" TYPE="TEXT" VALUE=""> 5 <INPUT NAME=" 전송 " TYPE="SUBMIT" VALUE=" 전송 6 </FORM> FORM 태그를사용하는것이 CGI를이용하기에편리하지만자바를이용해서도 CGI 작업할 수있다. 이것은위에서텔넷프로그램을이용하는방법과동일하다. 즉, 소켓을 웹서버와직접통신하는방식이다. 다음 CGIsocket.java 프로그램은 소켓을 이 통신해서 CGI 프로그램을구동시킨다. CGIsocket.java 파일 1 import java.io.*; 2 import java.net.*; 3 4 public class CGIsocket { 5 public static void main(string args[ 6 Socket socket; 7 DataInputStream in; 8 DataOutputStream out; 9 String msg = " 최종명 "; 10 String urlmsg ; 11 String line; try { 14 socket = new Socket("it.soon 15 in = new DataInputStream(soc 16 out = new DataOutputStream(s urlmsg = URLEncoder.encode(m 19 out.writebytes("post /~jmcho 20 + "Content-type: applica 21 + "Content-length: " + u 22 out.writebytes("name=" + url while((line = in.readline()) 25 System.out.println(line) in.close(); (4 / 7) 오전 2:05:26

131 최종명님의자바강좌 20 - JAVA CGI #2 28 out.close(); 29 catch(exception ex) { 30 System.out.println(ex.toStri 자바에서 GCI를이용하는또다른방법은소켓대신에 JDK에서지원하는 URLConn 이용하는방법이다. URLConnection 클래스를사용하는경우에다음과 같은 CG 프로그램을작성할수있다. PostForm.java 파일 1 import java.net.*; 2 import java.io.*; 3 4 public class PostForm { 5 URL url; 6 7 void submitdata() { 8 String name = "name=" +URLEncode 9 int n = name.length(); try { 12 URLConnection uc = url.openc 13 uc.setdooutput(true); 14 uc.setdoinput(true); 15 uc.setallowuserinteraction(f 16 DataOutputStream dos = new D 17 dos.writebytes(name); 18 dos.close(); DataInputStream dis = new Da 21 String nextline; 22 while((nextline = dis.readli 23 System.out.println(nextl dis.close(); 26 catch (Exception e) { 27 System.err.println(e); public static void main(string args[ 32 String s; (5 / 7) 오전 2:05:26

132 최종명님의자바강좌 20 - JAVA CGI #2 33 try { 34 s = args[0]; 35 catch (Exception e) { 36 s = " try { 40 PostForm pf = new PostForm() 41 pf.url = new URL(s); 42 pf.submitdata(); 43 catch(exception e) { 44 System.out.println(e); CGI 클라이언트를작성하는또다른방법은애플릿의 AppletContext 클래스를이방법은다른방법보다좀수월하게프로그램을작성할수있을뿐만아니라, 웹브라우웹페이지를다른곳으로이동시킬수있다는장점이있다. CGIclient.java 파일 1 import java.applet.*; 2 import java.awt.*; 3 import java.net.*; 4 import java.io.*; 5 6 public class CGIclient extends Applet { 7 private Label label; 8 private TextField input; 9 private URL url; public void init() { 13 setlayout(new BorderLayout()); 14 add("north", label = new Label(" 15 add("south", input = new TextFie public boolean action(event e, Objec 20 if(e.target == input) { 21 try { 22 String name = "name=" +U 23 url = new URL(" (6 / 7) 오전 2:05:26

133 최종명님의자바강좌 20 - JAVA CGI #2 24 getappletcontext().showd 25 catch(exception ex) { 26 return true; return super.action(e, arg); (7 / 7) 오전 2:05:26

134 최종명님의자바강좌 21 - JAVADOC 사용법 <%@ Language=VBScript %> javadoc 사용법 - 최종명 JDC 의 Tech Tips 에서 javadoc 에대해나왔길래조금보강해서정리합 javadoc는 JDK에서제공되는도구로서자바소스파일을이용해서자동적으로큐멘트를작성해준다. javadoc을이용하기위해서는 /** */ 태그를사용할수있다. Sort.java 1 package sort; 2 3 /** 4 * Class Sort implements some common s 5 */ 6 public class Sort { 7 /** 8 * Sorts a Vector of objects. 9 * 10 vec the vector 11 dir true for ascending o 12 SortArgumentExceptio 13 */ public void sort_vec(vector vec, 16 throws SortArgumentException 17 { % javadoc Sort.java Generating packages.html Generating Package-sort.html Generating sort.sort.html Generating Index.html Generating tree.html (1 / 2) 오전 2:0

135 최종명님의자바강좌 21 - JAVADOC class_name : "See also" class_name#method_name : "See also" text : HTML text : HTML name description : description : class_name : 특정메소드가발생시킬수있는에외 (2 / 2) 오전 2:0

136 최종명님의자바강좌 22 - JACL (TCL + JAVA) <%@ Language=VBScript %> Java + Tcl = Jacl - 최종명 현재썬에서는 Jacl, Tcl Blend, Java Package, Tcl Jacl 은 100% 자바로구현한 Tcl 인터프리터이다. 1. Jacl 은 사이트 2. Jacl 을다운로드받은다음에인스톨한다. 소스코드를다운로드받은경 % configure % make 를하면컴파일및인스톨이된다. 3. Jacl 이인스톨되면 CLASSPATH 환경변수에 Jacl 의클래스들추가시켜준다. 유닉스 C-shell 사용자를예를들면 % setenv CLASSPATH ${CLASSPATH:/home/user/ 4. tcl 파일을생성한다. hello.tcl 파일 1 set f [java::new java.awt.frame] 2 $f settitle "Hello World" 3 set button [java::new java.awt.butt 4 $button setlabel "Hello Button" 5 $f {add java.awt.component $button 6 7 $f setlocation $f pack 9 $f tofront 5. 이제자바로작성된 Tcl 인터프리터를실행시킨다. % java tcl.lang.shell % source hello.tcl % exit 다른프로그램예제를알아보자. button.tcl 파일 1 set f [java::new java.awt.frame] (1 / 2) 오전 2

137 최종명님의자바강좌 22 - JACL (TCL + JAVA) 2 set b [java::new java.awt.button " 3 4 java::bind $b actionperformed { set 5 6 $f {add java.awt.component $b 7 $f setlocation $f pack 9 $f tofront set done "no" 12 vwait done 13 $f dispose text.tcl 파일 1 set f [java::new java.awt.frame] 2 $f settitle "TextArea" 3 set text [java::new java.awt.textar 4 $text settext "Hello World..." 5 $f {add java.awt.component $text 6 7 $f setlocation $f pack 9 $f tofront (2 / 2) 오전 2

138 최종명님의자바강좌 23 - 자바폴리머피즘 자바폴리머피즘 - 최종명 객체지향에서폴리머피즘이라는말이많이나오는데, 이것은 poly-( 많다 ) 는뜻 morphism( 형태 ) 라는뜻이결합된합성어이다. 따라서폴리모피즘은형태가데, 폴리모피즘이다형성으로번역되는것도이때문이다. 형태가많다는말은이것은의미 (semantics) 는하나지만실제형태는여러가지가될수있다면, " 밥을먹다 " 는우리는충분히이해할수있다. 그러나, 실제적으로 " 밥을다. 개가밥먹는형태, 한국사람이밥먹는형태, 미국사람이밥먹는형태등만실제적인형태는상당히많을수있는것이다. 폴리머피즘이프로그래밍에서는어떻게나타나게될까? 폴리모피즘은프로그램에서특산자나키워드가있는것이아니다. 폴리모피즘은객체지향프로그래밍언어에서 " (overloading)", " 오버라이딩 (overriding)" 의형태로나타 다음예들은자바의오버라이딩폴리모피즘을구현한예이다. 다음은 PolyA 클래스와 PolyB 클래스를정의하였다. PolyB클래스는 P 속받았고두클래스모두 work() 라는메소드를정의하므로서서브클래스 Po 스 PolyA의 work() 메소드를오버라이드했다. 따라서 main() 함수에하고 work() 메소드를호출하는경우에 PolyB클래스의 work() 메소드래스를 PolyA 클래스타입으로형변환을하여도 PolyB클래스의 work( 것에주의하라. 예제 : PolyA.java 1 public class PolyA { 2 String msg; 3 4 public PolyA() { 5 msg = "I am PolyA!!"; public void work() { 9 System.out.println("PolyA is 10 System.out.println("PolyA:wo 예제 : PolyB.java (1 / 5) 오전 2

139 최종명님의자바강좌 23 - 자바폴리머피즘 1 public class PolyB extends PolyA { 2 public PolyB() { 3 msg = "I am PolyB.."; public void work() { 7 System.out.println("PolyB:w public static void main(string 11 PolyB b = new PolyB(); 12 b.work(); System.out.println(); 15 PolyA a = new PolyB(); 16 a.work(); % java PolyB PolyB:work:msg=I am PolyB.. PolyB:work:msg=I am PolyB.. PolyB2 는 PolyA2 클래스로부터상속받았고, work() 메소드를오는 init() 메소드가정의되어있고, 이메소드는 work() 메소드를호 PolyA2 로부터상속받았기때문에 init() 메소드를호출할수있다. P 소드를호출하는경우에, init() 은 PolyA2 와 PolyB2 의 work( 출할것인가? 다음예제에서보듯이 PolyB2 클래스의 work() 메소드가호출된다. 예제 : PolyA2.java 1 public class PolyA2 { 2 String msg; 3 4 public PolyA2() { 5 msg = "I am PolyA2!!"; public void init() { (2 / 5) 오전 2

140 최종명님의자바강좌 23 - 자바폴리머피즘 9 work(); public void work() { 13 System.out.println("PolyA2: 예제 : PolyB2.java 1 public class PolyB2 extends PolyA2 2 public PolyB2() { 3 msg = "I am PolyB2.."; public void work() { 7 System.out.println("PolyB2: public static void main(string 11 PolyB2 b = new PolyB2(); 12 b.init(); System.out.println(); 15 PolyA2 a = new PolyB2(); 16 a.init(); % java PolyB2 PolyB2:work:msg=I am PolyB2.. PolyB2:work:msg=I am PolyB2.. PolyA2 와 PolyB2 의예는생성자에적용될수도있다. 다음 PolyA 고, PolyA3 의생성자는초기화를위해 init() 메소드를호출한다. 그신의멤버필드를초기화하기위해 init() 메소드를오버라이드한것이다. PolyA3 클래스의멤버필드는프로그래머의의도와는다르게초기화안될수도에서 PolyA3 의 msg 멤버필드는적절하게초기화안됐다. 예제 : PolyA3.java (3 / 5) 오전 2

141 최종명님의자바강좌 23 - 자바폴리머피즘 1 public class PolyA3 { 2 String msg; 3 4 public PolyA3() { 5 init(); public void init() { 9 msg = "I am PolyA3!!"; 10 System.out.println("PolyA3: public void doing() { 14 work(); 15 System.out.println("PolyA3: public void work() { 19 System.out.println("PolyA3: 예제 : PolyB3.java 1 public class PolyB3 extends PolyA3 2 String msg ; 3 public PolyB3() { public void init() { 8 msg = "I am PolyB3.."; 9 System.out.println("PolyB3: public void work() { 13 System.out.println("PolyB3: public static void main(string 17 PolyB3 b = new PolyB3(); 18 b.doing(); 19 (4 / 5) 오전 2

142 최종명님의자바강좌 23 - 자바폴리머피즘 20 System.out.println(); 21 PolyA3 a = new PolyB3(); 22 a.doing(); % java PolyB3 PolyB3:init:msg = I am PolyB3.. PolyB3:work:msg = I am PolyB3.. PolyA3:doing:msg = null PolyB3:init:msg = I am PolyB3.. PolyB3:work:msg = I am PolyB3.. PolyA3:doing:msg = null (5 / 5) 오전 2

143 최종명님의자바강좌 24 - 자바에서 Cut & Paste <%@ Language=VBScript %> Cut & Paste - 최종명 java.awt.datatransfer 패키지에서클립보드를지원하기위한클현재 JDK 1.1 버전에서지원되는클립보드는아직초보적인수준이어서문자열 cut, copy, paste 기능만지원한다. 다른타입을위한기능은추후 전송될데이타를가지고있는클래스는 Tansferable 인터페이스를임플리 DataFlavor 클래스는클립보드로전송될데이타의 MIME 타입을제공하 Clipboard 클래스는 cut, copy, paste 기능을제공한다. COPY 절차 1. java.awt.toolkit 클래스의 getsystemclipboard 생성한다. 2. Tansferable 인터페이스를임플리멘츠한클래스 (ex, String 3. Tansferable 인터페이스를임플리멘츠한클래스를클립보드에 set 이용해서붙인다. 예 : public void copy(textfield tf) { StringSelection data = new StringSelect Clipboard clipboard = Toolkit().getDefa clipboard.setcontents(data, data); PASTE 절차 1. java.awt.toolkit 클래스의 getsystemclipboard (1 / 4) 오전 2

144 최종명님의자바강좌 24 - 자바에서 Cut & Paste 생성한다. 2. 클립보드의 getcontents() 메소드를이용해서클립보드의내용을 3. gettransferdata() 메소드를이용해서원하는데이타를얻는다 4. 얻어진데이타를적당한타입으로변환한다. 예 : public void paste(textfield tf) { Clipboard clipboard = Toolkit().getDefa Transferable data = clipboard.getconten String s; try { s = (String) (data.gettransferdata(da catch (Exception e) { s = data.tostring(); tf.settext(s); 예제 : CutNPaste.java 파일 1 import java.io.*; 2 import java.awt.*; 3 import java.awt.datatransfer.*; 4 import java.awt.event.*; 5 (2 / 4) 오전 2

145 최종명님의자바강좌 24 - 자바에서 Cut & Paste 6 7 public class CutNPaste extends Fram 8 TextField tf; 9 TextArea ta; 10 String selection = ""; public static void main (String 13 new CutNPaste().show(); public CutNPaste() { 17 super("cut & Paste Example" 18 add(tf = new TextField(" 클립보 19 add(ta = new TextArea(), "C 20 MenuBar mb = new MenuBar(); 21 mb.add(makeeditmenu()); 22 setmenubar(mb); 23 setsize(250, 250); Menu makeeditmenu() { 27 Menu editmenu = new Menu("E 28 MenuItem mi = new MenuItem( 29 mi.addactionlistener(this); 30 editmenu.add(mi); 31 mi = new MenuItem("Copy"); 32 mi.addactionlistener(this); 33 editmenu.add(mi); 34 mi = new MenuItem("Paste"); 35 mi.addactionlistener(this); 36 editmenu.add(mi); 37 mi = new MenuItem("Clear"); 38 mi.addactionlistener(this); 39 editmenu.add(mi); return editmenu; public void actionperformed (Ac 45 Clipboard clipboard = getto 46 String cmd = evt.getactionc 47 if (cmd.equalsignorecase("c 48 selection = tf.getselec (3 / 4) 오전 2

146 최종명님의자바강좌 24 - 자바에서 Cut & Paste 49 if(selection == null 50 selection = tf.gett 51 StringSelection data = 52 clipboard.setcontents(d 53 else if (cmd.equalsignore 54 tf.settext(""); 55 else if (cmd.equalsignore 56 Transferable clipdata = 57 String s; 58 try { 59 s = (String)(clipDa 60 catch (Exception e) { 61 s = e.tostring(); ta.append(s+" n"); 64 else if (cmd.equalsignore 65 StringSelection data = 66 clipboard.setcontents(d 67 tf.settext(""); (4 / 4) 오전 2

147 최종명님의자바강좌 25 - 자바스크립트를이용한애플릿제어 <%@ Language=VBScript %> 자바스크립에서자바애플릿함수호츨 - 최종명자바스크립을이용하는경우에자바애플릿의 public 함수를자바스크립트에서다. 다음은자바스크립트를이용해서자바애플릿의함수를호출해서애플릿의메시지색, 배경색을변경하는예제프로그램이다. 예제 : JSApplet.java 파일 1 import java.awt.*; 2 import java.applet.*; 3 4 public class JSApplet extends Applet 5 String msg = "Hello ~ javascript 6 Color fg = Color.black; 7 Color bg = Color.lightGray; 8 9 public void init() { 10 setbackground(bg); public void paint(graphics g) { 14 g.setcolor(fg); 15 g.drawstring(msg, 25, 25); public void setmessage(string ms 19 this.msg = msg; 20 repaint(); public String getmessage() { 24 return msg; public String getfg() { 28 int r = fg.getred(); 29 int g = fg.getgreen(); 30 int b = fg.getblue(); (1 / 4) 오전 2

148 최종명님의자바강좌 25 - 자바스크립트를이용한애플릿제어 31 String color= "#"; 32 if(r < 16) 33 color += "0" + Integer. 34 else 35 color += Integer.toHexS if(g < 16) 38 color += "0" + Integer. 39 else 40 color += Integer.toHexS if(b < 16) 43 color += "0" + Integer. 44 else 45 color += Integer.toHexS return color; public void setfg(string fgcolo 51 try { 52 if(fgcolor.startswith(" 53 int r = Integer.par 54 int g = Integer.par 55 int b = Integer.par 56 fg = new Color(r, g 57 else { 58 int r = Integer.par 59 int g = Integer.par 60 int b = Integer.par 61 fg = new Color(r, g repaint(); 64 catch(exception e) { 65 System.out.println(e); public String getbg() { 70 int r = bg.getred(); 71 int g = bg.getgreen(); 72 int b = bg.getblue(); 73 String color= "#"; (2 / 4) 오전 2

149 최종명님의자바강좌 25 - 자바스크립트를이용한애플릿제어 74 if(r < 16) 75 color += "0" + Integer. 76 else 77 color += Integer.toHexS if(g < 16) 80 color += "0" + Integer. 81 else 82 color += Integer.toHexS if(b < 16) 85 color += "0" + Integer. 86 else 87 color += Integer.toHexS return color; public void setbg(string bgcolo 93 try { 94 if(bgcolor.startswith(" 95 int r = Integer.par 96 int g = Integer.par 97 int b = Integer.par 98 bg = new Color(r, g 99 else { 100 int r = Integer.par 101 int g = Integer.par 102 int b = Integer.par 103 bg = new Color(r, g setbackground(bg); 106 catch(exception e) { 107 System.out.println(e); 예제 : JSApplet.html 1 <head> 2 <script> 3 function change(form) { (3 / 4) 오전 2

150 최종명님의자바강좌 25 - 자바스크립트를이용한애플릿제어 데모 4 document.js.setbg(form.bg.value 5 document.js.setfg(form.fg.value 6 document.js.setmessage(form.msg 7 document.jsform.msg.value = doc 8 form.fg.value = document.js.get 9 form.bg.value = document.js.get </script> 12 </head> <body bgcolor=lightgreen> 15 <applet name="js" code=jsapplet.cla 16 </applet> <form name="jsform" onsubmit="retur 19 배경색 : <input type=text name=bg valu 20 글자색 : <input type=text name=fg valu 21 메시지 : <input type=text name=msg val 22 <center> 23 <input type=button value=" 적 용 " onc 24 <input type=reset value=" 초기값 "> 25 </center> 26 </form> 27 </body> (4 / 4) 오전 2

151 최종명님의자바강좌 26 - 스윙 1 편 <%@ Language=VBScript %> 자바스윙 (1) 이글은숭실대학교최종명님의강좌에서발최한내용입니다. 최종명 스윙은 JFC 의일부로서개발되고있는며, 앞으로 JDK 1.2 버전에서는스윙을포함할예 JDK 1.2 베타버전들이발표되었으며, 곧정식버전이발표될예정이다. 스윙은현재 1 상태이다. JDK1.6 혹은그이전버전을사용하시는분은스윙부분을다운로드받아서 JDK 1.2에포함된스윙과스윙 1.02를사용하는경우에스윙패키지가 다르기 때문에 달라질수도있다.!!! 편집자주 : 아래소스코드중에 import 하는부분에서 com.sun. 을 JDK1. 로입력하셔야결과가제대로나옵니다. 1. 다운로드받는곳 2. 자바스윙튜토리얼 3. 환경맞추기유닉스환경맞추기 % setenv JDKHOME /home/me/jdk1.1.5 % setenv SWINGHOME /home/me/swing-1.0 % setenv CLASSPATH $SWINGHOME/swingall.jar:$CLASSPA Windows 컨트롤패널에서기재한다. NT 환경맞추기 시스템아이콘을더블클릭하고, 프라퍼티란에다음사항을 JAVA_HOME C: JDK1.1.5 SWING_HOME C: swing-1.0 CLASSPATH.;%JAVA_HOME% lib classes.zi PATH %PATH%;%JAVA_HOME% bin Windows 95 환경맞추기윈도우즈 95에서는 AUTOEXEC.BAT 파일에다음사항들을기재한다. set JAVA_HOME=C: JDK1.1.5 set SWING_HOME=C: swing-1.0 set CLASSPATH=.;%JAVA_HOME% lib classes.zip set PATH=%PATH%;%JAVA_HOME% bin 예제프로그램 (1 / 3) 오전 2:06:06

152 최종명님의자바강좌 26 - 스윙 1 편 예제 : HiSwing.java 파일 1 import java.awt.*; 2 import com.sun.java.swing.*; 3 import com.sun.java.swing.border.*; 4 5 public class HiSwing extends JFrame { 6 JButton textb, iconb; 7 JLabel label; 8 9 public HiSwing() { 10 super("hi~ Swing~"); 11 getcontentpane().setlayout(new Flow Icon logo = new ImageIcon("logo.gif 14 label=new JLabel("Soongsil Univ. Lo 15 getcontentpane().add(label); 16 label.setborder(new EtchedBorder()) 17 label.settooltiptext("label with ic getcontentpane().add(textb = new JB 20 textb.setborder(new BevelBorder(Bev 21 textb.settooltiptext("text button") Icon project = new ImageIcon("pproj 24 getcontentpane().add(iconb = new JB 25 iconb.setborder(new BevelBorder(Bev 26 iconb.settooltiptext("pie chart"); public static void main(string args[]) 30 HiSwing hi = new HiSwing(); 31 hi.setsize(300, 200); 32 hi.setvisible(true); 결과 % java HiSwing 설명 2 import com.sun.java.swing.*; 3 import com.sun.java.swing.border.*; JFC의스윙을따로설치한경우에는스윙의패키지는 com.sun. 으로시작한다. 그러나 포함된스윙을 사용하는경우에는 com.sun. 부분은없어진다. 현재스윙은 개발단계이기 때 앞으로당분간은 JFC버전을사용하는것이좋겠다. 5 public class HiSwing extends JFrame { 6 JButton textb, iconb; 스윙에는모든자바 AWT 에해당되는스윙컴포넌트를가지고있으며, 항상이름은 J 자로시 13 Icon logo = new ImageIcon("logo.gif 모든스윙컴포넌트에는 Icon 을설정할수있다. 따라서, 라벨 / 버튼등에아이콘을설정할 (2 / 3) 오전 2:06:06

153 최종명님의자바강좌 26 - 스윙 1 편 것이다. 16 label.setborder(new EtchedBorder()) 컴포넌트의보더 (border) 부분을조금장식해주기위해서 setborder() 메소드를보더에관련된클래스들은 com.sun.java.swing.border 패키지에들어있다. 17 label.settooltiptext("label with ic 마우스커서를 컴포넌트위에오랫동안위치시켜놓는경우에도움말기능이나타나도록하는 것이 ToolTip 기능이다. 스윙애플릿 예제 : HiSwingApplet.java 1 import java.awt.*; 2 import com.sun.java.swing.*; 3 import com.sun.java.swing.border.*; 4 5 public class HiSwingApplet extends JApplet 6 JButton textb, iconb; 7 JLabel label; 8 9 public void init() { 10 getcontentpane().setlayout(new Flow ImageIcon logo = new ImageIcon(getI 13 label=new JLabel("Soongsil Univ. Lo 14 getcontentpane().add(label); 15 label.setborder(new EtchedBorder()) 16 label.settooltiptext("label with ic getcontentpane().add(textb = new JB 19 textb.setborder(new BevelBorder(Bev 20 textb.settooltiptext("text button") ImageIcon project = new ImageIcon(g 23 getcontentpane().add(iconb = new JB 24 iconb.setborder(new BevelBorder(Bev 25 iconb.settooltiptext("pie chart"); 설명 5 public class HiSwingApplet extends JApplet 스윙애플릿은 JApplet 클래스로부터상속받는다. 12 ImageIcon logo = new ImageIcon(getI 애플릿인경우에는 getimage() 메소드를이용해서 ImageIcon 클래스를생성해서아이콘으로사용한다. - 계속... (3 / 3) 오전 2:06:07

154 최종명님의자바강좌 27 - 스윙 2 편 <%@ Language=VBScript %> 자바스윙 (2) 이글은 숭실대학교 최종명님의 강좌에서발최한내용입니다. 최종명!!! 편집자주 : 아래 소스코드중에 import 하는부분에서 com.sun. 을 JDK1.2 입력하셔야결과가제대로나옵니다. 스윙컴포넌트주위에다양한형태의보더를만들어줄수있다. 스윙에서보더는 com.sun.java.swing.border 패키지에들어있다. JComponent 클래스에 setborder() 메소드를정의하고있기때문에모든스윙컴포넌트들은보더를사용할수현재스윙에는다음과같은보더클래스들을정의하고있다. BevelBorder - 3D 형태의양각 / 음각의보더 CompoundBorder - 2개의보더가네스팅 (nesting) 되서하나의 EmptyBorder - 보더자리는차지하지만보이지않는투명한보더 EtchedBorder - 홈형태의보더 LineBorder - 선모양의보더 MatteBorder - 색이나아이콘을사용하는보더 SoftBevelBorder - 모서리가둥근형태의 BevelBorder TitledBorder - 텍스트가있는보더 이제간단히보더에대해알아보았다. 다음의 BorderSwing.java 프로그램을보고, 사용법을알아보자. 예제 : BorderSwing.java 1 import java.awt.*; 2 import com.sun.java.swing.*; 3 import com.sun.java.swing.border.*; 4 5 public class BorderSwing extends JFrame { 6 JLabel noborder, raised, etched, title 7 JLabel title2, lowered, line, matte; 8 9 public BorderSwing() { 10 super("good Swing Borders"); 11 getcontentpane().setlayout(new GridL 12 noborder = new JLabel("No Border"); 13 raised = new JLabel("Raised Border") 14 raised.setborder(new BevelBorder(Bev 15 lowered = new JLabel("Lowered Border 16 lowered.setborder(new SoftBevelBorde 17 line = new JLabel("Line Border"); 18 line.setborder(new LineBorder(Color. 19 etched = new JLabel("Etched Border") 20 etched.setborder(new EtchedBorder()) 21 title1 = new JLabel("Title Border"); 22 title1.setborder(new TitledBorder("H 23 title2 = new JLabel("Title Border"); (1 / 2) 오전 2:06:30

155 최종명님의자바강좌 27 - 스윙 2 편 24 title2.setborder(new TitledBorder(ne RIGHT, TitledBorder.BOTTOM)); 25 matte = new JLabel("Matte Border"); 26 matte.setborder(new MatteBorder(5, getcontentpane().add(noborder); 29 getcontentpane().add(line); 30 getcontentpane().add(raised); 31 getcontentpane().add(lowered); 32 getcontentpane().add(etched); 33 getcontentpane().add(title1); 34 getcontentpane().add(title2); 35 getcontentpane().add(matte); public static void main(string args[]) { 39 BorderSwing border = new BorderSwing 40 border.setsize(450, 400); 41 border.setvisible(true); (2 / 2) 오전 2:06:30

156 JSWDK 사용법 이글은숭실대학교최종명님의강좌에서발최한내용입니다. 최종명 JSWDK 는 JavaServer Web Development Kit 의약자를이용한홈페이지제작에사용된다. JSWDK 는다음사이트에서다운로드수있다. JSWDK 를설치한다음에서버를실행시키기위해서는 <jswdk-home startserver 명령어를실행시킨다. 기본적으로이서버는 8080 다. 따라서웹브라우저로 하면웹서버로사 HTML 문서는 <jswdk-home>/webpages 디렉토리에서작성할의구성을변경하기위해서는 <jswdk-home>/default.cfg 능하다. 를처음방문하면기본적인 JSP 와행볼수있고, 이것들의소스를볼수있다. 예제프로그램들은 <jswd examples 디렉토리에저장되어있다. <jswdk-home>/examples 디렉토리를방문하면 jsp 디렉토리디렉토리가있다. jsp 디렉토리에는다른많은디렉토리들이있는데이것프로그램들을위한디렉토리들이다. 각디렉토리에는 html 파일과 jsp 존재한다. 예제에소개된 jsp 들은대부분자바빈을사용하고있는데, 이들은 WEB-INF 디렉토리에저장되어있다. WEB-INF 디렉토리에가 jsp 디렉토리와 servlets 디렉토리가존재한다. jsp 디렉토리에토리가있고, 이디렉토리아래에자바빈소스프로그램들이존재하게된다 간단한 HelloBean.java 프로그램을작성해보자. HelloBean 파일해서 <jswdk-home>/examples/web-inf/jsp/be 다놓는다. 예제 : HelloBean.java 1 package hello; 2 3 public class HelloBean { 4 private String name = "World 5 6 public void setname(string na 7 this.name = name; (1 / 2) 오전 2

157 public String getname() { 11 return name; 다음은 JSP 페이지를작성해보자. hellobean.jsp 파일을작성해 home>/webpages 에저장한다. 예제 : hellobean.jsp 1 <%@ page import="hello.hellobean" 2 <jsp:usebean id="hello" class="he 3 4 <html> 5 <head><title>hellobean Test</titl 6 <body> 7 hello... 8 <%= hello.getname() %> 9 <hr> 10 usebaen 을이용하는 JSP 테스트입니다. 11 </body> 12 </html> 작성된 JSP 는웹브라우저를이용해서방문한다. (2 / 2) 오전 2

158 최종명님의자바강좌 - 자카르타프로젝트 자카르타 프로젝트 자카르타는아파치의 JServ 프로젝트멤버들과 Sun 및 IBM 의엔지니어들과는자바서블릿과 JSP 을위한엔진이다 년 11 월 15 일현재자카테스트중에있으며, 올해말에정식으로발표될예정이다. 현재자카르타는 S JSP 1.1 을지원하고있으며, 아파치웹서버혹은다른웹서버와같이사용자카르타에관한자세한사항은 자카르타를설치하기위해서는 온다. 압축파일을풀고, build 를한다. build 를하기위해서는 bu bat ( 윈도우용 ) 를실행시킨다. build 를하면 build 라는디렉토리가생성된다. build 디렉토리의 t 해서 startup.sh ( 유닉스 ) 나 startup.bat( 윈도우용 ) 를실행시 8080 포트의웹서버가실행된다. 웹브라우자를이용해서 8080 포트를방문 tomcat 의 webpages 디렉토리에다음과같은 hello_ko.jsp 예제 : hello_ko.jsp 1 <HTML> 2 <BODY> 3 <% 4 String msg = new String("Hello... 안 5 out.println(msg); 6 %> 7 JSP 입니다!!! 8 </BODY> 9 </HTML> 이글은숭실대학교최종명님이작성하신글입니다. 오전 2:06:47

159 최종명님의자바강좌 - JPEG 프로그래밍예제 <%@ Language=VBScript %> jpeg? - 최종명 예제 : JPEGTest.java 1 import java.io.*; 2 import java.awt.*; 3 import java.awt.image.*; 4 import com.sun.image.codec.jpeg.*; 5 6 public class JPEGTest { 7 8 public static void main(string args[] 9 System.err.println("Preparing Buf 10 BufferedImage img = new BufferedI 11 Graphics2D g = img.creategraphics 12 System.err.println("Drawing"); 13 g.setcolor(color.white); 14 g.fillrect(0, 0, 100, 100); 15 g.setcolor(color.gray); 16 for (int i = 0; i < 50; i += 2) { 17 g.drawline(i, i, i, i); 18 g.drawline(i, i, g.drawline(100 - i, i, 20 g.drawline(100 - i, i, i, i); g.setfont(new Font("Serif", Font. 23 g.setcolor(color.red); 24 g.drawstring("jpeg", 15, 35); 25 g.setfont(new Font("Serif", Font. 26 g.setcolor(color.black); 27 g.drawstring("test", 12, 62); 28 g.setcolor(color.green); 29 g.drawstring("~~~", 10, 60); 30 g.setfont(new Font("SansSerif", F 31 g.setcolor(color.blue); 32 g.drawstring("!!!", 5, 85); System.err.println("Writing to fi 35 try { 36 FileOutputStream out = new Fi 37 JPEGImageEncoder encoder = JP 38 encoder.encode(img); 39 out.close(); catch (Exception e) { (1 / 2) 오전 2:06:53

160 최종명님의자바강좌 - JPEG 프로그래밍예제 42 e.printstacktrace(); System.err.println("Finished"); % java JPEGTest... % xv out.jpg (2 / 2) 오전 2:06:53

Chap12

Chap12 12 12Java RMI 121 RMI 2 121 RMI 3 - RMI, CORBA 121 RMI RMI RMI (remote object) 4 - ( ) UnicastRemoteObject, 121 RMI 5 class A - class B - ( ) class A a() class Bb() 121 RMI 6 RMI / 121 RMI RMI 1 2 ( 7)

More information

Network Programming

Network Programming Part 5 확장된 Network Programming 기술 1. Remote Procedure Call 2. Remote Method Invocation 3. Object Request Broker 2. Java RMI

More information

<4D F736F F F696E74202D20C1A63236C0E520BED6C7C3B8B428B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20C1A63236C0E520BED6C7C3B8B428B0ADC0C729205BC8A3C8AF20B8F0B5E55D> Power Java 제 26 장애플릿 이번장에서학습할내용 애플릿소개 애플릿작성및소개 애플릿의생명주기 애플릿에서의그래픽컴포넌트의소개 Applet API의이용 웹브라우저상에서실행되는작은프로그램인애플릿에대하여학습합니다. 애플릿이란? 애플릿은웹페이지같은 HTML 문서안에내장되어실행되는자바프로그램이다. 애플릿을실행시키는두가지방법 1. 웹브라우저를이용하는방법 2. Appletviewer를이용하는방법

More information

Microsoft PowerPoint - Supplement-03-TCP Programming.ppt [호환 모드]

Microsoft PowerPoint - Supplement-03-TCP Programming.ppt [호환 모드] - Socket Programming in Java - 목차 소켓소개 자바에서의 TCP 프로그램작성방법 주요클래스와메소드 HTTP 프로토콜을이용한예제 에코프로그램 Q/A 에코프로그램 - EchoServer 에코프로그램 - EchoClient TCP Programming 1 소켓소개 IP, Port, and Socket 포트 (Port): 전송계층에서통신을수행하는응용프로그램을찾기위한주소

More information

Microsoft PowerPoint - 03-TCP Programming.ppt

Microsoft PowerPoint - 03-TCP Programming.ppt Chapter 3. - Socket in Java - 목차 소켓소개 자바에서의 프로그램작성방법 주요클래스와메소드 HTTP 프로토콜을이용한예제 에코프로그램 에코프로그램 - EchoServer 에코프로그램 - EchoClient Q/A 1 1 소켓소개 IP,, and Socket 포트 (): 전송계층에서통신을수행하는응용프로그램을찾기위한주소 소켓 (Socket):

More information

<4D F736F F F696E74202D20C1A63139C0E520B9E8C4A120B0FCB8AEC0DA28B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20C1A63139C0E520B9E8C4A120B0FCB8AEC0DA28B0ADC0C729205BC8A3C8AF20B8F0B5E55D> Power Java 제 19 장배치관리자 이번장에서학습할내용 배치관리자의개요 배치관리자의사용 FlowLayout BorderLayout GridLayout BoxLayout CardLayout 절대위치로배치 컨테이너안에서컴포넌트를배치하는방법에대하여살펴봅시다. 배치관리자 (layout manager) 컨테이너안의각컴포넌트의위치와크기를결정하는작업 [3/70] 상당히다르게보인다.

More information

Microsoft PowerPoint - 04-UDP Programming.ppt

Microsoft PowerPoint - 04-UDP Programming.ppt Chapter 4. UDP Dongwon Jeong djeong@kunsan.ac.kr http://ist.kunsan.ac.kr/ Dept. of Informatics & Statistics 목차 UDP 1 1 UDP 개념 자바 UDP 프로그램작성 클라이언트와서버모두 DatagramSocket 클래스로생성 상호간통신은 DatagramPacket 클래스를이용하여

More information

자바-11장N'1-502

자바-11장N'1-502 C h a p t e r 11 java.net.,,., (TCP/IP) (UDP/IP).,. 1 ISO OSI 7 1977 (ISO, International Standards Organization) (OSI, Open Systems Interconnection). 6 1983 X.200. OSI 7 [ 11-1] 7. 1 (Physical Layer),

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 @ Lesson 2... ( ). ( ). @ vs. logic data method variable behavior attribute method field Flow (Type), ( ) member @ () : C program Method A ( ) Method B ( ) Method C () program : Java, C++, C# data @ Program

More information

02 C h a p t e r Java

02 C h a p t e r Java 02 C h a p t e r Java Bioinformatics in J a va,, 2 1,,,, C++, Python, (Java),,, (http://wwwbiojavaorg),, 13, 3D GUI,,, (Java programming language) (Sun Microsystems) 1995 1990 (green project) TV 22 CHAPTER

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 @ Lesson 1,..... @ 1 Green Project 1991 Oak Java 1995. 5 December '90 by Patrick Naughton, Mike Sheridan and James Gosling Embedded in various consumer electronic device 1992. 9. 3 Star 7 1993 www portability

More information

Microsoft PowerPoint - RMI.ppt

Microsoft PowerPoint - RMI.ppt ( 분산통신실습 ) RMI RMI 익히기 1. 분산환경에서동작하는 message-passing을이용한 boundedbuffer 해법프로그램을실행해보세요. 소스코드 : ftp://211.119.245.153 -> os -> OSJavaSources -> ch15 -> rmi http://marvel el.incheon.ac.kr의 Information Unix

More information

쉽게 풀어쓴 C 프로그래밊

쉽게 풀어쓴 C 프로그래밊 Power Java 제 27 장데이터베이스 프로그래밍 이번장에서학습할내용 자바와데이터베이스 데이터베이스의기초 SQL JDBC 를이용한프로그래밍 변경가능한결과집합 자바를통하여데이터베이스를사용하는방법을학습합니다. 자바와데이터베이스 JDBC(Java Database Connectivity) 는자바 API 의하나로서데이터베이스에연결하여서데이터베이스안의데이터에대하여검색하고데이터를변경할수있게한다.

More information

Microsoft PowerPoint - ÀÚ¹Ù08Àå-1.ppt

Microsoft PowerPoint - ÀÚ¹Ù08Àå-1.ppt AWT 컴포넌트 (1) 1. AWT 패키지 2. AWT 프로그램과이벤트 3. Component 클래스 4. 컴포넌트색칠하기 AWT GUI 를만들기위한 API 윈도우프로그래밍을위한클래스와도구를포함 Graphical User Interface 그래픽요소를통해프로그램과대화하는방식 그래픽요소를 GUI 컴포넌트라함 윈도우프로그램만들기 간단한 AWT 프로그램 import

More information

PowerPoint Presentation

PowerPoint Presentation Package Class 1 Heeseung Jo 목차 section 1 패키지개요와패키지의사용 section 2 java.lang 패키지의개요 section 3 Object 클래스 section 4 포장 (Wrapper) 클래스 section 5 문자열의개요 section 6 String 클래스 section 7 StringBuffer 클래스 section

More information

rmi_박준용_final.PDF

rmi_박준용_final.PDF (RMI) - JSTORM http://wwwjstormpekr (RMI)- Document title: Document file name: Revision number: Issued by: Document Information (RMI)- rmi finaldoc Issue Date: Status:

More information

Connection 8 22 UniSQLConnection / / 9 3 UniSQL OID SET

Connection 8 22 UniSQLConnection / / 9 3 UniSQL OID SET 135-080 679-4 13 02-3430-1200 1 2 11 2 12 2 2 8 21 Connection 8 22 UniSQLConnection 8 23 8 24 / / 9 3 UniSQL 11 31 OID 11 311 11 312 14 313 16 314 17 32 SET 19 321 20 322 23 323 24 33 GLO 26 331 GLO 26

More information

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2 객체지향프로그래밍 IT CookBook, 자바로배우는쉬운자료구조 q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2 q 객체지향프로그래밍의이해 v 프로그래밍기법의발달 A 군의사업발전 1 단계 구조적프로그래밍방식 3 q 객체지향프로그래밍의이해 A 군의사업발전 2 단계 객체지향프로그래밍방식 4 q 객체지향프로그래밍의이해 v 객체란무엇인가

More information

제8장 자바 GUI 프로그래밍 II

제8장 자바 GUI 프로그래밍 II 제8장 MVC Model 8.1 MVC 모델 (1/7) MVC (Model, View, Controller) 모델 스윙은 MVC 모델에기초를두고있다. MVC란 Xerox의연구소에서 Smalltalk 언어를바탕으로사용자인터페이스를개발하기위한방법 MVC는 3개의구성요소로구성 Model : 응용프로그램의자료를표현하기위한모델 View : 자료를시각적으로 (GUI 방식으로

More information

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과 1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과 학습내용 1. Java Development Kit(JDK) 2. Java API 3. 자바프로그래밍개발도구 (Eclipse) 4. 자바프로그래밍기초 2 자바를사용하려면무엇이필요한가? 자바프로그래밍개발도구 JDK (Java Development Kit) 다운로드위치 : http://www.oracle.com/technetwork/java/javas

More information

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx #include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의

More information

10-Java Applet

10-Java Applet JAVA Programming Language JAVA Applet Java Applet >APPLET< >PARAM< HTML JAR 2 JAVA APPLET HTML HTML main( ). public Applet 3 (HelloWorld.html) Applet

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 @ Lesson 3 if, if else, if else if, switch case for, while, do while break, continue : System.in, args, JOptionPane for (,, ) @ vs. logic data method variable Data Data Flow (Type), ( ) @ Member field

More information

PowerPoint Template

PowerPoint Template JavaScript 회원정보 입력양식만들기 HTML & JavaScript Contents 1. Form 객체 2. 일반적인입력양식 3. 선택입력양식 4. 회원정보입력양식만들기 2 Form 객체 Form 객체 입력양식의틀이되는 태그에접근할수있도록지원 Document 객체의하위에위치 속성들은모두 태그의속성들의정보에관련된것

More information

JAVA PROGRAMMING 실습 08.다형성

JAVA PROGRAMMING 실습 08.다형성 2015 학년도 2 학기 1. 추상메소드 선언은되어있으나코드구현되어있지않은메소드 abstract 키워드사용 메소드타입, 이름, 매개변수리스트만선언 public abstract String getname(); public abstract void setname(string s); 2. 추상클래스 abstract 키워드로선언한클래스 종류 추상메소드를포함하는클래스

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 인터페이스, 람다식, 패키지 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 홈네트워킹 public interface RemoteControl { public void turnon(); // 가전제품을켠다. public void turnoff(); // 가전제품을끈다. 인터페이스를구현 public class Television

More information

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D313939392D382E687770>

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D313939392D382E687770> i ii iii iv v vi 1 2 3 4 가상대학 시스템의 국내외 현황 조사 가상대학 플랫폼 개발 이상적인 가상대학시스템의 미래상 제안 5 웹-기반 가상대학 시스템 전통적인 교수 방법 시간/공간 제약을 극복한 학습동기 부여 교수의 일방적인 내용전달 교수와 학생간의 상호작용 동료 학생들 간의 상호작용 가상대학 운영 공지사항,강의록 자료실, 메모 질의응답,

More information

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc NTAS and FRAME BUILDER Install Guide NTAS and FRAME BUILDER Version 2.5 Copyright 2003 Ari System, Inc. All Rights reserved. NTAS and FRAME BUILDER are trademarks or registered trademarks of Ari System,

More information

제11장 프로세스와 쓰레드

제11장 프로세스와 쓰레드 제9장자바쓰레드 9.1 Thread 기초 (1/5) 프로그램 명령어들의연속 (a sequence of instruction) 프로세스 / Thread 실행중인프로그램 (program in execution) 프로세스생성과실행을위한함수들 자바 Thread 2 9.1 Thread 기초 (2/5) 프로세스단위작업의문제점 프로세스생성시오버헤드 컨텍스트스위치오버헤드

More information

JAVA PROGRAMMING 실습 09. 예외처리

JAVA PROGRAMMING 실습 09. 예외처리 2015 학년도 2 학기 예외? 프로그램실행중에발생하는예기치않은사건 예외가발생하는경우 정수를 0으로나누는경우 배열의크기보다큰인덱스로배열의원소를접근하는경우 파일의마지막부분에서데이터를읽으려고하는경우 예외처리 프로그램에문제를발생시키지않고프로그램을실행할수있게적절한조치를취하는것 자바는예외처리기를이용하여예외처리를할수있는기법제공 자바는예외를객체로취급!! 나뉨수를입력하시오

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 실습 1 배효철 th1g@nate.com 1 목차 조건문 반복문 System.out 구구단 모양만들기 Up & Down 2 조건문 조건문의종류 If, switch If 문 조건식결과따라중괄호 { 블록을실행할지여부결정할때사용 조건식 true 또는 false값을산출할수있는연산식 boolean 변수 조건식이 true이면블록실행하고 false 이면블록실행하지않음 3

More information

gnu-lee-oop-kor-lec06-3-chap7

gnu-lee-oop-kor-lec06-3-chap7 어서와 Java 는처음이지! 제 7 장상속 Super 키워드 상속과생성자 상속과다형성 서브클래스의객체가생성될때, 서브클래스의생성자만호출될까? 아니면수퍼클래스의생성자도호출되는가? class Base{ public Base(String msg) { System.out.println("Base() 생성자 "); ; class Derived extends Base

More information

웹연동 } 웹 (Web) 환경에서데이터베이스시스템을연동하는방법은다음과같다 } Server Client 구조의통신 (2-Tier) } Server Middleware Client 구조의통신 (3-Tier) 2

웹연동 } 웹 (Web) 환경에서데이터베이스시스템을연동하는방법은다음과같다 } Server Client 구조의통신 (2-Tier) } Server Middleware Client 구조의통신 (3-Tier) 2 DB 와 WEB 연동 (1) [2-Tier] Java Applet 이용 웹연동 } 웹 (Web) 환경에서데이터베이스시스템을연동하는방법은다음과같다 } Server Client 구조의통신 (2-Tier) } Server Middleware Client 구조의통신 (3-Tier) 2 JAVA Applet 을이용한 Client Server 연동기법 } Applet

More information

Spring Boot/JDBC JdbcTemplate/CRUD 예제

Spring Boot/JDBC JdbcTemplate/CRUD 예제 Spring Boot/JDBC JdbcTemplate/CRUD 예제 오라클자바커뮤니티 (ojc.asia, ojcedu.com) Spring Boot, Gradle 과오픈소스인 MariaDB 를이용해서 EMP 테이블을만들고 JdbcTemplate, SimpleJdbcTemplate 을이용하여 CRUD 기능을구현해보자. 마리아 DB 설치는다음 URL 에서확인하자.

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 Power Java 제 20 장패키지 이번장에서학습할내용 패키지의개념 패키지로묶는방법 패키지사용 기본패키지 유틸리티패키지 패키지는연관된클래스들을묶는기법입니다. 패키지란? 패키지 (package) : 클래스들을묶은것 자바라이브러리도패키지로구성 ( 예 ) java.net 패키지 네트워크관련라이브러리 그림 20-1. 패키지의개념 예제 패키지생성하기 Q: 만약패키지문을사용하지않은경우에는어떻게되는가?

More information

PowerPoint Presentation

PowerPoint Presentation Class - Property Jo, Heeseung 목차 section 1 클래스의일반구조 section 2 클래스선언 section 3 객체의생성 section 4 멤버변수 4-1 객체변수 4-2 클래스변수 4-3 종단 (final) 변수 4-4 멤버변수접근방법 section 5 멤버변수접근한정자 5-1 public 5-2 private 5-3 한정자없음

More information

문서의 제목 나눔고딕B, 54pt

문서의 제목 나눔고딕B, 54pt Eclipse JDT 1. 도구개요 2. 설치및실행 3. 주요기능 4. 활용예제 1. 도구개요 1.1 도구정보요약 도구명 Eclipse JDT (http://www.eclipse.org/) 라이선스 Eclipse Public License v1.0 소개 JDT(Java Development Toolkit) 는 Eclipse 의가장기본적인 plug-in 으로

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 클래스, 객체, 메소드 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 필드만있는클래스 텔레비젼 2 예제 1. 필드만있는클래스 3 예제 2. 여러개의객체생성하기 4 5 예제 3. 메소드가추가된클래스 public class Television { int channel; // 채널번호 int volume; // 볼륨 boolean

More information

<4D F736F F F696E74202D20C1A63233C0E520B1D7B7A1C7C820C7C1B7CEB1D7B7A1B9D628B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20C1A63233C0E520B1D7B7A1C7C820C7C1B7CEB1D7B7A1B9D628B0ADC0C729205BC8A3C8AF20B8F0B5E55D> Power Java 제 23 장그래픽프로그래밍 이번장에서학습할내용 자바에서의그래픽 기초사항 기초도형그리기 색상 폰트 Java 2D Java 2D를이용한그리기 Java 2D 를이용한채우기 도형회전과평행이동 자바를이용하여서화면에그림을그려봅시다. 자바그래픽데모 자바그래픽의두가지방법 자바그래픽 AWT Java 2D AWT를사용하면기본적인도형들을쉽게그릴수있다. 어디서나잘실행된다.

More information

PowerPoint Presentation

PowerPoint Presentation public class SumTest { public static void main(string a1[]) { int a, b, sum; a = Integer.parseInt(a1[0]); b = Integer.parseInt(a1[1]); sum = a + b ; // 두수를더하는부분입니다 System.out.println(" 두수의합은 " + sum +

More information

gnu-lee-oop-kor-lec10-1-chap10

gnu-lee-oop-kor-lec10-1-chap10 어서와 Java 는처음이지! 제 10 장이벤트처리 이벤트분류 액션이벤트 키이벤트 마우스이동이벤트 어댑터클래스 스윙컴포넌트에의하여지원되는이벤트는크게두가지의카테고리로나누어진다. 사용자가버튼을클릭하는경우 사용자가메뉴항목을선택하는경우 사용자가텍스트필드에서엔터키를누르는경우 두개의버튼을만들어서패널의배경색을변경하는프로그램을작성하여보자. 이벤트리스너는하나만생성한다. class

More information

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

Microsoft PowerPoint 자바-기본문법(Ch2).pptx 자바기본문법 1. 기본사항 2. 자료형 3. 변수와상수 4. 연산자 1 주석 (Comments) 이해를돕기위한설명문 종류 // /* */ /** */ 활용예 javadoc HelloApplication.java 2 주석 (Comments) /* File name: HelloApplication.java Created by: Jung Created on: March

More information

Interstage5 SOAP서비스 설정 가이드

Interstage5 SOAP서비스 설정 가이드 Interstage 5 Application Server ( Solaris ) SOAP Service Internet Sample Test SOAP Server Application SOAP Client Application CORBA/SOAP Server Gateway CORBA/SOAP Gateway Client INTERSTAGE SOAP Service

More information

03-JAVA Syntax(2).PDF

03-JAVA Syntax(2).PDF JAVA Programming Language Syntax of JAVA (literal) (Variable and data types) (Comments) (Arithmetic) (Comparisons) (Operators) 2 HelloWorld application Helloworldjava // class HelloWorld { //attribute

More information

Cluster management software

Cluster management software 자바네트워크프로그래밍 (OCJP 국제공인자격취득중심 ) 충북대학교 최민 기본예제 예외클래스를정의하고사용하는예제 class NewException extends Exception { public class ExceptionTest { static void methoda() throws NewException { System.out.println("NewException

More information

Chap7.PDF

Chap7.PDF Chapter 7 The SUN Intranet Data Warehouse: Architecture and Tools All rights reserved 1 Intranet Data Warehouse : Distributed Networking Computing Peer-to-peer Peer-to-peer:,. C/S Microsoft ActiveX DCOM(Distributed

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 그래픽사용자인터페이스 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 프레임생성 (1) import javax.swing.*; public class FrameTest { public static void main(string[] args) { JFrame f = new JFrame("Frame Test"); JFrame

More information

PowerPoint Presentation

PowerPoint Presentation Package Class 3 Heeseung Jo 목차 section 1 패키지개요와패키지의사용 section 2 java.lang 패키지의개요 section 3 Object 클래스 section 4 포장 (Wrapper) 클래스 section 5 문자열의개요 section 6 String 클래스 section 7 StringBuffer 클래스 section

More information

Microsoft PowerPoint - Java7.pptx

Microsoft PowerPoint - Java7.pptx HPC & OT Lab. 1 HPC & OT Lab. 2 실습 7 주차 Jin-Ho, Jang M.S. Hanyang Univ. HPC&OT Lab. jinhoyo@nate.com HPC & OT Lab. 3 Component Structure 객체 (object) 생성개념을이해한다. 외부클래스에대한접근방법을이해한다. 접근제어자 (public & private)

More information

(Microsoft PowerPoint - Chapter17 RMI.ppt [\310\243\310\257 \270\360\265\345])

(Microsoft PowerPoint - Chapter17 RMI.ppt [\310\243\310\257 \270\360\265\345]) Chapter 17. RMI Mingyu Lim Collaborative Computing Systems Lab, School of Internet & Multimedia Engineering Konkuk University, Seoul, Korea 학습목표 RMI란 RMI 구조 RMI는어떻게동작하는가 로컬객체를원격객체로변경하기 RMI를이용한계산기애플리케이션

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 실습문제 Chapter 05 데이터베이스시스템... 오라클로배우는데이터베이스개론과실습 1. 실습문제 1 (5 장심화문제 : 각 3 점 ) 6. [ 마당서점데이터베이스 ] 다음프로그램을 PL/SQL 저장프로시져로작성하고실행해 보시오. (1) ~ (2) 7. [ 마당서점데이터베이스 ] 다음프로그램을 PL/SQL 저장프로시져로작성하고실행해 보시오. (1) ~ (5)

More information

Design Issues

Design Issues 11 COMPUTER PROGRAMMING INHERIATANCE CONTENTS OVERVIEW OF INHERITANCE INHERITANCE OF MEMBER VARIABLE RESERVED WORD SUPER METHOD INHERITANCE and OVERRIDING INHERITANCE and CONSTRUCTOR 2 Overview of Inheritance

More information

슬라이드 1

슬라이드 1 UNIT 16 예외처리 로봇 SW 교육원 3 기 최상훈 학습목표 2 예외처리구문 try-catch-finally 문을사용핛수있다. 프로그램오류 3 프로그램오류의종류 컴파일에러 (compile-time error) : 컴파일실행시발생 럮타임에러 (runtime error) : 프로그램실행시발생 에러 (error) 프로그램코드에의해서해결될수없는심각핚오류 ex)

More information

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 (   ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각 JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( http://java.sun.com/javase/6/docs/api ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각선의길이를계산하는메소드들을작성하라. 직사각형의가로와세로의길이는주어진다. 대각선의길이는 Math클래스의적절한메소드를이용하여구하라.

More information

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx 2018 학년도 1 학기 JAVA 프로그래밍 II 514760-1 2018 년봄학기 5/10/2018 박경신 Lab#1 (ImageTest) Lab#1 은영상파일 (Image) 을읽어서정보를출력 Java Tutorials Lesson: Working with Images https://docs.oracle.com/javase/tutorial/2d/images/index.html

More information

윈도우시스템프로그래밍

윈도우시스템프로그래밍 데이터베이스및설계 MySQL 을위한 MFC 를사용한 ODBC 프로그래밍 2012.05.10. 오병우 컴퓨터공학과금오공과대학교 http://www.apmsetup.com 또는 http://www.mysql.com APM Setup 설치발표자료참조 Department of Computer Engineering 2 DB 에속한테이블보기 show tables; 에러발생

More information

FileMaker ODBC 및 JDBC 가이드

FileMaker ODBC 및 JDBC 가이드 FileMaker ODBC JDBC 2004-2019 FileMaker, Inc.. FileMaker, Inc. 5201 Patrick Henry Drive Santa Clara, California 95054 FileMaker, FileMaker Cloud, FileMaker Go FileMaker, Inc.. FileMaker WebDirect FileMaker,

More information

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다. Eclipse 개발환경에서 WindowBuilder 를이용한 Java 프로그램개발 이예는 Java 프로그램의기초를이해하고있는사람을대상으로 Embedded Microcomputer 를이용한제어시스템을 PC 에서 Serial 통신으로제어 (Graphical User Interface (GUI) 환경에서 ) 하는프로그램개발예를설명한다. WindowBuilder:

More information

Microsoft PowerPoint - ÀÚ¹Ù08Àå-2.ppt

Microsoft PowerPoint - ÀÚ¹Ù08Àå-2.ppt AWT 컴포넌트 (2) 1. 메뉴 2. 컨테이너와컨트롤 3. 배치관리자 메뉴관련클래스계층구조 Object MenuComponent MenuBar MenuItem Menu CheckboxMenuItem PopupMenu 메뉴 풀다운메뉴 제목표시줄밑의메뉴바를가짐 메뉴만들기과정 MenuBar 객체생성 MenuBar 에추가할 Menu 객체를생성 Menu 에추가할또다른서브

More information

슬라이드 1

슬라이드 1 이벤트 () 란? - 사용자가입력장치 ( 키보드, 마우스등 ) 등을이용해서발생하는사건 - 이벤트를처리하는프로그램은이벤트가발생할때까지무한루프를돌면서대기상태에있는다. 이벤트가발생하면발생한이벤트의종류에따라특정한작업을수행한다. - 이벤트관련프로그램작성을위해 java.awt.event.* 패키지가필요 - 버튼을누른경우, 1 버튼클릭이벤트발생 2 발생한이벤트인식 ( 이벤트리스너가수행

More information

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D> Power Java 제 8 장클래스와객체 I 이번장에서학습할내용 클래스와객체 객체의일생직접 메소드클래스를 필드작성해 UML 봅시다. QUIZ 1. 객체는 속성과 동작을가지고있다. 2. 자동차가객체라면클래스는 설계도이다. 먼저앞장에서학습한클래스와객체의개념을복습해봅시다. 클래스의구성 클래스 (class) 는객체의설계도라할수있다. 클래스는필드와메소드로이루어진다.

More information

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx To be an Android Expert 문양세강원대학교 IT 대학컴퓨터학부 Eclipse (IDE) JDK Android SDK with ADT IDE: Integrated Development Environment JDK: Java Development Kit (Java SDK) ADT: Android Development Tools 2 JDK 설치 Eclipse

More information

No Slide Title

No Slide Title 자바소개 이충기 명지대학교컴퓨터공학과 자바 (Java) 의정의 C++ 에기초한선 (Sun) 사에의해개발된프로그래밍언어 객체지향언어 인터넷과웹을위한프로그래밍언어 2 자바의재정의 최초의범용소프트웨어플랫폼 언어, 자바가상컴퓨터와클래스라이브러리와 API 들의집합으로구성 인터넷컴퓨팅을위한플랫폼 - 하드웨어와독립 - 확장성이있음 - 개방적임 3 자바의현재 널리채택되고보편적언어가됨

More information

혼자서일을다하는 JSP. 이젠일을 Servlet 과나눠서한다. JSP와서블릿의표현적인차이 - JSP는 <html> 내에서자바를사용할수있는수단을제공한다. - 서블릿은자바내에서 <html> 을작성할수있는수단을제공한다. - JSP나서블릿으로만웹페이지를작성하면자바와다양한코드가

혼자서일을다하는 JSP. 이젠일을 Servlet 과나눠서한다. JSP와서블릿의표현적인차이 - JSP는 <html> 내에서자바를사용할수있는수단을제공한다. - 서블릿은자바내에서 <html> 을작성할수있는수단을제공한다. - JSP나서블릿으로만웹페이지를작성하면자바와다양한코드가 혼자서일을다하는 JSP. 이젠일을 Servlet 과나눠서한다. JSP와서블릿의표현적인차이 - JSP는 내에서자바를사용할수있는수단을제공한다. - 서블릿은자바내에서 을작성할수있는수단을제공한다. - JSP나서블릿으로만웹페이지를작성하면자바와다양한코드가웹페이지내에뒤섞여있어서웹페이지의화면설계가점점어려워진다. - 서블릿이먼저등장하였으나, 자바내에

More information

var answer = confirm(" 확인이나취소를누르세요."); // 확인창은사용자의의사를묻는데사용합니다. if(answer == true){ document.write(" 확인을눌렀습니다."); else { document.write(" 취소를눌렀습니다.");

var answer = confirm( 확인이나취소를누르세요.); // 확인창은사용자의의사를묻는데사용합니다. if(answer == true){ document.write( 확인을눌렀습니다.); else { document.write( 취소를눌렀습니다.); 자바스크립트 (JavaScript) - HTML 은사용자에게인터페이스 (interface) 를제공하는언어 - 자바스크립트는서버로데이터를전송하지않고서할수있는데이터처리를수행한다. - 자바스크립트는 HTML 나 JSP 에서작성할수있고 ( 내부스크립트 ), 별도의파일로도작성이가능하다 ( 외 부스크립트 ). - 내부스크립트 - 외부스크립트

More information

JUNIT 실습및발표

JUNIT 실습및발표 JUNIT 실습및발표 JUNIT 접속 www.junit.org DownLoad JUnit JavaDoc API Document 를참조 JUNIT 4.8.1 다운로드 설치파일 (jar 파일 ) 을다운로드 CLASSPATH 를설정 환경변수에서설정 실행할클래스에서 import JUnit 설치하기 테스트실행주석 @Test Test 를실행할 method 앞에붙임 expected

More information

FileMaker 15 ODBC 및 JDBC 설명서

FileMaker 15 ODBC 및 JDBC 설명서 FileMaker 15 ODBC JDBC 2004-2016 FileMaker, Inc.. FileMaker, Inc. 5201 Patrick Henry Drive Santa Clara, California 95054 FileMaker FileMaker Go FileMaker, Inc.. FileMaker WebDirect FileMaker, Inc... FileMaker.

More information

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1); void method() 2); void method1() public class Test 3); args) A 제 10 장상속 예제 1) ConstructorTest.java class Parent public Parent() super - default"); public Parent(int i) this("hello"); super(int) constructor" + i); public Parent(char c) this(); super(char) constructor

More information

05-class.key

05-class.key 5 : 2 (method) (public) (private) (interface) 5.1 (Method), (public method) (private method) (constructor), 3 4 5.2 (client). (receiver)., System.out.println("Hello"); (client object) (receiver object)

More information

JMF3_심빈구.PDF

JMF3_심빈구.PDF JMF JSTORM http://wwwjstormpekr Issued by: < > Revision: Document Information Document title: Document file name: Revision number: Issued by: JMF3_ doc Issue Date:

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Network Programming Jo, Heeseung Network 실습 네트워크프로그래밍 멀리떨어져있는호스트들이서로데이터를주고받을수있도록프로그램을구현하는것 파일과는달리데이터를주고받을대상이멀리떨어져있기때문에소프트웨어차원에서호스트들간에연결을해주는장치가필요 이러한기능을해주는장치로소켓이라는인터페이스를많이사용 소켓프로그래밍이란용어와네트워크프로그래밍이랑용어가같은의미로사용

More information

<4D F736F F F696E74202D20C1A63234C0E520C0D4C3E2B7C228B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20C1A63234C0E520C0D4C3E2B7C228B0ADC0C729205BC8A3C8AF20B8F0B5E55D> Power Java 제 24 장입출력 이번장에서학습할내용 스트림이란? 스트림의분류 바이트스트림 문자스트림 형식입출력 명령어행에서입출력 파일입출력 스트림을이용한입출력에대하여살펴봅시다. 스트림 (stream) 스트림 (stream) 은 순서가있는데이터의연속적인흐름 이다. 스트림은입출력을물의흐름처럼간주하는것이다. 스트림들은연결될수있다. 중간점검문제 1. 자바에서는입출력을무엇이라고추상화하는가?

More information

12-file.key

12-file.key 11 (String).. java.lang.stringbuffer. s String s = "abcd"; s = s + "e"; a b c d e a b c d e ,., "910359,, " "910359" " " " " (token) (token),, (delimiter). java.util.stringtokenizer String s = "910359,,

More information

Java ...

Java ... 컴퓨터언어 1 Java 제어문 조성일 조건문 : if, switch 어떠한조건을조사하여각기다른명령을실행 if 문, switch 문 if 문 if - else 문형식 if 문형식 if ( 조건식 ) { 명령문 1; 명령문 2;... if ( 조건식 ) { 명령문 1; 명령문 2;... else { 명령문 a; 명령문 b;... 예제 1 정수를입력받아짝수와홀수를판별하는프로그램을작성하시오.

More information

<4D F736F F F696E74202D20C1A63235C0E520B3D7C6AEBFF6C5A920C7C1B7CEB1D7B7A1B9D628B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20C1A63235C0E520B3D7C6AEBFF6C5A920C7C1B7CEB1D7B7A1B9D628B0ADC0C729205BC8A3C8AF20B8F0B5E55D> Power Java 제 25 장네트워크프로그래밍 이번장에서학습할내용 네트워크프로그래밍의개요 URL 클래스 TCP를이용한통신 TCP를이용한서버제작 TCP를이용한클라이언트제작 UDP 를이용한통신 자바를이용하여서 TCP/IP 통신을이용하는응응프로그램을작성하여봅시다. 서버와클라이언트 서버 (Server): 사용자들에게서비스를제공하는컴퓨터 클라이언트 (Client):

More information

5장.key

5장.key JAVA Programming 1 (inheritance) 2!,!! 4 3 4!!!! 5 public class Person {... public class Student extends Person { // Person Student... public class StudentWorker extends Student { // Student StudentWorker...!

More information

10.0pt1height.7depth.3width±â10.0pt1height.7depth.3widthÃÊ10.0pt1height.7depth.3widthÅë10.0pt1height.7depth.3width°è10.0pt1height.7depth.3widthÇÁ10.0pt1height.7depth.3width·Î10.0pt1height.7depth.3width±×10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width¹Ö pt1height.7depth.3widthŬ10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width½º, 10.0pt1height.7depth.3width°´10.0pt1height.7depth.3widthü, 10.0pt1height.7depth.3widthº¯10.0pt1height.7depth.3width¼ö, 10.0pt1height.7depth.3width¸Þ10.0pt1height.7depth.3width¼Ò10.0pt1height.7depth.3widthµå

10.0pt1height.7depth.3width±â10.0pt1height.7depth.3widthÃÊ10.0pt1height.7depth.3widthÅë10.0pt1height.7depth.3width°è10.0pt1height.7depth.3widthÇÁ10.0pt1height.7depth.3width·Î10.0pt1height.7depth.3width±×10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width¹Ö pt1height.7depth.3widthŬ10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width½º, 10.0pt1height.7depth.3width°´10.0pt1height.7depth.3widthü, 10.0pt1height.7depth.3widthº¯10.0pt1height.7depth.3width¼ö, 10.0pt1height.7depth.3width¸Þ10.0pt1height.7depth.3width¼Ò10.0pt1height.7depth.3widthµå 기초통계프로그래밍 클래스, 객체, 변수, 메소드 hmkang@hallym.ac.kr 금융정보통계학과 강희모 ( 금융정보통계학과 ) 기초통계프로그래밍 1 / 26 자바구성파일 소스파일 소스파일 : 사용자가직접에디터에입력하는파일로자바프로그램언어가제공하는형식으로제작 소스파일의확장자는.java 임 컴파일 : javac 명령어를이용하여프로그래머가만든소스파일을컴파일하여실행파일.class

More information

Microsoft PowerPoint - 2강

Microsoft PowerPoint - 2강 컴퓨터과학과 김희천교수 학습개요 Java 언어문법의기본사항, 자료형, 변수와상수선언및사용법, 각종연산자사용법, if/switch 등과같은제어문사용법등에대해설명한다. 또한 C++ 언어와선언 / 사용방법이다른 Java의배열선언및사용법에대해서설명한다. Java 언어의효과적인활용을위해서는기본문법을이해하는것이중요하다. 객체지향의기본개념에대해알아보고 Java에서어떻게객체지향적요소를적용하고있는지살펴본다.

More information

윈도우시스템프로그래밍

윈도우시스템프로그래밍 데이타베이스 MySQL 을위한 MFC 를사용한 ODBC 프로그래밍 2013.05.15. 오병우 컴퓨터공학과금오공과대학교 http://www.apmsetup.com 또는 http://www.mysql.com APM Setup 설치발표자료참조 Department of Computer Engineering 2 DB 에속한테이블보기 show tables; 에러발생

More information

자바GUI실전프로그래밍2_장대원.PDF

자바GUI실전프로그래밍2_장대원.PDF JAVA GUI - 2 JSTORM http://wwwjstormpekr JAVA GUI - 2 Issued by: < > Document Information Document title: JAVA GUI - 2 Document file name: Revision number: Issued by: Issue Date:

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Web server porting 2 Jo, Heeseung Web 을이용한 LED 제어 Web 을이용한 LED 제어프로그램 web 에서데이터를전송받아타겟보드의 LED 를조작하는프로그램을작성하기위해다음과같은소스파일을생성 2 Web 을이용한 LED 제어 LED 제어프로그램작성 8bitled.html 파일을작성 root@ubuntu:/working/web# vi

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 제 5 장생성자와접근제어 1. 객체지향기법을이해한다. 2. 클래스를작성할수있다. 3. 클래스에서객체를생성할수있다. 4. 생성자를이용하여객체를초기화할수 있다. 5. 접근자와설정자를사용할수있다. 이번장에서만들어볼프로그램 생성자 생성자 (constructor) 는초기화를담당하는함수 생성자가필요한이유 #include using namespace

More information

본 강의에 들어가기 전

본 강의에 들어가기 전 웹서버프로그래밍 2 JSP 개요 01. JSP 개요 (1) 서블릿 (Servlet) 과 JSP(Java Server Page) 서블릿은자바를이용한서버프로그래밍기술 초기웹프로그래밍기술인 CGI(Common Gateway Interface) 를대체하기위해개발되었으나, 느린처리속도, 많은메모리요구, 불편한화면제어등의한계로 PHP, ASP 등서버스크립트언어등장 JSP

More information

파일로입출력하기II - 파일출력클래스중에는데이터를일정한형태로출력하는기능을가지고있다. - PrintWriter와 PrintStream을사용해서원하는형태로출력할수있다. - PrintStream은구버전으로가능하면 PrintWriter 클래스를사용한다. PrintWriter

파일로입출력하기II - 파일출력클래스중에는데이터를일정한형태로출력하는기능을가지고있다. - PrintWriter와 PrintStream을사용해서원하는형태로출력할수있다. - PrintStream은구버전으로가능하면 PrintWriter 클래스를사용한다. PrintWriter 파일로입출력하기II - 파일출력클래스중에는데이터를일정한형태로출력하는기능을가지고있다. - PrintWriter와 PrintStream을사용해서원하는형태로출력할수있다. - PrintStream은구버전으로가능하면 PrintWriter 클래스를사용한다. PrintWriter 클래스의사용법은다음과같다. PrintWriter writer = new PrintWriter("output.txt");

More information

01-OOPConcepts(2).PDF

01-OOPConcepts(2).PDF Object-Oriented Programming Concepts Tel: 02-824-5768 E-mail: hhcho@selabsoongsilackr? OOP (Object) (Encapsulation) (Message) (Class) (Inheritance) (Polymorphism) (Abstract Class) (Interface) 2 1 + = (Dependency)

More information

목차 BUG DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4

목차 BUG DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4 ALTIBASE HDB 6.5.1.5.10 Patch Notes 목차 BUG-46183 DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG-46249 [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4 BUG-46266 [sm]

More information

Chapter 1

Chapter 1 3 Oracle 설치 Objectives Download Oracle 11g Release 2 Install Oracle 11g Release 2 Download Oracle SQL Developer 4.0.3 Install Oracle SQL Developer 4.0.3 Create a database connection 2 Download Oracle 11g

More information

1

1 1 1....6 1.1...6 2. Java Architecture...7 2.1 2SDK(Software Development Kit)...8 2.2 JRE(Java Runtime Environment)...9 2.3 (Java Virtual Machine, JVM)...10 2.4 JVM...11 2.5 (runtime)jvm...12 2.5.1 2.5.2

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 명품 Java Essential 1 2 학습목표 1. 소켓통신에대한이해 2. 자바로간단한소켓통신프로그램작성 TCP/IP 소개 3 TCP/IP 프로토콜 두시스템간에데이터가손상없이안전하게전송되도록하는통신프로토콜 TCP 에서동작하는응용프로그램사례 e-mail, FTP, 웹 (HTTP) 등 TCP/IP 특징 연결형통신 한번연결후계속데이터전송가능 보낸순서대로받아응용프로그램에게전달

More information

슬라이드 1

슬라이드 1 전자정부개발프레임워크 1 일차실습 LAB 개발환경 - 1 - 실습목차 LAB 1-1 프로젝트생성실습 LAB 1-2 Code Generation 실습 LAB 1-3 DBIO 실습 ( 별첨 ) LAB 1-4 공통컴포넌트생성및조립도구실습 LAB 1-5 템플릿프로젝트생성실습 - 2 - LAB 1-1 프로젝트생성실습 (1/2) Step 1-1-01. 구현도구에서 egovframe>start>new

More information

Microsoft PowerPoint - GUI _DB연동.ppt [호환 모드]

Microsoft PowerPoint - GUI _DB연동.ppt [호환 모드] GUI 설계 6 주차 DB 연동김문정 tops@yd.ac.kr 강의순서강의전환경 JDK 설치및환경설정톰캣설치및환경설정이클립스 (JEE) 설치및환경설정 MySQL( 드라이버 ) 설치및커넥터드라이브연결 DB 생성 - 계정생성이클립스에서 DB에연결서버생성 - 프로젝트생성 DB연결테이블생성및등록 2 MySQL 설치확인 mysql - u root -p MySQL 에데이터베이스추가

More information

4장.문장

4장.문장 문장 1 배정문 혼합문 제어문 조건문반복문분기문 표준입출력 입출력 형식화된출력 [2/33] ANSI C 언어와유사 문장의종류 [3/33] 값을변수에저장하는데사용 형태 : < 변수 > = < 식 > ; remainder = dividend % divisor; i = j = k = 0; x *= y; 형변환 광역화 (widening) 형변환 : 컴파일러에의해자동적으로변환

More information

API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어

API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어서가장중요한부분이라고도할수있기때문입니다. 1. 새로운메크로생성 새메크로만들기버튺을클릭하여파일을생성합니다. 2. 메크로저장 -

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 배효철 th1g@nate.com 1 목차 표준입출력 파일입출력 2 표준입출력 표준입력은키보드로입력하는것, 주로 Scanner 클래스를사용. 표준출력은화면에출력하는메소드를사용하는데대표적으로 System.out.printf( ) 를사용 3 표준입출력 표준출력 : System.out.printlf() 4 표준입출력 Example 01 public static void

More information

(Microsoft PowerPoint - LZVNQBAJWGTC.ppt [\310\243\310\257 \270\360\265\345])

(Microsoft PowerPoint - LZVNQBAJWGTC.ppt [\310\243\310\257 \270\360\265\345]) GUI 인터페이스의이벤트 학습목표 윈도우환경에서작성된 GUI 인터페이스의이벤트개념을이해한다. 다양한컴포넌트에대한이벤트를처리한다 이벤트란? 자바이벤트란 사용자가키보드, 마우스등의장치로부터 AWT 컴포넌트에발생시키는모든사건을의미 이벤트주도형프로그램은사용자로부터발생된이벤트를처리하여사용자와상호작용을가능하게함 자바이벤트모델 컴퓨터 키보드 운영체제 마우스 이벤트객체자바가상머신이벤트소스객체이벤트리스너객체애플리케이션

More information

Microsoft PowerPoint - Lecture_Note_5.ppt [Compatibility Mode]

Microsoft PowerPoint - Lecture_Note_5.ppt [Compatibility Mode] TCP Server/Client Department of Computer Engineering Kyung Hee University. Choong Seon Hong 1 TCP Server Program Procedure TCP Server socket() bind() 소켓생성 소켓번호와소켓주소의결합 listen() accept() read() 서비스처리, write()

More information

교육2 ? 그림

교육2 ? 그림 Interstage 5 Apworks EJB Application Internet Revision History Edition Date Author Reviewed by Remarks 1 2002/10/11 2 2003/05/19 3 2003/06/18 EJB 4 2003/09/25 Apworks5.1 [ Stateless Session Bean ] ApworksJava,

More information

JAVA PROGRAMMING 실습 02. 표준 입출력

JAVA PROGRAMMING 실습 02. 표준 입출력 자바의기본구조? class HelloJava{ public static void main(string argv[]){ system.out.println( hello,java ~ ){ } } # 하나하나뜯어살펴봅시다! public class HelloJava{ 클래스정의 public static void main(string[] args){ System.out.println(

More information

Windows 8에서 BioStar 1 설치하기

Windows 8에서 BioStar 1 설치하기 / 콘텐츠 테이블... PC에 BioStar 1 설치 방법... Microsoft SQL Server 2012 Express 설치하기... Running SQL 2012 Express Studio... DBSetup.exe 설정하기... BioStar 서버와 클라이언트 시작하기... 1 1 2 2 6 7 1/11 BioStar 1, Windows 8 BioStar

More information

ThisJava ..

ThisJava .. 자바언어에정확한타입을추가한 ThisJava 소개 나현익, 류석영 프로그래밍언어연구실 KAIST 2014 년 1 월 14 일 나현익, 류석영 자바언어에정확한타입을추가한 ThisJava 소개 1/29 APLAS 2013 나현익, 류석영 자바 언어에 정확한 타입을 추가한 ThisJava 소개 2/29 실제로부딪힌문제 자바스크립트프로그램분석을위한요약도메인 나현익,

More information