JAVA
1. 자바소개
1) 컴퓨터와 소프트웨어
컴퓨터와 프로그래머, 소프트웨어의 관계는 만능 요리 기계, 요리설계사 그리고 요리순서와 같다.
2) 프로그래밍 언어
기계어(machine language) - 0, 1의 이진수로 구성된 언어 - 컴퓨터의 CPU는 기계어만 이해하고 처리가능
어셈블리어 - 기계어 명령을 ADD, SUB, MOVE 등과 같은 표현하기 쉬운 상징적인 단어인 니모닉 기호(mnemonic symbol)로 일대일 대응시킨 언어
고급언어 - 사람이 이해하기 쉽고, 복잡한 작업, 자료 구조,알고리즘을 표현하기위해 고안된 언어 - Pascal, Basic, C/C++, Java, C# - 절차지향언어와객체지향언어로나눌수있음
3) 프로그래밍과 컴파일
소스 : 프로그래밍 언어로 작성된 텍스트 파일
컴파일 : 소스 파일을 컴퓨터가 이해할 수 있는 기계어로 만드는 과정
- 자바 : .java → .class
- C:.c→.obj→.exe
- C++ : .cpp →.obj →.exe
graph LR;
A[소스 프로그램 편집 및 개발]-->B[소스 프로그램];
B-->C[컴파일러];
C-->|컴파일| D[기계어];
D-->E[프로그램 실행];
4) 자바의 태동
1991년 그린 프로젝트(Green Project)
- 선마이크로시스템즈의 제임스 고슬링(James Gosling)에 의해 시작
- 가전 제품에 들어갈 소프트웨어를 위해 개발
1995년에 자바 발표
플랫폼 호환성 문제 해결
- 기존언어로작성된프로그램은PC,유닉스,메인프레임등플랫폼간에 호환성 없음
- 소스를 다시 컴파일하거나 프로그램을 재 작성해야 하는 단점
플랫폼 독립적인 언어 개발
- 모든 플랫폼에서 호환성을 갖는 프로그래밍 언어 필요
- 네트워크, 특히 웹에 최적화된 프로그래밍 언어의 필요성 대두
메모리 사용량이 적고 다양한 플랫폼을 가지는 가전 제품에 적용
- 가전제품:작은량의메모리를가지는제어장치
- 내장형 시스템 요구 충족
초기 이름 : 오크(OAK)
- 인터넷과 웹의 엄청난 발전에 힘입어 퍼지게 됨
- 웹 브라우저 Netscape에서 실행
2009년에 선마이크로시스템즈를 오라클이 인수
5) 기존 언어의 플랫폼 종속성
graph LR
A[인텔 CPU를 가진 리눅스 환경에서 개발] --> B[C/C++ 응용 프로그램];
B -->|실행| C[Intel CPU + 리눅스];
B -->|실행되지 않음| D[Apple 사의 MAC PC];
B -->|실행되지 않음| E[Intel CPU + 윈도우 노트북];
플랫폼 = 하드웨어 플랫폼 + 운영체제 플랫폼
프로그램의 플랫폼 호환성 없는 이유
- 기계어가 CPU마다 다름
- 운영체제마다 API 다름
- 운영체제마다 실행파일 형식 다름
6) 자바의 플랫폼 독립성, WORA
WORA(Write Once Run Anywhere)
- 한번 작성된 코드는 모든 플랫폼에서 바로 실행되는 자바의 특징
- C/C++등기존언어가가진플랫폼종속성극복
- OS, H/W에 상관없이 자바 프로그램이 동일하게 실행
- 네트워크에 연결된 어느 클라이언트에서나 실행
- 웹브라우저,분산환경지원
WORA를 가능하게 하는 자바의 특징
- 바이트 코드(byte code)
- 자바소스를컴파일한목적코드
- CPU에 종속적이지 않은 중립적인 코드
- JVM에 의해 해석되고 실행됨
- JVM(Java Virtual Machine)
- 자바 바이트 코드를 실행하는 자바 가상 기계(소프트웨어)
Write Once !!
Run Anywhere!!
graph LR
A[Java 응용 프로그램] -->|실행| B[Intel CPU + 리눅스];
A -->|실행| C[Apple 사의 MAC PC];
A -->|실행| D[Intel CPU + 윈도우 노트북];
7) 자바 가상 기계와 자바 실행 환경
바이트 코드
- 자바 가상 기계에서 실행 가능한 바이너리 코드
- 바이트 코드는 컴퓨터 CPU에 의해 직접 실행되지 않음
- 자바가상기계가작동중인플랫폼에서실행
- 자바 가상 기계가 인터프리터 방식으로 바이트 코드 해석
- 클래스 파일(.class)에 저장
자바 가상 기계(JVM : Java Virtual Machine)
- 자바 가상 기계 자체는 플랫폼에 종속적
- 자바 가상 기계는 플랫폼마다 각각 작성됨
- 예) 리눅스에서 작동하는 자바 가상 기계는 윈도우에서 작동하지 않음
자바 실행
- JVM이 클래스 파일(.class)의 바이트 코드 실행
8) 자바 응용프로그램의 실행
2. 자바통합개발환경 - 이클립스
1) JDK와 JRE
JDK(Java Development Kit)
- 자바응용개발환경
- 컴파일러, JRE (Java Runtime Environment), 클래스 라이브러리, 샘플 등 포함
- JRE(Java Runtime Environment)
- 자바실행환경.JVM포함
- 자바실행환경만필요한경우JRE만따로다운가능
JRE(Java Runtime Environment)
- 자바실행환경.JVM포함
- 컴파일된 자바 API들이 들어 있는 모듈 파일 - 개발자가아닌경우JRE만따로다운가능
JDK와 JRE의 개발 및 배포
- 오라클의 Technology Network의 자바 사이트에서 다운로드 http://www.oracle.com/technetwork/java/index.html
2) 자바의 배포판
오라클은 개발 환경에 따라 다양한 자바 개발 배포판 제공
Java SE
- 자바 표준 배포판(Standard Edition)
- 데스크탑과 서버 응용 개발 플랫폼
Java ME
- 자바 마이크로 배포판
- 휴대 전화나 PDA, 셋톱박스 등 제한된 리소스를 갖는 하드웨어에서 응용 개발을 위한 플랫폼
- 가장 작은 메모리 풋프린트
- JavaSE의서브셋+임베디드및가전제품을위한API정의
Java EE
- 자바 기업용 배포판
- 자바를이용한다중사용자,기업용응용개발을위한플랫폼
- JavaSE+인터넷기반의서버사이드컴퓨팅관련API추가
3) JAVA SE 구성
4) JAVA 설치 후 디렉터리 구조
── Java
└─ bin // 자바 개발, 실행에 필요한 도구용 유틸리티 명령
├─ conf // 여르 종류의 배치파일
├─ include // 네이티브 코드 프로그래밍에 필요하는 C언어
├─ jmods // 컴파일된 모듈 파일들
├─ legal // 각 모듈에 대한 저작권과 라이선스 파일
└─ lib // 실행 시간에 필요한 라이브러리 클래스들
5) JAVA API
자바 API(Application Programming Interface)
- 개발자가 이용하여 쉽고 빠르게 자바프로그램을 개발할 수 있는 자바라이브러리
- JDK에 클래스 라이브러리로 제공
- 패키지 형태로 제공
자바 패키지(package)
- 서로 관련된 클래스들을 분류하여 묶어 놓은 것
- 계층구조로 되어 있음
- 개발자 자신의 패키지 생성 가능
https://docs.oracle.com/javase/10/docs/api/overview-summary.html
6) 자바 통합 개발 환경__이클립스(Eclipse)
IDE(Integrated Development Environment )
- 통합개발환경
- 편집,컴파일,디버깅을한번에할수있는통합된개발환경
이클립스(Eclipse)
- 자바응용프로그램개발을위한통합개발환경
- IBM에 의해 개발된 오픈 소스 프로젝트
- http://www.eclipse.org/downloads/ 에서 다운로드
3. 자바응용의 종류
1) 데스크톱 응용프로그램
가장 전형적인 자바 응용프로그램
- PC 등의 데스크톱 컴퓨터에 설치되어 실행
- JRE가 설치된 어떤 환경에서도 실행
- 다른 응용프로그램의 도움이 필요 없이 단독으로 실행
2) 서블릿 응용프로그램
서블릿(servlet)
- 웹 서버에서 실행되는 자바 프로그램
- 웹브라우저에서 실행되는 코드와 통신
- 데이터베이스서버및기타서버와연동하는복잡한기능구현시사용
- 사용자 인터페이스가 필요 없는 응용
- 웹서버에의해실행통제받음
3) 안드로이드 앱
안드로이드
- 구글의 주도로 여러 모바일 회사가 모여 구성한 OHA(Open Handset Alliance)에서 만든 무료 모바일 플랫폼
- 개발 언어는 자바를 사용하나 JVM에 해당하는 Dalvik은 기존 바이트 코드와 호환성이 없어 변환 필요
4. 자바의 특성
플랫폼 독립성
- 하드웨어, 운영체제에 종속되지 않는 바이트 코드로 플랫폼 독립성
객체지향
- 캡슐화, 상속, 다형성 지원
클래스로 캡슐화
- 자바의 모든 변수나 함수는 클래스 내에 선언
- 클래스 안에서 클래스(내부 클래스) 작성 가능
소스(.java)와 클래스(.class) 파일
- 하나의 소스파일에 여러클래스를작성가능 :public클래스는 하나만가능
- 소스 파일의 이름과 public으로 선언된 클래스 이름은 같아야 함
- 클래스 파일에는 하나의 클래스만 존재
- 다수의 클래스를 가진 자바 소스를 컴파일하면 클래스마다 별도 클래스 파일 생성
실행 코드 배포
- 한개의 class 파일 또는 다수의 clas s파일로 구성
- 여러폴더에 걸쳐 다수의 클래스파일로 구성 된 경우: jar압축파일로배포
패키지
- 서로 관련 있는 여러 클래스를 패키지로 묶어 관리
- 패키지는 폴더 개념
- 예) java.lang.System은 java\lang 디렉터리의 System.class 파일
멀티스레드
- 여러 스레드의 동시수행 환경 지원
- 자바는 운영체제의 도움 없이 자체적으로 멀티스레드 지원
- C/C++ 프로그램은 멀티스레드를 위해 운영체제 API를 호출
가비지 컬렉션
- 자바언어는메모리할당기능은있어도메모리반환기능없음
- 사용하지않는메모리는자바가상기계에의해자동반환
실시간 응용프로그램에 부적합
- 실행도중예측할수없는시점에가비지컬렉션실행때문
- 응용프로그램의 일시적 중단 발생
자바 프로그램은 안전
- 타입체크엄격
- 물리적 주소를 사용하는 포인터 개념 없음
프로그램 작성 쉬움
- 포인터 개념이 없음
- 동적메모리반환하지않음
- 다양한 라이브러리 지원
**실행 속도 개선을 위한 JIT 컴파일러 사용(())
-
자바는 바이트 코드를 인터프리터 방식으로 실행
- 기계어가 실행되는 것보다 느림
-
JIT 컴파일 기법으로 실행 속도 개선
- JIT 컴파일 - 실행 중에 바이트 코드를 기계어 코드로 컴파일하여 기계어를 실행하는 기법
5. 모듈 프로그래밍
모듈화(modularity)
- Java 9에서 정의된 새로운 기능, 2017년 9월 21일 출시
- 모듈:자바패키지들과이미지,XML파일등의자원들을묶은단위
- 모듈 프로그래밍 : 자바 응용프로그램을 마치 직소 퍼즐(jigsaw)을 연결하듯이 필요한 모듈을 연결하는 방식으로 작성
자바 플랫폼의 모듈화
- 실행 시간에 사용되는 자바 API의 모든 클래스들을 모듈들로 분할
- 자바 응용프로그램이 실행되는데 불필요한 모듈 배제
- 작은크기의실행환경구성
- 하드웨어가 열악한 소형 IoT 장치 지원
Java 9부터 플랫폼을 모듈화함
- Java SE의 모든 클래스들을 모듈들로 재구성
- JDK의 설치 디렉터리 밑의 jmods 디렉터리에 있음