명품 JAVA Essential 1
2 학습목표 1. 컴퓨터가소프트웨어를실행하는범용계산기임을이해 2. 자바의출현배경과플랫폼독립성, WORA의개념이해 3. 자바가상기계와자바의실행환경이해 4. JDK와 JRE 등자바개발환경이해 5. 이클립스를이용한자바프로그램작성 6. 자바응용프로그램의종류와특징이해 7. 자바언어와자바플랫폼의특징이해
컴퓨터와소프트웨어 3 컴퓨터와프로그래머, 소프트웨어의관계는만능요리기계, 요리설계사와, 요리순서와같다.
프로그래밍언어 4 프로그래밍언어 프로그램작성언어 기계어 (machine language) 0, 1 의이진수로구성된언어 컴퓨터의 CPU 는기계어만이해하고처리가능 어셈블리어 기계어명령을 ADD, SUB, MOVE 등과같은표현하기쉬운상징적인단어인니모닉기호 (mnemonic symbol) 로일대일대응시킨언어 고급언어 사람이이해하기쉽고, 복잡한작업, 자료구조, 알고리즘을표현하기위해고안된언어 Pascal, Basic, C/C++, Java, C# 절차지향언어와객체지향언어로나눌수있음
프로그래밍언어의진화 Assembly 5 1954 Fortran 1958 Algol 1972 C 1964 Basic 1983 C++ 1983 Objective-C 1987 Perl 1991 Visual Basic 1995 PHP 1995 Java 1995 Javascript 1999 JSP 2000 C# 2017 2018 Java 9 Java 10 플랫폼과클래스의모듈화
프로그래밍과컴파일 6 소스 : 프로그래밍언어로작성된텍스트파일 컴파일 : 소스파일을컴퓨터가이해할수있는기계어로만드는과정 자바 :.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 소스프로그램 기계어
자바의태동 7 1991 년그린프로젝트 (Green Project) 목적 선마이크로시스템즈의제임스고슬링 (James Gosling) 에의해시작 가전제품에들어갈소프트웨어를위해개발 1995년에자바발표 플랫폼호환성문제해결 기존언어로작성된프로그램은 PC, 유닉스, 메인프레임등플랫폼간에호환성없음 소스를다시컴파일하거나프로그램을재작성해야하는단점플랫폼독립적인언어개발 모든플랫폼에서호환성을갖는프로그래밍언어필요 네트워크, 특히웹에최적화된프로그래밍언어의필요성대두메모리사용량이적고다양한플랫폼을가지는가전제품에적용 가전제품 : 작은량의메모리를가지는제어장치 내장형시스템요구충족 초기이름 : 오크 (OAK) 인터넷과웹의엄청난발전에힘입어퍼지게됨웹브라우저 Netscape에서실행 2009 년에선마이크로시스템즈를오라클이인수
기존언어의플랫폼종속성 8 인텔 CPU 를가진리눅스환경에서개발 C/C++ 응용프로그램 플랫폼 = 하드웨어플랫폼 + 운영체제플랫폼 프로그램의플랫폼호환성없는이유 기계어가 CPU 마다다름 운영체제마다 API 다름 운영체제마다실행파일형식다름 실행 실행되지않음 실행되지않음 Intel CPU + 리눅스 Apple 사의 MAC PC Intel CPU + 윈도우노트북
자바의플랫폼독립성, WORA 9 WORA(Write Once Run Anywhere) 한번작성된코드는모든플랫폼에서바로실행되는자바의특징 C/C++ 등기존언어가가진플랫폼종속성극복 OS, H/W 에상관없이자바프로그램이동일하게실행 네트워크에연결된어느클라이언트에서나실행 웹브라우저, 분산환경지원 WORA 를가능하게하는자바의특징 바이트코드 (byte code) 자바소스를컴파일한목적코드 CPU 에종속적이지않은중립적인코드 JVM 에의해해석되고실행됨 JVM(Java Virtual Machine) 자바바이트코드를실행하는자바가상기계 ( 소프트웨어 )
자바의플랫폼독립성 10 Write Once!! 자바응용프로그램 Run Anywhere!! 실행 실행 실행 자바가상기계 Intel CPU + 리눅스 자바가상기계 Apple 사의 MAC PC 자바가상기계 Intel CPU + 윈도우노트북
자바가상기계와자바실행환경 11 바이트코드 자바가상기계에서실행가능한바이너리코드 바이트코드는컴퓨터 CPU에의해직접실행되지않음 자바가상기계가작동중인플랫폼에서실행 자바가상기계가인터프리터방식으로바이트코드해석클래스파일 (.class) 에저장 자바가상기계 (JVM : Java Virtual Machine) 각기다른플랫폼에설치동일한자바실행환경제공자바가상기계자체는플랫폼에종속적 자바가상기계는플랫폼마다각각작성됨 예 ) 리눅스에서작동하는자바가상기계는윈도우에서작동하지않음자바가상기계개발및공급 자바개발사인오라클외 IBM, MS 등다양한회사에서제작공급 자바의실행 자바가상기계가클래스파일 (.class) 의바이트코드실행
자바응용프로그램실행환경 12 실행환경 자바가상기계 + 자바플랫폼의다양한클래스라이브러리 ( 자바 API) 응용프로그램실행 main() 메소드를가진클래스의 main() 에서실행시작자바가상기계는, 필요할때클래스파일로딩, 적은메모리로실행가능
자바와타언어 (C/C++) 의실행차이 13 자바 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) 운영체제 하드웨어
JDK 와 JRE 14 JDK(Java Development Kit) 자바응용개발환경. 개발에필요한도구포함 컴파일러, 컴파일된자바 API 클래스들이들어있는모듈파일들, 샘플등포함 JRE(Java Runtime Environment) 자바실행환경. JVM 포함컴파일된자바 API 들이들어있는모듈파일개발자가아닌경우 JRE만따로다운가능 JDK 와 JRE 의개발및배포 오라클의 Technology Network 의자바사이트에서다운로드 http://www.oracle.com/technetwork/java/index.html JDK 의 bin 디렉터리에포함된주요개발도구 javac - 자바소스를바이트코드로변환하는컴파일러 java - 자바응용프로그램실행기. 자바가상기계를작동시켜자바프로그램실행 javadoc 자바소스로부터 HTML 형식의 API 도큐먼트생성 jar 자바클래스들 ( 패키지포함 ) 을압축한자바아카이브파일 (.jar) 생성관리 jmod: 자바의모듈파일 (.jmod) 을만들거나모듈파일의내용출력 jlink: 응용프로그램에맞춘맞춤형 (custom) JRE 제공 jdb - 자바응용프로그램의실행중오류를찾는데사용하는디버거 javap - 클래스파일의바이트코드를소스와함께보여주는디어셈블러
Java SE 구성 15 Java SE 의구성 ( 출처 : http://www.oracle.com/technetwork/java/javase/tech/index.html)
16 JDK 설치후디렉터리구조
자바의배포판종류 17 오라클은개발환경에따라다양한자바배포판제공 Java SE 자바표준배포판 (Standard Edition) 데스크탑과서버응용개발플랫폼 Java ME 자바마이크로배포판 휴대전화나 PDA, 셋톱박스등제한된리소스를갖는하드웨어에서응용개발을위한플랫폼 가장작은메모리풋프린트 Java SE 의서브셋 + 임베디드및가전제품을위한 API 정의 Java EE 자바기업용배포판 자바를이용한다중사용자, 기업용응용개발을위한플랫폼 Java SE + 인터넷기반의서버사이드컴퓨팅관련 API 추가
나는누구? 18 ( 사진출처 : 위키백과 )
Java 9 부터시작된모듈프로그래밍 19 모듈화 (modularity) Java 9에서정의된새로운기능, 2017년 9월 21일출시모듈 자바패키지들과이미지, XML 파일등의자원들을묶은단위모듈프로그래밍 자바응용프로그램을마치직소퍼즐 (jigsaw) 을연결하듯이필요한모듈을연결하는방식으로작성 자바플랫폼의모듈화 실행시간에사용되는자바 API의모든클래스들을모듈들로분할모듈화의목적 세밀한모듈화, 자바응용프로그램이실행되는데필요없는모듈배제 작은크기의실행환경구성 하드웨어가열악한소형 IoT 장치지원 모듈방식이아닌, 기존방식으로자바프로그래밍해도무관 자바플랫폼이모듈방식으로바뀌었지만, 굳이응용프로그램을모듈방식으로작성할필요없음 모듈설계자들도이런사실강조
자바에서제공하는전체모듈리스트 (Java SE) 20 Java 9 부터플랫폼을모듈화함 Java SE 의모든클래스들을모듈들로재구성 JDK 의설치디렉터리밑의 jmods 디렉터리에있음 모듈파일들 JDK 10 에서는자바 API 의클래스패키지를 99 개의모듈파일에분산
자바 API 21 자바 API(Application Programming Interface) 란? JDK 에포함된클래스라이브러리 주요한기능들을미리구현한클래스라이브러리의집합 개발자는 API 를이용하여쉽고빠르게자바프로그램개발 API 에서정의한규격에따라클래스사용 자바패키지 (package) 서로관련된클래스들을분류하여묶어놓은것 계층구조로되어있음 클래스의이름에패키지이름도포함 다른패키지에동일한이름의클래스존재가능 자바 API( 클래스라이브러리 ) 는 JDK 에패키지형태로제공됨 필요한클래스가속한패키지만 import 하여사용 개발자자신의패키지생성가능
자바온라인 API 문서 22 http://docs.oracle.com/javase/10/docs/api/ java.lang 패키지선택 현재보이지는않지만왼쪽상단창에서먼저 java.base 모듈선택 String 클래스선택
자바프로그램개발 : (1) 자바소스편집 23 어떤편집기를사용해도무관 메모장으로작성한샘플 주목 주목 작성후 Hello2030.java 로저장 반드시클래스와동일한이름으로파일저장 C:\Temp 에저장 확장자.java
자바프로그램개발 : (2) 컴파일및실행 24 컴파일 Hello2030.java 는 C:\Temp 에저장되어있음 C:\Temp 디렉터리로이동 컴파일 클래스파일생성 실행 Hello2030.class 실행.class 확장자를붙이지않는다. 실행결과
자바통합개발환경 이클립스 (Eclipse) 25 IDE(Integrated Development Environment ) 란? 통합개발환경 편집, 컴파일, 디버깅을한번에할수있는통합된개발환경 이클립스 (Eclipse) 자바응용프로그램개발을위한통합개발환경 IBM에의해개발된오픈소스프로젝트 http://www.eclipse.org/downloads/ 에서다운로드
이클립스실행 26 이클립스 Oxygen 배포판 작업공간폴더지정
27 이클립스의사용자인터페이스
프로젝트생성메뉴 28 Project 메뉴선택
프로젝트생성 29 프로젝트이름지정 이컴퓨터에 JDK 10 이설치되어있음. 자동 Java Project 선택 Finish 선택
클래스생성 30 File->New->Class 메뉴선택 주목 클래스이름입력 main() 을체크하면자동으로 main() 메소드생성 Finish 선택
생성된자바소스 31 주목 주목 주목
소스편집과컴파일및실행 32 실행버튼 Run -> Run 실행메뉴 실행결과 콘솔윈도우
자바응용의종류 : 데스크톱응용프로그램 33 가장전형적인자바응용프로그램 PC 등의데스크톱컴퓨터에설치되어실행 자바실행환경 (JRE) 이설치된어떤컴퓨터에서도실행 다른응용프로그램의도움필요없이단독으로실행
자바응용의종류 : 서블릿응용프로그램 34 서블릿 (servlet) 웹서버에서실행되는자바프로그램 서블릿은웹브라우저에서실행되는자바스크립트코드와통신 데이터베이스서버및기타서버와연동하는복잡한기능구현시사용사용자인터페이스가필요없는응용웹서버에의해실행통제받음 웹브라우저 웹서버 인터넷 JVM 서버 servlet 서버
자바모바일응용 : 안드로이드앱 35 안드로이드 구글의주도로여러모바일회사가모여구성한 OHA(Open Handset Alliance) 에서만든무료모바일플랫폼 개발언어는자바를사용하나 JVM 에해당하는 Dalvik 은기존바이트코드와호환성이없어변환필요
자바의특성 (1) 36 플랫폼독립성 하드웨어, 운영체제에종속되지않는바이트코드로플랫폼독립성 객체지향 캡슐화, 상속, 다형성지원 클래스로캡슐화 자바의모든변수나함수는클래스내에선언클래스안에서클래스 ( 내부클래스 ) 작성가능 소스 (.java) 와클래스 (.class) 파일 하나의소스파일에여러클래스를작성가능 public 클래스는하나만가능소스파일의이름과 public으로선언된클래스이름은같아야함클래스파일에는하나의클래스만존재 다수의클래스를가진자바소스를컴파일하면클래스마다별도클래스파일생성
소스파일과클래스, 클래스파일의관계 37 A.java public class A {... } class B {... } class C {... class D {... } } 컴파일 A.class 바이트코드 B.class 바이트코드 C.class 바이트코드 C$D.class 바이트코드 4 개의클래스파일이생성됨
자바의특징 (2) 38 실행코드배포 구성 한개의 class 파일또는다수의 class 파일로구성 여러폴더에걸쳐다수의클래스파일로구성된경우 : jar 압축파일로배포자바응용프로그램의실행은 main() 메소드에서시작 하나의클래스파일에두개이상의 main() 메소드가있을수없음 각클래스파일이 main() 메소드를포함하는것은상관없음 패키지 서로관련있는여러클래스를패키지로묶어관리패키지는폴더개념 예 ) java.lang.system 은 java\lang 디렉터리의 System.class 파일 멀티스레드 여러스레드의동시수행환경지원 자바는운영체제의도움없이자체적으로멀티스레드지원 C/C++ 프로그램은멀티스레드를위해운영체제 API 를호출 가비지컬렉션 자바언어는메모리할당기능은있어도메모리반환기능없음 사용하지않는메모리는자바가상기계에의해자동반환 가비지컬렉션
자바의특징 (3) 39 실시간응용프로그램에부적합 실행도중예측할수없는시점에가비지컬렉션실행때문 응용프로그램의일시적중단발생 자바프로그램은안전 타입체크엄격물리적주소를사용하는포인터개념없음 프로그램작성쉬움 포인터개념이없음동적메모리반환하지않음다양한라이브러리지원 실행속도개선을위한 JIT 컴파일러사용 자바는바이트코드를인터프리터방식으로실행 기계어가실행되는것보다느림 JIT 컴파일기법으로실행속도개선 JIT 컴파일 - 실행중에바이트코드를기계어코드로컴파일하여기계어를실행하는기법