Object-Oriented Programming : Java Programming 2011 년도봄학기숙명여자대학교멀티미디어과학과 윤용익 010-5091-0388 yiyoon@sookmyung.ac.kr 자바언어소개 1
강의 Schedule 1주 : Chapter 1 (overview) 2주 : Chapter 2 ( 연산자와제어구조 ) 3주 : Chapter 3 (Object-Oriented Programming I 객체의개념 ) 4주 : Chapter 4 (Object-Oriented Programming II 클래스의특징 ) 5주 : Chapter 5, 6 (Object-Oriented Programming III, IV - 예외처리 ) 6주 : AWT (Chapter 7, 10, 구 Chapter 4 : AWT를이용한 GUI 작성 ) 7주 : Applet & java 2D (Chapter 10, 구 Chapter 5 ) 8주 : 중간고사 9주 : Event Programming (Chapter 7.3, 구 Chapter 7 : Event programming) 10주 :Event Programming (Chapter 7.3, 구 Chapter 7 : Event programming) 11주 : Swing (Chapter 7, 8, 9, 구 Chapter 6) 12주 : MVC Model (Chapter 8) 13주 : Chapter 12(Process와 Thread) 14주 : Term Project 발표 15주 : 기말고사 자바언어소개 2
프로그래머를위한 Java 2, 4 판 제1장자바언어소개
What's in a Name? JAVA James Gosling, Arthur Van, Andy Bechtolsheim.. Indonessian Coffee Stuff Behind Story by Sun MicroSystems 1990, Started by James Gosling, "Green" Project 1991, Consumer Electronics에적용... 실패 1992, Interpreter "Oak(Java)" 1993, Interactive TV에적용... 실패 1994, WebRunner(HotJava) WWW Browser in Oak(Java) 1995, Java & HotJava at SunWorld'95 1996, JDK 1.0 announcement 1997, JDK1.1, HotJava 1.0 Release 자바언어소개 4
Overview 자바개발환경 (JDK) Java 는단순한언어에서개발환경으로확대 Sun 은점차자바를이용할수있는분야를확대해나감 자바반지, 자바카드, 피코자바등의하드웨어 자바는언어, 개발환경의개념을넘어서하나의컴퓨팅환경으로발전 자바언어개발환경예 : JDK 각종지원클래스자바개발도구 컴퓨팅 환경 자바언어소개 5
Java : Many Aspects WWW Communication Programming Language Software Engineering Consummer Electronics Business 자바언어소개 6
Java 종류 자바기술 J2SE J2EE J2ME 자바언어소개 7
Java Target Scope Embedded Space Java Classes Java Classes TV Profile Screen Phone Profile Car Profile CDC Foundation Class HotSpot Profile JVM CVM KVM Card VM MIDP Kitty- Hawk Profile CLDC Core Class DojaP Servers Workstations PCs Thin Clients Battery Powered Card J2EE J2SE J2ME (Java 2 Micro Edition) Smart Card 자바언어소개 8
Java Platforms Java Virtual Machine + Java APIs 자바언어소개 9
JavaOS Status JavaOSTM 1.0 shipped to licensees in early March Working with the leading Real Time Operating System (RTOS) companies Demoed JavaPC Ported to six different processors Portability 자바언어소개 10
JavaOS Architecture 자바언어소개 11
Java Program Application : 일반응용프로그램 Applet: 일반적인 Client 용프로그램 Midlet: Mobile 단말기용 Client 용프로그램 Servlet: Server 용프로그램 xlet : 방송용디바이스의응용프로그램 JSP (Java Server Page) Ajax : RIA용프로그램 자바언어소개 12
자바관련사이트 http://java.sun.com/ - SUN 의공식자바사이트 자바언어소개 13
자바관련사이트 http://www.gamelan.com/ 자바언어소개 14
자바관련사이트 http://www.javaworld.com/ - 온라인상에서발행되는자바관련잡지 자바언어소개 15
자바관련사이트 http://developer.java.sun.com/ 자바언어소개 16
자바관련사이트 http://www.gnu.org/software/java/ - GNU 자바사이트 자바언어소개 17
자바관련사이트 http://www.javalobby.org/ 자바언어소개 18
1.1 자바란? Java 는 언어이다. 간단하고 (simple) 객체지향적이고 (object-oriented) 분산처리되고 (distributed) 인터프리트되고 (interpreted) 강건하고 (robust) 컴퓨터하드웨어에영향을받지않고 (architecture-neutral) 보안성이있으며 (secure) 포팅하기쉽고 (portable) 성능이우수하고 (high-performance) 멀티쓰레드를사용하고 (multi-threaded) 동적인 (dynamic) 자바언어소개 19
Simple Related to C/C++ : looks familiar to programmer C++ : eliminates pointer arithmetic, structs, typedef, union, need to free memory C++ : provides Exception, Automatic garbage collection, Thread synchronization, Rich predefined class library 자바언어소개 20
Object-Oriented Oriented Focuses design on Classes & Interface Encapsulation, Inherintance.. class Car { void beep() { System.out.println("beep"); } int maxspeed() { return 55; } } Car Porsche beep() maxspeed() maxspeed() Class Hierarchy / Inheritance Hierarchy class Porsche extends Car { int maxspeed() { return 200; } } 자바언어소개 21
Distributed designed to be run over a network has TCP/IP and HTTP capabilities Socket, URL processing, Multicast... RMI(Remote Method Invocation) SunSoft will soon bring CORBA-style(IDL) binding to Java able to invoke remote procedure 자바언어소개 22
Interpreted Unlike conventional language translators, Compiler converts source code into a machine-independent format(byte code) allow it to run on any computer H/W that has the Java runtime system(virtual Machine) Byte Code & Java Virtual Machine the key to application portability borrowed from Kenneth Bowles's innovative P-System 자바언어소개 23
Robust abstraction of pointer of conventional PLs best and worst feature cause of hard-to-find run-time error! Java eliminates pointer manipulation so eliminates runtime error don't have to to remember to de-allocate memory 자바언어소개 24
Architecture Neural Compiler generates Byte-code Which have nothing to do with a particular computer architecture Easy to interpret on any machine (Java virtual machine) Applet Browsing : SunOS4.1.x, Solaris2.x, HP/UX, SGI, IRIX, OSF/1, Linux, Windows98/NT... Application Interpretation : Solaris 2.x, Windows98/NT 자바언어소개 25
Secure Byte-code verification Partitioned name spaces imported code is not allowed to fork/exec file system read/write access control guarantees a virus free Applet Security Authentication(JDK) 자바언어소개 26
Portable Code =~ Data? Any Digital Device (Including Computer)? Zero Installation Application Invocation via Web Navigation 자바언어소개 27
High Performance Interpreters exact a performance toll from 20~30 times slower for CPU-intensive program to 5 times slower for network-based program Sun promises performance rivaling native C/C++ speed "JIT(just-in-time)" class compiler Boland Latte, MS J++... 자바언어소개 28
Multithreaded Allowed multiple concurrent threads of execution to be active at once Borrowed from Xerox's Cedar/Mesa synchronized multithread public synchronized void stop() { if (kicker!= null) { kicker.stop() ; kicker = null; } } private syncronized void startsort() { if (kicker == null!kicker.isalive()) { kicker = new Thread(this); kicker.start(); } } 자바언어소개 29
Dynamic Interfaces deal with systems's change differing much linkage manipulation until runtime eliminates fragile super-class problem a change in a parent class forces a recompiling of the child classes 자바언어소개 30
Dynamic Web Broswser Web previous java - static Indexing Location Transparency But still book-like : text and images Web now - dynamic Animation Interactive Synchronous http://www.cs.umbc.edu/~sli2/tetris.html 자바언어소개 31
1.2 환경설정하기 J2SDK 설치 http://java.sun.com/j2se 에서다운로드받을수있음. 환경설정 PATH J2SDK 에포함된명령어들을사용할수있도록하기위해서 설정한다. JAVA_HOME J2SDK 가설치된디렉터리를지정한다. J2SE 6.0 버전환경설정 환경변수이름 PATH JAVA_HOME 변수값 C:\Program Files\Java\jdk1.6.0\bin;%PATH% C:\Program Files\Java\jdk1.6.0 자바언어소개 32
Windows XP 상에서변수설정 제어판 -> 성능및유지관리 -> 시스템 -> 고급 환경변수 시스템변수 환경변수이름 변수값 PATH C:\Program Files\Java\jdk1.6.0\bin; C:\java\jdk1.6.0\bin; JAVA_HOME C:\Program Files\Java\jdk1.6.0 C:\java\jdk1.6.0 자바언어소개 33
1.2 환경설정하기 윈도우 2000/XP 에서환경설정 제어판 -> 시스템 -> 고급 -> 환경변수 -> 시스템변수 자바언어소개 34
1.2 환경설정하기 리눅스 / 유닉스 J2SDK 를 /usr/local/java 에설치. 만약 C-shell 을사용하면,.cshrc 파일에환경변수를설정. 예 : set path=( /usr/local/java/bin $path ) setenv JAVA_HOME /usr/local/java setenv CLASSPATH.:/usr/local/java/lib/tools.jar setenv LANG ko.cshrc 파일을편집하고, source 명령어를이용해서설정을적용시킴. 예 : % source ~/.cshrc 자바언어소개 35
EditPlus 편집기설치 www.editplus.com 자바언어소개 36
Groups and Tool 에명령어삽입 Javac NAME : JAVAC COMMAND : C:\Program Files\Java\jdk1.6.0\bin\javac.exe Argument : $(FileName) Initial : $(FileDir) Java NAME : JAVA COMMAND : C:\Program Files\Java\jdk1.6.0\bin\java.exe Argument : $(FileNameNoExt) Initial : $(FileDir) Appletviewer NAME : Appletviewer COMMAND : C:\Program Files\Java\jdk1.6.0\bin\appletviewer.exe Argument : $(FileName) Initial : $(FileDir) 자바언어소개 37
Eclipse 편집기설치 http://www.eclipse.org 자바언어소개 38
1.3 자바언어맛보기 예제 : HelloWorld.java 1 class HelloWorld { 2 3 // 주석부분 4 public static void main (String args[]) { 5 6 String msg = "World"; 7 8 System.out.print("Hello "); 9 System.out.println(msg); 10 } 11 } 자바언어소개 39
1.3 자바언어맛보기 컴파일 C:\> javac HelloWorld.java HelloWorld.class 파일이생성됨 실행 C:\> java HelloWorld Hello World 클래스파일에서파일확장자 (.class) 를제거하고, java 명령어를이용해서실행시킴 자바언어소개 40
1.4 포맷에맞게출력하기 포맷에따른출력 C 언어의 printf() 와유사한형태의출력을지원 포맷형태 자바언어소개 41
1.4 포맷에맞게출력하기 예제 : FormattedOutput.java 1 public class FormattedOutput { 2 public static void main(string args[]) { 3 String msg = "Hello World"; 4 int integral = 12345; 5 double floating = 123.4567; 결과 C:\> java FormattedOutput Hello World 12345 12345 123.456700 123.457 1.234567e+02 6 System.out.printf("%s n", msg); 7 System.out.printf("%d n%10d n", integral, integral); 8 System.out.printf("%f n%.3f n%1$e", floating, floating); } 자바언어소개 42
1.5 자바애플릿만들어보기 자바프로그램 응용프로그램 애플릿 응용프로그램 (application) 데스크탑에서실행되는일반적인프로그램 java 라는명령어를이용해서실행 애플릿 (applet) 웹브라우저에서실행되는자바프로그램 appletviewer 나웹브라우저를이용해서실행 자바언어소개 43
1.5 자바애플릿만들어보기 예제 : Hello.java 1 import java.awt.*; 2 import java.applet.*; 3 4 public class Hello extends Applet { 5 public void paint(graphics g) { 6 g.drawstring("hello World", 25, 25); 7 } 8 } 자바언어소개 44
1.5 자바애플릿만들어보기 예제 : Hello.html 결과 1 <html><head><title>hello</title></head> 2 <body> 3 <applet code=hello width=250 height=250> 4 </applet> 5 </body> 6 </html> C:\> javac Hello.java C:\> appletviewer Hello.html 자바언어소개 45
1.6 API 문서사용하기 J2SDK API 문서 http://java.sun.com/docs/ 한글문서 http://sunny.sarang.net/api/ API 사용하기 자바언어소개 46
1.6 API 문서사용하기 예제 : StringBufferTest.java 1 class StringBufferTest { 2 public static void main(string args[]) { 3 StringBuffer buf = new StringBuffer(); 4 buf.append("hello "); 5 buf.append("world!!"); 6 7 System.out.println(buf.toString()); 8 } 9 } 자바언어소개 47
1.7 초보자가자주범하는실수들 1. 자바는대소문자를구별 자바는프로그램에서는물론파일이름도대소문자를구별 2. 한글이름으로된디렉토리에서는잘실행되지않음 DOS에서한글이름의디렉토리를사용하는경우에문제가생길수있다 클래스경로 (path) 를찾는동안에한글이름의디렉터리는자바나웹브라우저가잘인식하지못하기때문임 3. 자바환경변수들이올바르게설정되어야함. 자바언어소개 48
1.7 초보자가자주범하는실수들 4. main() 이있는클래스를실행시켜야한다 main() 이없는클래스는 java 인터프리터로실행시킬수없다 5. main 은항상 public static void main(string args[]) 형태이다 6. 애플릿으로작성한클래스는항상 public 이다 7. 한파일에 public 클래스는 1 개를초과할수없다 한파일에는 public 클래스가최대 1 개이다 1 개를초과하는경우에는컴파일시에에러메시지를보여준다 8. public 으로선언된클래스가있는경우에파일이름은클래스이름과동일해야 9. 생성자 (constructor) 는리턴타입이없고, 클래스이름과동일하다 생성자는클래스이름과동일해야하고리턴타입이없어야함 리턴타입이있는경우에는일반함수로인식 자바언어소개 49
1.7 초보자가자주범하는실수들 10. 애플릿은애플릿뷰어나웹브라우저를이용해서실행시켜야한다. 11. HTML 에서애플릿의 width 와 height 사이에는 "," 가없다. <applet code= 클래스파일 width=300 height=200> </applet> 12. J2SDK 에서제공하는클래스이름과동일한이름으로클래스를만들지않는것이좋다. 13. 클래스의멤버필드와함수의아규먼트이름이같은경우, 아규먼트의이름이우선순위가높다. public class Test { int x; public Test(int x) { x = x; } } 자바언어소개 50
1.7 초보자가자주범하는실수들 14. HTML 에서애플릿의 code 부분에클래스이름이정확한지를확인 <applet code= 클래스파일이름 width=300 height=200> </applet> " 클래스파일이름 " 의철자가틀리는경우에 IOException 에러가발생 15. BorderLayout 를사용할때 "East", "South", "West", "North", "Center" 의대소문자구별및철자에유의 - 철자가틀리는경우에컴포넌트가화면에안보임 16. 애플릿에서 Image 나 AudioClip 을읽어올때 getcodebase( ) 는애플릿클래스가있는곳의 URL 을리턴 getdocumentbase( ) 는 HTML 파일이있는곳의 URL 을리턴 17. 자바언어의수많은클래스들과메소드를모두기억한다는것은불가능 사용하는 J2SDK 에맞는 API 문서를 java.sun.com 에서다운로드받아필요할때마다참조 자바언어소개 51
1.7 초보자가자주범하는실수들 18. Button a[] = new Button[10]; 이문장은버튼을만드는것이아니라버튼이들어갈배열을만듬 배열을생성하는것과배열안에들어갈객체를혼동하지마라!! 19. 자바언어에서는클래스나메소드에이름을붙이는규칙이있음 클래스이름은영어명사형으로붙이고대문자로시작 여러단어를사용할때는새로시작하는단어는 "_" 를사용하지않고, 대문자로시작 예 : Car, ChattingServer 메소드이름은동사형으로소문자로시작 여러단어를사용할때는마찬가지고시작하는단어를대문자로한다 예 : getname(), setlabel() 멤버필드의이름은의미에맞게붙이고소문자로시작한다 자바언어소개 52
1.8 자바환경도구의사용법 자바환경도구 J2SDK의 bin 디렉토리에들어있는여러가지실행프로그램 J2SDK 6.0 는전체적으로다음과같은구조로구성 jdk 6.0 bin lib jre java.exe tools.jar javac.exe lib bin javap.exe / \ / \ javah.exe ext rt.jar classic java.exe appletviewer.exe / i18n.jar / java.dll iiimp.jar jvm.dll awt.dll 자바언어소개 53
1.8 자바환경도구의사용법 javac 컴파일러 형태 javac [ options ] [ sourcefiles ] [ @files ] 옵션 -classpath < 클래스패스 > : 지정된클래스패스를이용한다. -d < 디렉토리 > : 클래스파일의위치를지정한다. -deprecation : deprecated된메소드사용에관해경고메시지를보여준다. -encoding < 인코딩이름 > : 소스파일의인코딩이름을설정한다. 이옵션이사용되지않는경우에플랫폼의디폴트컨버터가이용된다. -g : 디버깅정보를생성한다. -g:none : 디버깅정보를생성하지않는다. -g:{keyword list} : 콤마로구별되는키워드에대해서만디버깅정보를생성한다. (source, lines, vars) -nowarn : 경고메시지를출력하지않는다. -O : 코드를최적화한다. -sourcepath < 소스패스 > : 소스파일의위치를지정한다. 자바언어소개 54
1.8 자바환경도구의사용법 java 인터프리터 형태 java [ options ] class [ argument... ] java [ options ] -jar file.jar [ argument... ] 옵션 -classpath < 클래스패스 > -cp < 클래스패스 > : 클래스나 jar, zip 파일이있는디렉토리를기술한다. -Dproperty=value : 시스템의속성을기술한다. 자바언어소개 55
1.8 자바환경도구의사용법 appletviewer 애플릿실행하기 애플릿을실행시켜주는브라우저이다. 형태 appletviewer [ options ] url 옵션 -encoding < 인코딩이름 > -J < 자바옵션 > : java 인터프리터의옵션을사용할수있다. url 은자바애플릿을포함하는 HTML 파일의 URL 주소를지정 자바언어소개 56
1.8 자바환경도구의사용법 javah 헤더파일생성하기 C 언어를위한헤더파일을생성한다. 형태 javah [ options ] fully-qualified-classname 옵션 -o < 출력파일 > : 결과물을저장할파일을지정한다. -d < 디렉토리 > : 헤더파일이생성될디렉토리를지정한다. -stubs : 자바파일에서 C 선언을생성하도록한다. -jni : JNI 스타일의메소드프로토타입을갖는헤더파일을생성한다. 자바언어소개 57
1.8 자바환경도구의사용법 jar 압축파일만들기 자바압축파일을만들고, 압축을풀어준다. 형태 jar [ option ] [ manifest-file ] destination input-file [ input-files ] 옵션 c : 새로운압축파일을만든다. t : 압축파일의내용을화면에보여준다. x < 파일 > : 파일의압축을푼다. f : 두번째아규먼트가처리할 jar 파일임을나타낸다. m : manifest 파일을포함한다. u : 기존의 jar 파일의내용을업데이트한다. 자바언어소개 58
1.9 자바프로그램의구성 자바프로그램형태 1. 패키지문장. 2. import 문장. 3. 클래스와인터페이스선언. 회색부분은생략가능 하나의자바파일에는 여러클래스존재가능. 자바언어소개 59
1.9 자바프로그램의구성 참고 : C++ 와자바의성능비교 테스트설명 C++ ( 시간 : 초 ) JIT 자바 ( 시간 : 초 ) 인터프리터 자바 ( 시간 : 초 ) 정수나눗셈실수나눗셈정적함수멤버함수가상함수 정수나눗셈 1000만번수행실수나눗셈 1000만번수행정수나눗셈을하는정적함수를 1000만번호출정수나눗셈을하는멤버함수를 1000만번호출정수나눗셈을하는가상함수를 1000만번호출 1.8 1.8 4.8 1.6 1.6 8.7 1.8 1.8 6.0 1.8 1.8 10 1.8 1.8 10 자바언어소개 60
1.9 자바프로그램의구성 참고 : 컴파일러와인터프리터의작동방법 1. 컴파일러 C 나 Fortran 등의고차원언어는컴파일러를통해서저수준의어셈블리어나기계어로 변환. 링커 (linker) 는라이브러리와컴파일된프로그램을엮어서실행파일을만듬. Program Source Compiler.obj.lib Linker.exe 자바언어소개 61
1.9 자바프로그램의구성 2. 인터프리터 인터프리터는명령어를파싱을하고실행시키는작업을반복하여프로그램을실행. 대표적인인터프리터언어로는 BASIC. 인터프리터언어는소스프로그램이직접실행되고, 실행파일 (.exe) 을생성안함. Start Get Instruction Tokenize & Parse Execute Instruction 자바언어소개 62
1.9 자바프로그램의구성 3. 자바바이트코드인터프리터 javac 컴파일러를통해서 class 파일로변환..class 파일은바이트코드라고함. 바이트코드는자바가상머신의자바바이트코드인터프리터를통해실행됨. 자바바이트코드인터프리터는 java 명령어나웹브라우저에포함되어있음. Program Source javac bytes codes Virtual Machine Start Get Instruction Execute Instruction 자바언어소개 63
1.9 자바프로그램의구성 4. 자바 JIT 컴파일러 자바 JIT(Just In Time) 컴파일러는자바바이트코드를인터프리트하는대신에컴파일과정을통해실행코드를만듦. 속도면에서자바바이트코드인터프리터를사용하는것보다빠르다. J2SDK의 java 명령어는기본적으로 JIT 컴파일러를사용. (jre/bin/symjit.dll ) Program Source javac bytes codes JIT Native Machine Code 자바프로그램언어환경에서, JIT 컴파일러는자바바이트코드 ( 반드시해석되어야만하는명령어를포함한프로그램 ) 를, 프로세서에게직접전달될수있는명령어로바꾸어주는프로그램이다. 하나의자바프로그램을작성하고나면, 소스문장은자바컴파일러에의해바이트코드로변환되는데, 이는특정하드웨어플랫폼의프로세서 ( 예를들면, 인텔의펜티엄마이크로프로세서등 ) 에맞는명령어를포함한코드가아니라, 어떤플랫폼에도인식되고, 실행가능한, 플랫폼에독립적인코드이다. 과거에는, 특정언어로쓰여진대부분의프로그램들이반드시각각의컴퓨터플랫폼에맞게다시컴파일되어져야했고, 경우에따라서는다시작성되어야하는경우도있었다. 자바의가장큰장점은, 프로그램작성과컴파일을단한번만하면된다는것이다. 한플랫폼의자바가상머신은컴파일된바이트코드를특정프로세서가인식할수있는명령어로해석한다. 그러나, 가상머신은한번에한개의바이트코드명령어만을다룰수있다. 특정시스템플랫폼에있는 JIT 컴파일러 ( 실제로 2번째 compiler) 를사용하여, 바이트코드를특정시스템의코드로 ( 마치그프로그램이처음부터그플랫폼에서컴파일된것처럼 ) 컴파일할수있다. 코드가일단 JIT 컴파일러에의해 ( 다시 ) 컴파일되면, 대체로그컴퓨터에서더빠른속도로실행된다. JIT 컴파일러는가상머신과함께제공되며, 사용여부는선택에달려있다. 이것은바이트코드를특정플랫폼에딱맞아서, 즉시실행가능한코드로컴파일한다. 썬마이크로시스템즈는, 특히실행가능한메쏘드가반복적으로재사용될경우에, JIT 컴파일러를선택하는것이대체로빠르다고말하고있다. 자바언어소개 64