본문 바로가기
Language/Java

[명품JAVA Programming] 1장 자바 시작

by DEV Lee 2020. 7. 7.

프로그래밍 언어

프로그래밍 언어는 컴퓨터가 실행할 프로그램을 작성하는 언어이다.

기계어(machine language)

  • 0,1 이진수로 구성된 언어
  • 컴퓨터의 CPU는 기계어만 이해한다.

어셈블리어(assembly language)

  • 기계어의 각 명령을 ADD, SUB, MOVE 등과 같은 표현하기 쉬운 상징적인 니모닉 기호(mnemonic symbol)로 일대일 대응시킨 언어

     

고급언어

  • 사람이 이해하기 쉽고 복잡한 알고리즘이나 프로그램, 자료구조를 효율적으로 표현하는 언어
  • 절차지향: C, Pascal, Basic
  • 객체지향: C++, Java, C#

컴파일

소스

프로그래밍 언어로 작성된 텍스트파일

컴파일

소스파일을 컴퓨터가 이애할 수 있는 기계어로 만드는 과정

소스파일 확장자->컴파일 된 파일의 확장자
  • Java: .java->.class
  • C: .c->.obj->.exe
  • C++: .cpp->.obj->.exe

자바의 태동

1991년 그린 프로젝트(Green Project)

  • by. 선마이크로시스템즈의 제임스 고슬링(James Gosling)
  • for. 가전제품에 등러갈 소프트웨어
  • what.
    • 플랫폼 호환성 문제 해결
    • 플랫폼 독립적인 언어 개발
    • 메모리 사용량이 적고 다양한 플랫폼을 가지는 가전제품에 적용
      초기 이름: 오크(OAK)
  • 인터넷과 웹의 엄청난 발전에 힘입어 퍼지게 됨
  • 웹 브라우저 Netscape에서 실행
    2009년에 선파이크로시스템즈를 오라클에서 인수

WORA(Write Once Run Anywhere)

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

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

  • 바이트 코드(byte code)
    • 자바 소스를 컴파일한 목적코드
    • CPU에 종속적이지 않은 중립적 코드
    • JVM에 의해 해석되고 실행됨
  • JVM(Java Virtual Machine)
    • 자바 바이트 코드를 실행하게 하는 자바 가상 기계(SW)

자바 배포판 종류

Java SE

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

    Java ME

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

    Java EE

  • 자바 기업용 배포판
  • Java SE+ 인터넷 기반의 서버사이드 컴퓨팅 관련 API 추가

JDK와 JRE

JDK(Java Development Kit)

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

  • 컴파일러, JRE(Java Runtime Environment), 클래스 라이브러리, 샘플 등 포함
JDK의 bin 디렉터리에 포함된 주요 개발 도구
  • javac: 자바 소스를 바이트 코드로 변환하는 컴파일러
  • java: jre의 bin 디렉터리에도 있는 자바 응용프로그램 실행기
  • jar: 자바 아카이브 파일(JAR)의 생성 및 관리하는 유틸리티
  • jdb: 자바 디버거
  • appletviewer: 웹 브라우저 없이 애플릿을 실행하는 유틸리티
JDK 설치 후 디렉터리 구조
  • bin: 자바 개발, 실행하는데 필요한 도구와 유틸리티
  • db: 자바로 DB 응용프로그램 개발하는데 필요한 도구
  • demo: 자바 프로그래밍 예제와 소스 코드
  • include: 네이티브 코드 프로그래밍에 필요한 헤더 파일
  • jre(bin/lib): 자바 런타임 환경, JVM, 클래스 라이브러리 실행 등에 필요한 파일
  • lib: JDK의 기본 라이브러리 외 추가 클래스 라이브러리와 개발 도구에서 필요로 하는 여러 파일
  • sample: 자바 프로그램 샘플 소스 코드
  • scr: 자바 API 클래스들에 대한 자바 코드

JRE(Java Runtime Environment)

자바 실행환경. JVM 포함

  • 자바 실행환경만 필요한 경우 JRE만 따로 다운 가능

자바 API

Java API(Application Programming Interface)란?

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

  • 주요한 기능들을 미리 구현한 클래스 라이브러리의 집합
    개발자는 API를 이용해 쉽고 빠르게 자바 프로그램 개발
  • API에서 정의한 구격에 따라 클래스 사용

    자바 패키지(package)

    서로 관련된 클래스들을 분류하여 묶어놓은 것.
  • 계층구조*로 되어있음
  • 클래스의 이름에 패키지 이름도 포함
  • 다른 패키지에 동일한 이름의 클래스 존재 가능
    자바 API(클래스 라이브러리)는 JDK에 패키지 형태로 제공됨
  • 필요한 클래스가 속한 패키지만 import하여 사용
    개발자 자신의패키지 생성 가능

자바의 특징

플랫폼 독립성

하드웨어, OS등 플랫폼에 종속되지 않는 독립적인 바이트 코드로 컴파일 됨

객체지향

자바는 객체지향 언어로서 캡슐화, 상속, 다형성지원

클래스로 캡슐화

객체지향 언어의 캡슐화(encapsulation)원칙 지켜서 변수나 메소드는 반드시 클래스 내에 구현하도록.

소스와 클래스 파일

클래스 파일(.class)에는 반드시 하나의 자바 클래스만 들어 있다. 자바 소스파일에 여러 개의 클래스 작성한 경우, 컴파일하면 클래스마다 별도의 클래스 파일이 생성된다.

실행코드 배포

자바 응용프로그램은 한 개 이상의 클래스파일로 구성. 다수의 클래스 파일을 jar 파일 형태로 압축해서 배포하거나 실행.
실행은 main 메소드에서 시작됨

패키지

서로 관련 있는 클래스는 패키지로 묶어 관리.

멀티스레드

하나의 자바 프로그램의 다수의 작업 처리할 수 있도록 다수의 스레드가 동시에 실행할 수 있는 환경 제공

가비지 컬렉션

자바 언어는메모리를 할당받는 기능은 있지만 메모리를 반환하는 기능은 없음(->개발자 행복. 프로그래밍 부담 없음). 프로그램내 사용되지 않는 메모리(가비지)는 자바 가상 기계의 가비지 컬렉션 기능에 의해 자동으로 회수

실시간 응용 시스템에 부적합

실행도중 예측할 수 없는 시간에 가비지 컬렉션 실행->일정시간 내에 실행 결과 내야하는 실시간 시스템에는 부적합

자바 프로그램은 안전

타임 체크가 엄격하며 C/C++과 달리 메모리의 물리적 주소 사용하는 포인터의 개념이 없음

프로그램 작성이 쉽다

C/C++ 포인터 개념이 없어서 프로그램 작성에 부담이 적다.

실행속도를 개선하기 위해 JIT 컴파일러 사용된다

===

  • 소스파일에 여러 개 클래서 작성한 경우 컴파일하면 클래스마다 별도의 클래스파일 생성됨
  • JDK와 JRE

댓글