자바란무엇인가? 기초사항 514760-1 2017 년가을학기 8/28/2017 박경신 1991년그린프로젝트 (Green Project) 선마이크로시스템즈의제임스고슬링 (James Gosling) 에의해시작 - 가전제품에들어갈소프트웨어를위해개발 목적 플랫폼호환성문제해결 기존언어로작성된프로그램은 PC, 유닉스, 메인프레임등플랫폼간에호환성없음 소스를다시컴파일하거나프로그램을재작성해야하는단점 플랫폼독립적인언어개발 모든플랫폼에서호환성을갖는프로그래밍언어필요 네트워크, 특히웹에최적화된프로그래밍언어의필요성대두 메모리사용량이적고다양한플랫폼을가지는가전제품에적용 가전제품 : 작은량의메모리를가지는제어장치 내장형시스템요구충족 2009 년에선마이크로시스템즈를오라클에서인수 Java Version 자바의특징 Java 1.0 1996 211개클래스 applet Java 1.1-1.4 1997-2004 2700개클래스 ME, SE, EE version 내부클래스, AWT, 자바빈즈, Reflection, Collection, Swing, 핫자바 JVM, JavaSound, JNDL, assertion, regular expression, XML parser Java 1.5-1.6 2004-2006 3700개클래스 Generic class, foreach, 가변인수, 오토박싱, 메타데이터, 열거형, 정적 import, interface Java 1.7-1.8 2011-2017 4200개클래스 Lambda expression, Parallel Array Sorting, Base64 Encoding & Decoding API, Date and Time API, Password- Based-Encryption(PBE)
자바의특징 WORA(Write Once Run Anywhere) 한번작성된코드는모든플랫폼에서바로실행되는자바의특징 C/C++ 등기존언어가가진플랫폼종속성극복 OS, H/W에상관없이자바프로그램이동일하게실행 네트워크에연결된어느클라이언트에서나실행 웹브라우저, 분산환경지원 WORA를가능하게하는자바의특징 바이트코드 (byte code) 자바소스를컴파일한목적코드 CPU에종속적이지않은중립적인코드 JVM에의해해석되고실행됨 JVM(Java Virtual Machine) 자바바이트코드를실행하는 ( 소프트웨어 ) 플랫폼종속성 (Platform Dependency) 인텔 CPU + 리눅스 인텔 CPU를가진리눅스환경에서개발 C/C++ 응용프로그램 실행 실행되지않음 Apple 사의 MAC PC 플랫폼 = 하드웨어플랫폼 + 운영체제플랫폼 실행되지않음 프로그램의플랫폼호환성없는이유 기계어가 CPU 마다다름 운영체제마다 API 다름 운영체제마다실행파일형식다름 인텔 CPU + 윈도우노트북 플랫폼독립성 자바는플랫폼독립성 - WORA(Write Once Run Anywhere) Write Once!! 자바응용프로그램 자바컴파일러는특정한컴퓨터가아닌가상적인기계 (virtual machine) 를위한바이트코드를생성함 자바바이트코드 *.class Run Anywhere!! 실행 실행 실행 Windows 7 리눅스 인텔 CPU + 리눅스 인텔 CPU + 윈도우노트북 Intel CPU AMD CPU Apple 사의 MAC PC
(JVM : Java Virtual Machine) 각기다른플랫폼에설치 동일한자바실행환경제공 자체는플랫폼에종속적 는플랫폼마다각각작성됨 예 ) 리눅스에서작동하는는윈도우에서작동하지않음 개발및공급 자바개발사인오라클외 IBM, MS 등다양한회사에서제작공급 자바의실행 가클래스파일 (.class) 의바이트코드실행 바이트코드 바이트코드 에서실행가능한바이너리코드 바이트코드는컴퓨터 CPU에의해직접실행되지않음 가작동중인플랫폼에서실행 가인터프리터방식으로바이트코드해석 클래스파일 (.class) 에저장 자바와 C/C++ 의실행환경차이 자바와 C/C++ 의실행환경차이 자바 if (i>0) { i = i*10; } i= i j; System.out.println(i); 자바소스파일 (Test.java) C/C++ if (i>0) { i = i*10; } i= i j; cout << i; 소스파일 (Test.cpp) 컴파일러 컴파일러 / 링커 010100000100 010101001111 010110101010 010111010101 010100001000 1110000000 바이트코드 (Test.class) 010100000100 010101101111 010110101010 010111110101 010100101010 1110001100 바이너리실행파일 (Test.exe) 자바프로그램 (Test.class) 운영체제 하드웨어 C++ 프로그램 (Test.exe) 운영체제 하드웨어 자바 자바는링크과정없이컴파일러가바로바이트코드생성 바이트코드는 JVM에서만실행가능 자바는필요한클래스들을프로그램실행중에동적으로로딩 동적로딩은 JVM에포함된클래스로더에의해이루어짐 ClassLoader 클래스를이용하여개발자가직접클래스로딩가능 C/C++ 컴파일 C/C++ 에서는컴파일러가중간단계인목적코드를생성 링크 링커가목적코드와라이브러리연결, 실행가능한최종실행파일생성 정적라이브러리는실행파일에포함 실행파일크기가커짐 목적코드및실행파일은플랫폼에따라다름 플랫폼이바뀌면다시컴파일및링크
자바의종류 오라클은개발환경에따라다양한자바배포판제공 Java SE 자바표준배포판 (Standard Edition) 데스크탑과서버응용개발플랫폼 Java EE 자바기업용배포판 자바를이용한다중사용자, 기업용응용개발을위한플랫폼 Java SE + 인터넷기반의서버사이드컴퓨팅관련 API 추가 응용서버, 웹서버, J2EE API, 엔터프라이즈자바빈즈 (JavaBeans) 지원, 자바서블릿 API 와 JSP 등을포함 Jave ME 자바마이크로배포판 휴대전화나 PDA, 셋톱박스등제한된리소스를갖는하드웨어에서응용개발을위한플랫폼 가장작은메모리풋프린트 Java SE 의서브셋 + 임베디드및가전제품을위한 API 정의 자바의종류 Jave FX 자바리치 - 인터넷 - 애플리케이션 (RIA: Rich Internet Application) 을생성하고배포하기위한자바클라이언트플랫폼 RIA 은서로인터넷상의다양한플랫폼에서도동일한외관으로실행 JavaFX 플랫폼은자바기술에기반을둔고성능의하드웨어가속그래픽과미디어엔진 API 를제공 Java SE JDK 와 JRE 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 - 웹브라우저없이애플릿을실행하는유틸리티
자바로만들수있는것 자바애플리케이션 (Java application) 독립적으로실행될수있는일반응용프로그램 자바애플릿 (Java applet) 웹브라우저안에서실행되는작은프로그램 애플릿은사용할수있는자원접근에제약있음 자바로만들수있는것 자바서블릿 (Java servlet) 웹서버에서동작하는서버모듈로서클라이언트의요구를받아서그에대한처리를한후에, 실행결과를 HTML 문서형태로클라이언트컴퓨터로전송 데이터베이스서버및기타서버와연동하는복잡한기능구현시사용. 웹서버에의해실행통제받음. 웹브라우저 웹서버 인터넷 JVM 서버 servlet 서버 자바로만들수있는것 JSP (Java Server Pages) HTML안에자바스크립트코드를넣으면웹페이지를사용자와상호작용하도록만들수있음 JSP는서버에서실행되고클라이언트요청에따라서동적으로 HTML, XML 웹페이지를생성 자바로만들수있는것 안드로이드애플리케이션 안드로이드개발자들은자바의 SE 버전중에서 AWT와스윙 (swing) 을제외한거의모든패키지를사용함 개발언어는자바를사용하나효율성때문에자체적인달빅 (Dalvik) 가상머신을구현함. 달빅은기존바이트코드와호환성이없어변환이필요함.
JDK 설치 Java SE Download http://www.oracle.com/technetwork/java/javase/downloads/jdk 8-downloads-2133151.html JDK 설치 JDK8 Demos and Samples Download JDK 설치후디렉터리구조 JDK 설치 경로설정하기 자바개발, 실행하는데필요한도구와유틸리티 자바로 DB 응용프로그램을개발하는데필요한도구자바프로그래밍예제와소스코드네이티브코드프로그래밍에필요한헤더파일자바런타임환경. JVM, 클래스라이브러리등실행에필요한파일 JDK 의기본라이브러리외추가클래스라이브러리와개발도구에서필요로하는여러파일 자바프로그램샘플소스코드 자바 API 클래스들에대한자바소스
JDK 설치 설치된자바버전확인 자바프로그램개발단계 소스파일.java 컴파일후바이트코드로변환.class 바이트코드를메모리로적재및검증 JVM에서바이트코드실행 자바프로그램개발단계 소스코드 Hello.java 자바프로그램개발단계 Disassemble 클래스파일에들어있는바이트코드를텍스트로볼수있게변환하는작업 (JDK의 javap.exe 이용 ) Hello.class 파일을디스어셈블한결과 Hello.bc 파일생성 컴파일 javac Hello.java 실행 java Hello
자바 API 자바 API(Application Programming Interface) JDK 에포함된클래스라이브러리 주요한기능들을미리구현한코드 ( 클래스라이브러리 ) 의집합 개발자는 API 를이용하여쉽고빠르게자바프로그램개발 API 에서정의한규격에따라클래스사용 자바패키지 (Package) 서로관련된클래스들을분류하여묶어놓은것 계층구조로되어있음 클래스의이름에패키지이름도포함 다른패키지에동일한이름의클래스존재가능 자바 API( 클래스라이브러리 ) 는 JDK에패키지형태로제공됨 필요한클래스가속한패키지만 import하여사용 개발자자신의패키지생성가능 자바 API 문서 http://docs.oracle.com/javase/8/docs/api/index.html 자바 IDE 소개와설치 자바 IDE (Integrated Development Environment) 통합개발환경 편집, 컴파일, 디버깅을한번에할수있는통합된개발환경 이클립스 (Eclipse) 자바응용프로그램개발을위한통합개발환경 IBM에의해개발된오픈소스프로젝트 http://www.eclipse.org/downloads/ 에서다운로드 넷빈즈 (Netbeans) https://netbeans.org/ IntelliJ Idea http://www.jetbrains.com/idea/download/ Intellij 설치하기 Intellij Community (ideaic-2016.2.2.exe) http://www.jetbrains.com/idea/download/ 다운로드
Eclipse 설치하기 이클립스 Oxygen (eclipse-java-oxygen-r-win32.zip) https://www.eclipse.org/downloads/ 다운로드 eclipse.exe 실행 자바프로그램작성 이클립스프로젝트생성 File->New->Java Project 자바프로그램작성 클래스생성 [ 프로젝트 ]->New->Class 자바프로그램작성 클래스에소스코드추가
자바프로그램컴파일오류 컴파일오류시 quick fix 를눌러서수정 자바프로그램실행 프로그램실행 Run (Ctrl+F11) 자바프로그램실행 이클립스프로젝트디렉토리 콘솔창에서실행 LAB0 HelloWorld 프로그램을작성한다. JDK 설치 IDE 설치 환경설정 이클립스를사용한자바프로그램작성 프로젝트디렉토리안에보고서 (1~2장) 를넣고 Lab0_ 학번 _ 이름.zip 압축한후제출