콘텐츠로 이동

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의 개발 및 배포

2) 자바의 배포판

오라클은 개발 환경에 따라 다양한 자바 개발 배포판 제공

Java SE

  • 자바 표준 배포판(Standard Edition)
  • 데스크탑과 서버 응용 개발 플랫폼

Java ME

  • 자바 마이크로 배포판
  • 휴대 전화나 PDA, 셋톱박스 등 제한된 리소스를 갖는 하드웨어에서 응용 개발을 위한 플랫폼
  • 가장 작은 메모리 풋프린트
  • JavaSE의서브셋+임베디드및가전제품을위한API정의

Java EE

  • 자바 기업용 배포판
  • 자바를이용한다중사용자,기업용응용개발을위한플랫폼
  • JavaSE+인터넷기반의서버사이드컴퓨팅관련API추가

3) JAVA SE 구성

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)

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 디렉터리에 있음