[Java] 1. 서론 ( 전반적인 내용 )

seungwon·2021년 6월 9일
0

Java

목록 보기
1/5
post-thumbnail

목차

  • 프로그래밍 언어
  • 컴파일 의미(C/C++과의 비교)
  • 자바의 목적, WORA 개념
  • JAVA 개발 및 실행환경(C/C++과의 비교)
  • JDK
  • JRE
  • Java API
  • Package
  • Java의 특성 요약
  • 자바 배포판(Edition) 종류 - java API 차이
  • 모듈 프로그래밍(Java 9 부터)
  • Java 응용의 종류
  • Javadoc : Java API 문서 생성 도구

( 이 글에서 명시되지 않은 경우 모두 Java 8 기준)


프로그래밍 언어

프로그램이 작성한 언어

종류

  • 기계어 : 기계어가 지칭하는 기계는 컴퓨터의 CPU를 의미한다. 즉 기계어는 컴퓨터의 CPU만 이해하고 처리가능한 언어이다.
    (이진수, 즉, 0,1 로 구성됨)

  • 어셈블리어 : 기계어 명렁을 니모닉 기호(mnemonic symbol) 로 일대일 대응시킨 언어
    Mnemonic Symbol : ADD, SUB, MOVE, .... 기계어에 비해서는 표현하기 쉽고 상징적인 단어들로 구성됨

  • 고급언어 : 사람이 이해하기 쉬움. 복잡한 작업 / 자료구조 / 알고리즘을 표현하기 위해 고안된 언어
    ( Pascal, Basic, C/C++, Java, C# )
    절차 지향 언어, 객체 지향 언어

cf. 프로그래밍 언어의 진화

출처 : 명품 Java Programming(황기태, 김효수 저)


컴파일

소스 : 프로그래밍 언어로 작성된 텍스트 파일
컴파일 : 소스파일을 컴퓨터가 이해할 수 있는 기계어로 만드는 과정

소스코드 --컴파일--> 실행 파일

소스파일과 컴파일된 파일의 확장자

  • 자바
    .java(소스코드) - 컴파일 -> .class (바이트코드)
    .java / .class 파일 모두 기계어코드, 실행파일이 없어도 실행가능(JVM)
  • C
    .c(소스코드) -> .obj -> .exe
    .obj, .exe파일은 기계어 코드
  • C++
    .cpp -> .obj -> .exe

실행파일 : 어떤 작업을 위해 실행할 수 있는 파일
프로세스(Process) : 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램

실행파일이 디스크에 위치하면 프로그램, 메모리에 위치하면 프로세스

cf. C/C++ : 프로그램의 전처리, 컴파일, 링크 과정


Start_up code : 응용프로그램의 메모리 관리(ex. 할당), main 함수 호출
즉, a.exe (실행파일) 실행시 Start_up code 를 실행 후 main 함수가 호출됨.

자바의 목적

태동 : 가전 제품에 들어갈 소프트웨어를 위해 개발

  1. 플랫폼 호환성 문제 해결
  2. 플랫폼 독립적인 언어 개발 : 모든 플랫폼에서 호환성을 갖는 프로그래밍 언어 필요
  3. 메모리 사용량이 적고 다양한 플랫폼을 가지는 가전 제품에 적용
    가전제품 : 작은량의 메모리를 가지는 제어 장치, 내장형 시스템 요구 충족 

WORA (Write Once Run Anywhere) : 플랫폼 독립성

  • 한번 작성된 코드는 모든 플랫폼에서 바로 실행
  • C/C++ 등 기존 언어가 가진 플랫폼 종속성 극복
    OS, 하드웨어에 상관없이 자바 프로그램이 동일하게 실행
  • 네트워크에 연결된 어느 클라이언트에서나 실행 (웹 브라우저, 분산 환경 지원)

WORA를 가능케 하는 자바의 특징

  1. 바이트 코드 (byte code) : 자바 소스코드를 컴파일한 목적 코드 (object file)
    • cpu에 종속적이지 않은 중립적인 코드
    • JV에 의해 해석되고 실행됨
  2. JVM (Java Virtual Machine) : 자바 바이트 코드를 실행하는 자바 가상 기계 (플랫폼종속적)
    • 바이트코드는 JVM에서만 실행가능
  3. 자바 응용프로그램 실행 : JVM이 응용프로그램을 구성하는 클래스파일(.class)의 바이트 코드 실행

cf. 바이트코드의 디어셈블(disassemble) : 클래스 파일에 들어있는 바이트 코드 -> 텍스트(JDK 의 javap.exe 이용)

자바의 개발 및 실행 환경

  • Java & C(C++)
 JAVAC / C++
프로그램
개발
- 여러 소스(.java)로 나누어 개발
- 바이트 코드(.class)를 하나의 실행 파일(exe)로 만드는 링크 과정 없음
- 여러 소스(.c) 파일로 나누어 개발
- 링크를 통해 실행에 필요한 모든 코드를 하나의 실행 파일(.exe)에 저장
실행- main() 메소드를 가진 클래스에서 부터 실행 시작
- JVM은 필요할 때 클래스 파일을 프로그램 실행중에 동적으로 로딩 (JVM에 포함된 ClassLoader에 의해 이루어짐,
ClassLoader 클래스로 개발자가 직접 클래스 로딩도 가능)
- 적은 메모리로 실행 가능
- 링커가 목적 코드와 라이브러리 링크, 실행 파일 생성
- 정적 라이브러리는 실행 파일에 포함 -> 실행 파일 크기가 커짐
- 동적 라이브러리는 실행중에 동적 링크
- 목적 코드 / 실행 파일은 플랫폼에 따라 다름 (다른 플랫폼에서는 다시 컴파일 및 링크)
  • JAVA
  • C/C++


JDK

자바 응용 개발 환경. 개발에 필요한 도구를 포함한다.

  • 컴파일러, 컴파일된 자바 API 클래스들이 들어있는 모듈 파일들, 샘플 등 포함
  • JDK의 bin 디렉토리에 개발 도구가 포함되어 있음.

이러한 개발도구들은 플랫폼 종속적이다.

[ 주요 개발 도구 ]

  • javac - 자바 소스를 바이트 코드로 변환하는 컴파일러
  • javadoc – 자바 소스로부터 HTML 형식의 API 도큐먼트 생성
  • jar – 자바 클래스들(패키지포함)을 압축한 자바 아카이브 파일(.jar) 생성 관리 
  • jmod - 자바의 모듈 파일(.jmod)을 만들거나 모듈 파일의 내용 출력
  • jlink - 응용프로그램에 맞춘 맞춤형(custom) JRE 제공
  • jdb - 자바응용프로그램의실행중오류를찾는데사용하는디버거
  • javap - 클래스 파일의 바이트 코드를 소스와 함께 보여주는 디어셈블러



JRE

자바 실행 환경 ( JVM 포함 )

  • 컴파일된 자바 API들이 들어있는 모듈 파일
  • 개발자기 아닌 경우 JRE만 따로 다운 가능

Java API

JDK에 포함된 클래스 라이브러리

주요한 기능들을 미리 구현한 클래스 라이브러리의 집합

자바 온라인 API 문서 : https://docs.oracle.com/javase/10/docs/api/

Package

서로 관련된 클래스들을 분류하여 묶어 놓은 것 (폴더 개념)

  • 계층구조로 되어 있음
    • 클래스의 이름에 패키지 이름도 포함 (java.lang.System은 java\lang 디렉터리의 System.class 파일)
    • 다른 패키지에 동일한 이름의 클래스 존재 가능
  • 자바 API(클래스 라이브러리)는 JDK에 패키지 형태로 제공됨 
    • 필요한 클래스가 속한 패키지만 import하여 사용
  • 개발자 자신의 패키지 생성 가능

Java의 특성

  1. 플랫폼 독립성
  2. 객체 지향 (상속성, 다형성, 캡슐화)
    • class 로 캡슐화 : 클래스 내에서 모든 변수 (field), 함수(method) 구현
    • class 내에 새로운 class (내부 class) 작성 가능
  3. 소스 (.java) &  클래스 (.class) 파일
    • 하나의 소스 파일에 여러 클래스 작성 가능
      • public 클래스는 하나만 가능
      • 소스 파일의 이름과 public으로 선언된 클래스 이름은 같아야 함
    • 컴파일된 클래스 파일(.class)에는 클래스는 하나만 존재
      • 다수의 클래스를 가진 자바 소스(.java)를 컴파일하면 클래스마다 별도 클래스 파일(.class) 생성 (JVM이 필요한 클래스만 로딩 가능)
  4. 실행 코드 : 한 개의 class 파일 또는 다수의 class 파일로 구성
    • 여러 폴더에 걸쳐 다수의 클래스 파일로 구성된 경우 jar 파일 형태로 배포 가능
    • 자바 응용프로그램의 실행은 main() 메소드에서 시작 -> 하나의 클래스 파일에는 하나의 main 메소드만
  5. Package
  6. 멀티스레드
    • 자바는 운영체제의 도움 없이 자체적으로 멀티스레드 지원
    • C/C++ 등에서는 멀티스레드 운영체제 API를 호출
  7. 가비지 컬렉션
    • 자바는 응용 프로그램에서 메모리 반환 기능 없음, 메모리 할당 기능(new)만 있음 
    • 가비지: 할당 후 사용되지 않는 메모리 -> JVM이 자동으로 가비지 회수
  8. 실시간 응용 시스템에 부적합
    • 자바 응용 프로그램은 실행 도중 예측할 수 없는 시점에 가비지 컬렉션 실행
    • 일정 시간(deadline) 내에 반드시 실행 결과를 내야만 하는 실시간 시스템에는 부적합
  9. 자바 프로그램은 안전 
    • 타입체크가 매우 엄격 
    • 포인터의 개념이 없음
  10. 프로그램 작성이 쉬움
    • 포인터 개념이 없어 부담 적음
    • 다양하고 강력한 라이브러리가 많음
  11. 실행 속도를 개선하기 위해 JIT 컴파일러 사용
    - 자바의 느린 실행 요인: 인터프리터 방식으로 바이트코드 실행 
    - JIT(Just in Time) 컴파일링 기법으로 개선
    - 실행 도중 바이트 코드를 해당 CPU의 기계어 코드로 컴파일, 해당 CPU가 기계어를 실행

자바 배포판(Edition) 종류 : java API 가 다름

Java SEJava MEJava EE
자바 표준 배포판(Standard Edition)

데스크탑, 서버 응용 개발 플랫폼
자바 마이크로 배포판 (임베디드)
Java SE의 서브셋 +임베디드 및 가전 제품을 위한 API 
자바 기업용 배포판
Java SE + 인터넷 기반의 서버사이드 컴퓨팅 관련 API

모듈 프로그래밍(Java 9 부터)

  • 모듈 : 자바 패키지 + 이미지 + XML 파일 등의 자원들을 묶은 단위
  • 모듈 프로그래밍 : 필요한 모듈을 연결하는 방식
  • 모듈화의 목적
    - 세밀한 모듈화로 자바 응용프로그램이 실행되는데 필요없는 모듈 배제 
    - 작은 크기의 실행 환경 구성
    - 하드웨어가 열악한 소형 IoT 장치 지원
    - 자바 플랫폼이 모듈 방식으로 바뀌었지만, 기존 방식으로 프로그래밍해도 무관

Java 응용의 종류

  1. 데스크톱 응용프로그램 
  2. 서블릿 응용프로그램
    • 웹 서버에서 실행되는 자바 프로그램 
    • 웹브라우저에서 실행되는 자바스크립트 코드와 통신
    • 데이터베이스 서버 및 기타 서버와 연동하는 복잡한 기능 구현 시 사용
    • 사용자 인터페이스가 필요 없는 응용
    • 웹 서버에 의해 실행 통제 받음
  3. 안드로이드 앱 : 개발 언어는 자바를 사용하나 JVM에 해당하는 Dalvik은 기존 바 이트 코드와 호환성이 없어 변환 필요

Javadoc : Java API 문서 생성 도구

JDK에서 기본으로 제공
내가 작성한 자바 프로그램 소스에 대한 API 문서를 생성 할 수 있다.

usage: javadoc [options] [packagenames] [sourcefiles] [@files]
javadoc 공식 문서 - Oracle

ex. javadoc -d <문서가 생성될 위치> <문서화할 소스 파일 위치>
javadoc -d doc ./src/*.java


참고 자료 (사진 출처)

명품 Java Programming(황기태, 김효수 저)

0개의 댓글