자바란무엇인가? 기초사항 514760-1 2019 년봄학기 3/6/2019 박경신 1991년그린프로젝트 (Green Project) 선마이크로시스템즈의제임스고슬링 (James Gosling) 에의해시작 - 가전제품에들어갈소프트웨어를위해개발 목적 플랫폼호환성문제해결 기존언어로작성된프로그램은 PC, 유닉스, 메인프레임등플랫폼간에호환성없음 소스를다시컴파일하거나프로그램을재작성해야하는단점 플랫폼독립적인언어개발 모든플랫폼에서호환성을갖는프로그래밍언어필요 네트워크, 특히웹에최적화된프로그래밍언어의필요성대두 메모리사용량이적고다양한플랫폼을가지는가전제품에적용 가전제품 : 작은량의메모리를가지는제어장치 내장형시스템요구충족 2009 년에선마이크로시스템즈를오라클에서인수 Java Version https://en.wikipedia.org/wiki/java_version_history Java Version Java 1.0 Jan 1996 JDK 1.0 발표, Applet 도입 Java 1.1 Feb 1997 Inner class, JavaBeans, JDBC, RMI, reflection, JIT(Just-In-Time) compiler, Internationalization and Unicode Java 1.2 Dec 1998 ME, SE, EE version 발표 Swing이 SE에포함, Corba IDL, Collection framework Java 1.3 May 2000 HotSpot(Sun에서만든 JIT구현 ) JVM, JNDI(Java Naming and Directory Interface), JPDA, JavaSound 포함 Java 1.4 Feb 2002 Regular expression, assert, Security 2 version, IPv6, Non Blocking IO(NIO), Logging API, Image IO API, XML Parser, XSLT Java 1.5 Java 1.7 Sep 2004 Jul 2011 기능적으로가장많은변화가생긴버전 Generics, annotation, auto boxing, enum, varargs, foreach, static import, Java 1.8 Concurrent API, Scanner class Mar 2014 Java 1.6 Dec 2006 보안, 성능강화주력 String in switch, try-resource, generics 에서타입추론, 숫자에서 underscore 사용 JavaFX 가기본으로포함 오라클로인수된후첫번째버전 JDK1.5 이후가장큰언어적변화 Lambda expression, Default method interface, functional programming Date and Time API, stream API
Java Version 자바의특징 Java 1.9 Sep 2017 Modular system(jigsaw) jshell (Java Shell), G1 garbage collector Java 1.10 Mar 2018 Local-variable type interference(var), Parallel Full GC for G1 Java 1.11 Sep 2018 자바 11은 Long-term support 버전 Nest-based access controls, ZGC, Flight Recorder, HTTP API, TLS(Transport Layer Security) 1.3, 람다에서 var 변수 JavaFX, Java EE & CORBA 모듈, Web Start, Applets 삭제 Java 1.12 Mar 2019 자바의특징 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) 자바컴파일러는특정한컴퓨터가아닌가상적인기계 (virtual machine) 를위한바이트코드를생성함 Write Once!! 자바응용프로그램 자바바이트코드 *.class Run Anywhere!! 실행 실행 실행 Windows 7 리눅스 Intel CPU AMD CPU 인텔 CPU + 리눅스 인텔 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 설치 JDK 설치 Java SE Development Kit Download http://www.oracle.com/technetwork/java/javase/downloads/ind ex.html
JDK 설치후디렉터리구조 자바개발, 실행하는데필요한도구와유틸리티 JDK 설치 경로설정하기 Configuration file 네이티브코드프로그래밍에필요한헤더파일 컴파일된모듈정의 Copyright과라이선스파일 JDK 의기본라이브러리, 추가클래스라이브러리와개발도구에서필요로하는여러파일 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 문서 https://docs.oracle.com/en/java/javase/11/
자바 IDE 소개와설치 자바 IDE (Integrated Development Environment) 통합개발환경 편집, 컴파일, 디버깅을한번에할수있는통합된개발환경 이클립스 (Eclipse) 자바응용프로그램개발을위한통합개발환경 IBM 에의해개발된오픈소스프로젝트 http://www.eclipse.org/downloads/ 에서다운로드 넷빈즈 (Netbeans) https://netbeans.org/ IntelliJ Idea http://www.jetbrains.com/idea/download/ Eclipse 설치하기 이클립스 IDE 2018-12 (eclipse-inst-win64.exe) 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 압축한후제출