자바 시작
1. 컴파일
- 소스 : 프로그래밍 언어로 작성된 텍스트 파일
- 컴파일 : 소스 파일을 컴퓨터가 이해할 수 있는 기계어로 만드는 과정
(1) 자바 :. java ->. class
(2) C :. c ->. obj ->. exe
(3) C++ :. cpp ->. obj ->. exe
2. 자바의 태동
(1) 1991년 그린 프로젝트 (Green Project)
- 선마이크로시스템즈의 제임스 고슬링(James Gosling)에 의해 시작
- 가전제품에 들어갈 소프트웨어를 위해 개발
- 1995년에 자바 발표
(2) 목적
- 플랫폼 호환성 문제 해결
- 기존 언어로 작성된 프로그램은 PC, 유닉스, 메인 프레임 등 플랫폼 간에 호환성 없음
- 소스를 다시 컴파일하거나 프로그램을 재 작성해야 하는 단점
(3) 플랫폼 독립적인 언어 개발
- 모든 플랫폼에서 호환성을 갖는 프로그래밍 언어 필요
- 네트워크, 특히 웹에 최적화된 프로그래밍 언어의 필요성 대두
(4) 메모리 사용량이 적고 다양한 플랫폼을 가지는 가전 제품에 적용
- 가전 제품 : 작은 량의 메모리를 가지는 제어 장치
- 내장형 시스템 요구 충족
(5) 초기 이름 : 오크(OAK)
- 인터넷과 웹의 엄청난 발전에 힘입어 퍼지게 됨
- 웹 브라우저 Nestscape에서 실행
(6) 2009년에 선마이크로시스템즈를 오라클에서 인수
3. WORA
(1) WORA(Write Once Run Anywhere)
- 한 번 작성된 코드는 모든 플랫폼에서 바로 실행
- C/C++ 등 기존 언어가 가진 플랫폼 종속성 극복
- OS, H/W에 상관없이 자바 프로그램이 동일하게 실행
- 네트워크에 연결된 어느 클라이언트에서나 실행
- 웹 브라우저, 분산 환경 지원
(2) WORA를 가능하게 하는 자바의 특징
- 바이트 코드(byte code)
- 자바 소스를 컴파일한 목적 코드
- CPU에 종속적이지 않은 중립적인 코드
- JVM에 의해 해석되고 실행됨
(3) JVM(Java Virtual Machine)
- 자바 바이트 코드를 실행하는 자바 가상 기계(소프트웨어)
4. 바이트 코드와 자바 가상 기계
(1) 바이트 코드
- 자바 가상 기계에서 실행 가능한 바이너리 코드
- 바이트 코드는 컴퓨터 CPU에 의해 직접 실행되지 않음
- 자바 가상 기계가 작동 중인 플랫폼에서 실행
- 자바 가상 기계가 인터프리터 방식으로 바이트 코드 해석
- 클래스 파일(. class)에 저장
(2) 자바 가상 기계(JVM : Java Virtual Machine)
- 동일한 자바 실행 환경 제공
- 각기 다른 플랫폼에 설치
- 자바 가상 기계 자체는 플랫폼에 종속적
- 자바 가상 기계는 플랫폼마다 각각 작성됨
EX) 리눅스에서 작동하는 자바 가상 기계는 윈도에서 작동하지 않음
- 자바 가상 기계 개발 및 공급
- 자바 개발사인 오라클, IBM 등
(3) 자바 응용프로그램 실행
- 자바 가상 기계가 응용프로그램을 구성하는 클래스 파일(. class)의 바이트 코드 실행
5. 바이트 코드의 디어셈블(disassemble)
(1) 디어셈블
- 클래스 파일에 들어 있는 바이트 코드를 텍스트로 볼 수 있게 변환하는 작업
- JDK의 javap.exe 이용
6. 자바의 개발 및 실행 환경
(1) 자바 프로그램의 개발
- 여러 소스(. java)로 나누어 개발
- 바이트 코드(. class)를 하나의 실행 파일(exe)로 만드는 링크 과정 없음
(2) 실행
- main() 메서드를 가진 클래스에서부터 실행 시작
- 자바 가상 기계는 필요할 때, 클래스 파일 로딩, 적은 메모리로 실행 가능
7. JDK 설치 후 디렉터리 구조
8. 자바 프로그램 개발
(1) public class Hello2030
- 클래스 선언문
- Hello2030은 클래스 이름
- 클래스는 {와 } 사이에 정의
- 자바는 하나 이상의 클래스로 구성
(2) public static void main(String [] args)
- 자바 프로그램은 main() 메서드에서 실행 시작
- 실행을 시작하는 클래스에 main() 메서드가 반드시 하나 존재
(3) int n = 2030;
- 지역 변수 선언
(4) System.out.println("헬로"+n);
- 화면에 "헬로 2030" 출력
- System.out 객체는 JDk에서 제공됨