명품 JAVA Essential 1 2 학습목표 1. 컴퓨터가소프트웨어를실행하는범용계산기임을이해 2. 자바의출현배경과플랫폼독립성, WORA의개념이해 3. 자바가상기계와자바의실행환경이해 4. JDK와 JRE 등자바개발환경이해 5. 이클립스를이용한자바프로그램작성 6. 자바응용프로그램의종류와특징이해 7. 자바언어와자바플랫폼의특징이해 1
컴퓨터와소프트웨어 3 컴퓨터와프로그래머, 소프트웨어의관계는만능요리기계, 요리설계사와, 요리순서와같다. 프로그래밍언어 4 프로그래밍언어 프로그램작성언어 기계어 (machine language) 0, 1 의이진수로구성된언어 컴퓨터의 CPU 는기계어만이해하고처리가능 어셈블리어 기계어명령을 ADD, SUB, MOVE 등과같은표현하기쉬운상징적인단어인니모닉기호 (mnemonic symbol) 로일대일대응시킨언어 고급언어 사람이이해하기쉽고, 복잡한작업, 자료구조, 알고리즘을표현하기위해고안된언어 Pascal, Basic, C/C++, Java, C# 절차지향언어와객체지향언어로나눌수있음 2
프로그래밍과컴파일 5 소스 : 프로그래밍언어로작성된텍스트파일컴파일 : 소스파일을컴퓨터가이해할수있는기계어로만드는과정 자바 :.java ->.class C :.c ->.obj->.exe C++ :.cpp ->.obj ->.exe 소스프로그램편집및개발 프로그램실행 if (i>0) { i = i*10; } i = i j; System.out.println(i); 컴파일러 컴파일 01010000010001 01010011110101 10101010010111 01010101010000 10001110000000 소스프로그램 기계어 자바의태동 6 1991년그린프로젝트 (Green Project) 선마이크로시스템즈의제임스고슬링 (James Gosling) 에의해시작 가전제품에들어갈소프트웨어를위해개발 1995년에자바발표목적 플랫폼호환성문제해결 기존언어로작성된프로그램은 PC, 유닉스, 메인프레임등플랫폼간에호환성없음 소스를다시컴파일하거나프로그램을재작성해야하는단점플랫폼독립적인언어개발 모든플랫폼에서호환성을갖는프로그래밍언어필요 네트워크, 특히웹에최적화된프로그래밍언어의필요성대두메모리사용량이적고다양한플랫폼을가지는가전제품에적용 가전제품 : 작은량의메모리를가지는제어장치 내장형시스템요구충족 초기이름 : 오크 (OAK) 인터넷과웹의엄청난발전에힘입어퍼지게됨 웹브라우저 Netscape에서실행 2009년에선마이크로시스템즈를오라클이인수 3
기존언어의플랫폼종속성 7 인텔 CPU 를가진리눅스환경에서개발 C/C++ 응용프로그램 플랫폼 = 하드웨어플랫폼 + 운영체제플랫폼 프로그램의플랫폼호환성없는이유 기계어가 CPU 마다다름 운영체제마다 API 다름 운영체제마다실행파일형식다름 실행 실행되지않음 실행되지않음 Intel CPU + 리눅스 Apple 사의 MAC PC Intel CPU + 윈도우노트북 자바의플랫폼독립성, WORA 8 WORA(Write Once Run Anywhere) 한번작성된코드는모든플랫폼에서바로실행되는자바의특징 C/C++ 등기존언어가가진플랫폼종속성극복 OS, H/W 에상관없이자바프로그램이동일하게실행 네트워크에연결된어느클라이언트에서나실행 웹브라우저, 분산환경지원 WORA 를가능하게하는자바의특징 바이트코드 (byte code) 자바소스를컴파일한목적코드 CPU 에종속적이지않은중립적인코드 JVM 에의해해석되고실행됨 JVM(Java Virtual Machine) 자바바이트코드를실행하는자바가상기계 ( 소프트웨어 ) 4
자바의플랫폼독립성 9 Write Once!! 자바응용프로그램 Run Anywhere!! 실행 실행 실행 자바가상기계 Intel CPU + 리눅스 자바가상기계 Apple 사의 MAC PC 자바가상기계 Intel CPU + 윈도우노트북 자바가상기계와자바실행환경 10 바이트코드 자바가상기계에서실행가능한바이너리코드 바이트코드는컴퓨터 CPU에의해직접실행되지않음 자바가상기계가작동중인플랫폼에서실행 자바가상기계가인터프리터방식으로바이트코드해석클래스파일 (.class) 에저장 자바가상기계 (JVM : Java Virtual Machine) 각기다른플랫폼에설치 동일한자바실행환경제공 자바가상기계자체는플랫폼에종속적 자바가상기계는플랫폼마다각각작성됨 예 ) 리눅스에서작동하는자바가상기계는윈도우에서작동하지않음자바가상기계개발및공급 자바개발사인오라클외 IBM, MS 등다양한회사에서제작공급 자바의실행 자바가상기계가클래스파일 (.class) 의바이트코드실행 5
자바응용프로그램의실행 11 * 자바는링크과정없음 실행에필요한자바클래스라이브러리 (JDK APIs)... Object.class String.class 자바프로그래밍 클래스로딩 Draw.java Draw.class 자바가상기계 자바가상기계 자바가상기계 Hello.java 자바컴파일러 Hello.class 윈도우운영체제 Apple 맥운영체제 휴대폰운영체제 Shape.java Shape.class 인텔 PC H/W Apple H/W 휴대폰 H/W ( 소스코드 ) ( 바이트코드 ) 자바와타언어 (C/C++) 의실행차이 12 자바 if (i>0) { i = i*10; } i = i j; System.out.println(i); 자바소스파일 (Test.java) 컴파일러 01010000010001 01010011110101 10101010010111 01010101010000 10001110000000 바이트코드 (Test.class) 자바가상기계 운영체제 하드웨어 C/C++ if (i>0) { i = i*10; } i = i j; cout << i; 소스파일 (Test.cpp) 컴파일러 / 링커 01010000010001 01011011110101 10101010010111 11010101010010 10101110001100 바이너리실행파일 (Test.exe) 운영체제 하드웨어 6
자바의배포판 13 오라클은개발환경에따라다양한자바개발배포판제공 Java SE 자바표준배포판 (Standard Edition) 데스크탑과서버응용개발플랫폼 Java ME 자바마이크로배포판 휴대전화나 PDA, 셋톱박스등제한된리소스를갖는하드웨어에서응용개발을위한플랫폼 가장작은메모리풋프린트 Java SE의서브셋 + 임베디드및가전제품을위한 API 정의 Java EE 자바기업용배포판 자바를이용한다중사용자, 기업용응용개발을위한플랫폼 Java SE + 인터넷기반의서버사이드컴퓨팅관련 API 추가 자바와오픈소스 14 오픈소스란? 소프트웨어제작자의권리를보존 누구나액세스할수있도록소스코드를무상공개한소프트웨어 오픈소스의장점 공개된소스코드를참조함으로써개발시간및비용단축 공개된소프트웨어를다수의인원이참여개량, 우수한품질의소프트웨어개발 오픈소스의단점 무단으로상용소프트웨어에사용할경우저작권침해발생 다양한개량버전의소프트웨어로인한호환성문제 오프소스소프트웨어사례 Linux, OpenOffice, Open Solaris, Mozilla, Apache, GNU, WebKit 등 2006년 11월, 선마이크로시스템즈는자바를 GPL 라이선스로소스오픈 http://sourceforge.net : 오픈소스사이트 7
Java SE 구성 15 출처 : http://download.oracle.com/javase/8/docs/ JDK 와 JRE 16 JDK(Java Development Kit) 자바응용개발환경 개발에필요한도구포함 컴파일러, JRE (Java Runtime Environment), 클래스라이브러리, 샘플등포함 JRE(Java Runtime Environment) 자바실행환경. JVM 포함 자바실행환경만필요한경우 JRE만따로다운가능 JDK 와 JRE 의개발및배포 오라클의 Technology Network 의자바사이트에서다운로드 http://www.oracle.com/technetwork/java/index.html JDK의 bin 디렉터리에포함된주요개발도구 javac - 자바소스를바이트코드로변환하는컴파일러 java - jre의 bin 디렉터리에도있는자바응용프로그램실행기 jar - 자바아카이브파일 (JAR) 을생성및관리하는유틸리티 jdb - 자바디버거 appletviewer - 웹브라우저없이애플릿을실행하는유틸리티 8
JDK 설치후디렉터리구조 17 자바개발, 실행하는데필요한도구와유틸리티 자바로 DB 응용프로그램을개발하는데필요한도구 자바프로그래밍예제와소스코드 네이티브코드프로그래밍에필요한헤더파일 자바런타임환경. JVM, 클래스라이브러리등실행에필요한파일 JDK 의기본라이브러리외추가클래스라이브러리와개발도구에서필요로하는여러파일 자바프로그램샘플소스코드 자바 API 클래스들에대한자바소스 나는누구? 18 ( 사진출처 : 위키백과 ) 9
자바 API 19 자바패키지 (package) 서로관련된클래스들을분류하여묶어놓은것 계층구조로되어있음 개발자자신의패키지생성가능 자바 API(Application Programming Interface) 개발자가이용하여쉽고빠르게자바프로그램을개발할수있는자바라이브러리 JDK 에클래스라이브러리로제공 패키지형태로제공 자바온라인 API 문서 20 http://docs.oracle.com/javase/8/docs/api/ 10
자바프로그램개발 21 1. 자바소스편집 주목 주목 2. 자바소스컴파일 3. 자바응용프로그램실행.class 확장자를붙이지않는다. C:\Temp 디렉터리로이동 컴파일 실행결과 클래스파일생성 자바통합개발환경 이클립스 (Eclipse) 22 IDE(Integrated Development Environment ) 란? 통합개발환경 편집, 컴파일, 디버깅을한번에할수있는통합된개발환경 이클립스 (Eclipse) 자바응용프로그램개발을위한통합개발환경 IBM에의해개발된오픈소스프로젝트 http://www.eclipse.org/downloads/ 에서다운로드 11
이클립스실행 23 이클립스 Luna 배포판 작업공간폴더지정 이클립스의사용자인터페이스 24 12
프로젝트생성 25 Project 메뉴선택 프로젝트생성 26 프로젝트이름지정 이컴퓨터에 JDK 8 이설치되어있음. 자동 Java Project 선택 Finish 선택 13
클래스생성 27 File->New->Class 메뉴선택 주목 클래스이름입력 main() 을체크하면자동으로 main() 메소드생성 Finish 선택 생성된자바소스 28 주목 주목 주목 14
소스편집과컴파일및실행 29 실행버튼 Run -> Run 실행메뉴 실행결과 콘솔윈도우 자바응용의종류 : 데스크톱응용프로그램 30 가장전형적인자바응용프로그램 PC 등의데스크톱컴퓨터에설치되어실행 JRE 가설치된어떤환경에서도실행 다른응용프로그램의도움이필요없이단독으로실행 15
자바응용의종류 : 애플릿응용프로그램 31 애플릿 (applet) 웹브라우저에의해구동되고실행이제어되는자바프로그램 애플릿은사용할수있는자원접근에제약있음 자바응용의종류 : 서블릿응용프로그램 32 서블릿 (servlet) 애플릿과반대로서버에서실행되는자바프로그램 서버클라이언트모델에서서블릿과애플릿이각각통신하면서실행데이터베이스서버및기타서버와연동하는복잡한기능구현시사용사용자인터페이스가필요없는응용웹서버에의해실행통제받음 웹브라우저 웹서버 인터넷 JVM 서버 servlet 서버 16
자바응용의종류 : 모바일응용프로그램 33 Java ME 모바일기기를위한자바배포판 유럽, 미국시장에출시되는대부분의모바일단말기에탑재 노키아, 삼성, LG, 소니에릭슨, 모토롤러등단말기제조사 자바모바일응용 : 안드로이드앱 34 안드로이드 구글의주도로여러모바일회사가모여구성한 OHA(Open Handset Alliance) 에서만든무료모바일플랫폼개발언어는자바를사용하나 JVM에해당하는 Dalvik은기존바이트코드와호환성이없어변환필요 17
자바의특성 (1) 35 플랫폼독립성 하드웨어, 운영체제에종속되지않는바이트코드로플랫폼독립성 객체지향 캡슐화, 상속, 다형성지원 클래스로캡슐화 자바의모든변수나함수는클래스내에선언 클래스안에서클래스 ( 내부클래스 ) 작성가능 소스 (.java) 와클래스 (.class) 파일 하나의소스파일에여러클래스를작성가능 public 클래스는하나만가능소스파일의이름과 public으로선언된클래스이름은같아야함클래스파일에는하나의클래스만존재 다수의클래스를가진자바소스를컴파일하면클래스마다별도클래스파일생성 소스파일과클래스, 클래스파일의관계 36 A.java public class A {... } class B {... } class C {... class D {... } } 컴파일 A.class 바이트코드 B.class 바이트코드 C.class 바이트코드 C$D.class 바이트코드 4 개의클래스파일이생성됨 18
자바의특징 (2) 37 실행모듈 구성 한개의 class 파일또는다수의 class 파일로구성 여러폴더에걸쳐다수의클래스파일로구성된경우 : jar 압축파일로배포자바응용프로그램의실행은 main() 메소드에서시작 하나의클래스파일에두개이상의 main() 메소드가있을수없음 각클래스파일이 main() 메소드를포함하는것은상관없음 패키지 서로관련있는여러클래스를패키지로묶어관리 패키지는폴더개념 예 ) java.lang.system 은 java\lang 디렉터리의 System.class 파일 멀티스레드 여러스레드의동시수행환경지원 자바는운영체제의도움없이자체적으로멀티스레드지원 C/C++ 프로그램은멀티스레드를위해운영체제 API 를호출 가비지컬렉션 자바언어는메모리할당기능은있어도메모리반환기능없음 사용하지않는메모리는자바가상기계에의해자동반환 가비지컬렉션 자바의특징 (3) 38 실시간응용프로그램에부적합 실행도중예측할수없는시점에가비지컬렉션실행때문 응용프로그램의일시적중단발생 자바프로그램은안전 타입체크엄격 물리적주소를사용하는포인터개념없음 프로그램작성쉬움 포인터개념이없음 동적메모리반환하지않음 다양한라이브러리지원 실행속도개선을위한 JIT 컴파일러사용 자바는바이트코드를인터프리터방식으로실행 기계어가실행되는것보다느림 JIT 컴파일기법으로실행속도개선 JIT 컴파일 - 실행중에바이트코드를기계어코드로컴파일하여기계어를실행하는기법 19