플랫폼 독립적(Platfoem Independent)이며 메모리 사용 용량이 적은 객체 지향 언어
자바 가상 머신(Java Virtual Machine)가 있어 운영체제나 하드웨어에 상관없이 동일한 실행 환경 및 실행 결과를 제공
WORA(Write Once Rub Anywhere)의 특징을 대표적으로 보여줌
한번 작성된 코드는 모든 플랫폼에서 실행
프로그래밍 언어
컴퓨터가 실행할 프로그램을 작성하는 언어
기계어(Machine Language)
0과 1로 이루어진 이진수(binary code) 명령어들로 구성된 언어
어셈블리어(Assembly Language)
사람이 직접 기계어 프로그램을 작성하기 힘들기 때문에 만들어진 언어
기계어의 각 명령을 ADD,SUB,MOVE 등 가급적 표현하기 쉬운 상징적인 니모닉 기호(mnemonic symbol)로 일대일 대응시킨 언어
고급언어(High Level Language)
어셈블리어 역시 사람이 다루기 힘들고 표현에 한계가 있기 때문에 만들어 진 언어
사람이 이해하기 쉽고, 복잡한 알고리즘이나 프로그램, 자료를 효율적으로 표현
절차 지향 언어(Procedural Programming Language)
초기의 고급 언어
순차적인 처리가 중요시 되며 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법
대표적인 절차지향 언어에는 C언어
객체 지향 언어(Object Oriented Programming Language)
프로그램 구현에 필요한 객체를 파악하고 각각의 객체들 마다 역할을 정의하여 객체들 간의 상호작용을 통해 프로그램을 만드는 프로그래밍 기법
특징
상속(Inheritance) 상위 클래스의 모든 걸 하위 클래스가 이어 받는 것 부모의 특징을 자식이 물려 받는 것 과 같음
캡슐화(Encapsulation) 데이터와 코드의 형태를 외부로부터 보호 및 데이터의 구조와 역활, 기능을 하나의 캡슐 형태로 만드는 방법
다형성(Polymorphism) 한 객체가 다른 여러 객체로 재구성 되는 것 대표적인 예로 오버로드(Overload) 또는 오버라이드(Override)이 있음
추상화(Abstraction) 객체의 공통적인 속성과 기능을 추출하여 정의하는 것 공통적인 특성을 파악하여 필요 없는 특성을 제거하는 과정
대표적인 객체 지향 언어에는 JAVA, C#, C++ 등이 있음
프로그램 컴파일 과 실행
프로그래밍은 컴퓨터 언어로 프로그램 소스(Source)파일을 작성하는 것으로 시작
소스(Source) 프로그래밍 언어로 작성된 텍스트 파일
컴퓨터는 고급 언어로 작성된 프로그램을 직접 처리할 수 없기 때문에, 컴파일(compile) 과정을 통해 기계어로 변환 필요
컴파일(compile) 소스 파일을 컴퓨터가 이해할 수 있는 기계어로 만드는 과정
바이트 코드
자바 가상 기계에서만 실행 되는 기계어로서 CPU와 관계 없는 바이너리 코드(Binary Code)
자바 가상 기계가 인터프리터 방식으로 바이트 코드 해석
인터프리터 고급언어로 작성된 프로그램을 한 문장씩 읽고, 번역 후 실행하는 방식
자바 가상 기계(JVM : Java Virtual Machine)
소프트웨어로서, 서로 다른 플랫폼에서 자바 프로그램이 실행되는 동일한 환경 제공
자바 가상 기계 자체는 플랫폼에 종속적
자바 프로그램 실행
소스 코드(.java) → 자바 컴파일러 → 바이트 코드(.class) → JVM(로딩 (→ 필요한 클래스 파일 로딩) → 배치→ 실행) → 운영체제
JDK(Java Development Kit)
자바 개발자를 위한 상업용 소프트웨어
자바 컴파일러 등의 개발 도구와 JRE(Java Runtime Environment)로 구성
JRE(Java Runtime Environment) 개발자가 활용할 수 있는 자바 API와 자바 가상 기계를 포함
JDK의 bin 디렉터리에 포함된 주요 개발 도구
javac 자바 소스를 바이트 코드로 변환하는 컴파일러
java 자바 응용프로그램 실행기
javadoc 자바 소스로부터 HTML 형식의 API 도큐먼트 생성
jar 자바 클래스들(패키지포함)을 압축한 자바 아카이브 파일(.jar) 생성 관리
jmod 자바의 모듈 파일(.jmod)을 만들거나 모듈 파일의 내용 출력
jlink 응용프로그램에 맞춘 맞춤형(custom) JRE 제공
jdb 자바 응용프로그램의 실행 중 오류를 찾는 데 사용하는 디버거
javap 클래스 파일의 바이트 코드를 소스와 함께 보여주는 디어셈블러
자바의 배포판 종류
Java SE
자바 표준 배포판(Standard Edition)
데스크탑과 서버 응용 개발 플랫폼
Java ME
자바 마이크로 배포판(Micro Edition) 휴대전화나 셋톱박스 등 제한된 리소스를 갖는 하드웨어에서 응용 개발을 위한 플랫폼
Java SE의 서브 셋 + 임베디드 및 가전 제품을 API 정의
Java EE
자바 기업용 배포판 자바를 이용한 다중 사용자, 기업용 응용 개발을 위한 플랫폼
Java SE + 인터넷 기반의 서버사이드 컴퓨팅 관련 API 추가
자바 API(Application Programming Interface)
JDK에 포함된 클래스 라이브러리
개발자는 API를 이용하여 쉽고 빠르게 자바 프로그래램 개발
자바IDE(Integrated Devlopment Environment)
IDE란 단어가 뜻하는 그대로 소스 코드 편집, 컴파일, 디버깅을 한꺼번에 할 수 있는 통합 개발 환경(소프트웨어)
자바 응용프로그램 개발에 현재 많이 사용되고 있는 IDE로 이클립스(eclipse)가 있음
자바의 특징
플랫폼 독립성 자바 가상 기계만 있으면 하드웨어/운영체제를 막론하고 자바 프로그램의 실행이 가능
객체 지향 캡슐화, 상속, 다형성을 지원
클래스로 캡슐화 객체 지향 언어의 캡슐화(encapsulation) 원칙을 철저히 지켜, 변수나 메소드는 반드시 클래스 내에 구현 클래스에 속하지 않는 변수나 메소드는 있을 수 없음 클래스 안에 새로운 클래스, 내부 클래스를 만들 수 있음
소스와 클래스 파일 클래스 파일에는 반드시 하나의 자바 클래스만 존재, 그러므로 자바 소스 파일에 여러 개의 클래스를 작성한 경우, 컴파일 진행 시 클래스마다 별도의 클래스 파일 생성 하나의 자바 소스 파일에 작성된 클래스 중 오직 한 클래스만 public으로 선언 가능, 소스 파일 파일 내에 public 으로 선언된 클래스의 이름으로 자바 소스 파일을 저장
실행 코드 배포 자바 응용프로그램은 한 개의 클래스 파일 또는 다수의 클래스 파일로 구성되어 다수의 클래스 파일을 jar 파일 형태로 압축하여 배포 또는 실행 java 9부터는 자바 응용프로그램을 위한 맞춤형 커스텀 JRE를 만들어 실행이 가능해짐
패키지 서로 관련 있는 클래스는 패키지(폴더와 같은 개념)로 묶어 관리
멀티스레드 하나의 자바 프로그램이 다수의 작업을 처리할 수 있도록 다수의 스레드가 동시에 실행 할 수 있도록 다수의 스레드가 동시에 실행 할 수 있는 환경
가바지 컬렉션 프로그램 내에 사용되지 않는 메모리(가비지)는 자바 가상 기계의 가비지 컬렉션 기능에 의해 자동으로 회수
실시간 응용 시스템에 부적합 실행 도중 예측할 수 없는 시점에 가비지 컬렉션이 실행되므로, 프로그램 실행이 일시 중단되므로 일정 시간 내에 실행 결과를 내야 하는 실시간 시스템에는 부적합
안전성 자바는 타입 체크가 매우 엄격하며, 다른 언어와 달리 메모리의 물리적 주소를 사용하는 포인터의 개념이 없기 때문에 잘못된 자바 프로그램으로 인해 컴퓨터 시스템이 중단 될 일이 없음
프로그램 작성이 쉽다 포인터 개념이 없기 때문에 프로그램 작성에 부담이 적음 다양한 라이브러리와 스윙 등 GUI 라이브러리를 지원하므로 프로그램 작성이 빠르고 쉬움
JIT 컴파일러 사용 실행하는 도중 자바 프로그램을 해당 CPU의 기계어 코드로 컴파일하고 CPU가 바로 기계어를 실행하도록 하는 JIT(Just in Time) 컴파일링 기법을 이용하므로, C/C++ 와 거의 비슷한 성능으로 개선