자바 스터디 노트 [1] 자바 개요
자바 소개 :
히스토리
1995년도 Sun Microsystems(현재는 Oracle)에서 발표한 프로그래밍 언어.
1991년도 Oak란 이름의 언어에서부터 시작함.
자바 언어가 발표된 1995년~년도에는 윈도우 프로그램 개발이 주류였기 때문에, C++에 비해 자바는 열세였음. 메모리 및 CPU를 지나치게 많이 사용했기 때문. 하지만 1999년도 부터 인터넷이 활성화되고 Web Application 구축용 언어로 자바가 급부상 됨. 많은 기업체 및 공공기관의 다양한 서버 운영체제에서 단 한번의 작성으로 모든 곳에서 실행 가능한 언어는 자바 뿐.
WORA. Write Once Run Anywhere.
자바 특징:
- 플랫폼 독립적. 이식성이 높음. 한 번 컴파일 해놓으면, 윈도우/맥/리눅스 등등 다 사용 가능
※ C/C++는 그러지 못하고 재 컴파일이 필요함. - 객체지향언어(Object Oriented Language). C 와 같은 절차지향언어(Structed Procedural Programming Language)가 가진 단점을 보완: SW 생산성향상, 실세계에 대한 쉬운 모델링 가능.
예전에야 수학/통계 계산이 처리과정 및 계산 절차가 중요했지만 (예: 플로우차트), 지금처럼 실세계 모델링을 할 때엔, 절차지향언어로만 묘사하는 것이 어려움. 물체들간의 상호작용을 표현하기 위해서는 객체중심언어가 필요함. 특히 게임의 경우 하나의 흐름대로만 진행되지 않기 때문. 인물/사물/무기/배경등이 서로 교류해야함. - 함수적 스타일 코딩/ 람다식 지원. 그래서 대용량 데이터 병렬 처리 이벤트 지향 프로그래밍에 적합
- 메모리 자동 관리: C++는 메모리에 생성된 객체를 제거하기 위해 개발자가 코드를 따로 작성해야하고, 이 걸 안해주면 프로그램은 불완전해지고 기계가 다운되기도 함. 하지만 자바는 개발자가 직접 메모리에 접근할 수 없도록 설계되었고, 자바가 알아서 객체가 생성될 때 메모리 영역을 할당하고, 사용이 완료되면 객체를 제거함.
- 동적 로딩 지원. 자바 프로그램이 실행 될 때, 작성한 모든 객체가 실행되는 것이 아니라, 필요할 때마다 클래스를 동적으로 로딩하여 객체를 생성. 개발 완료 후 유지보수가 발생하더라도, 문제 클래스만 수정하면 되서, 작업이 빠름.
- 쉬운 멀티스레드 구현. 자바는 스레드 생성 및 제어와 관련된 라이브러리 API 제공
- 다양한 애플리케이션 개발 가능. JAVA EE, JAVA ME 등 사용
- 기타 등등 자바의 언어는 캡슐화, 패키지 등을 지원
- 막강한 오픈 소스 라이브러리
자바와 오픈 소스
2006년 11월 선마이크로시스템스(현재 오라클)는 대부분의 자바 소스를 GPL(General Public Liscence)로 오픈하여 누구나 소스를 열람 참조할 수 있게 하였음. 단, GPL을 이용하여 만든 SW는 GPL 규칙에 의해 다시 오픈소스로 공개해야함.
#장점: 공개 코드를 참조함으로서 개발시간 및 비용 단축. 공개 SW를 많은 인원이 참여 개량함으로 우수 SW 개발 가능.
#단점: 무단으로 상용화할 경우 저작권 침해 발생. 다량한 개량버전의 sw로 인한 호환성 문제 발생 가능.
자바와 응용 프로그램 종류:
자바 언어로 개발되는 데스크톱 프로그램에는 어떤 것들이 있을까?
애플렛 Applet
웹페이지에 내장되어 실행되는 자바 응용 프로그램. 애플릿은 단독으로 실행되지는 않고, 익스플로러와 같은 웹 브라우저에 의해 구동되고 실행이 제어된다. 애플릿은 웹 서버에서 사용자 컴퓨터에 다운로드되어 사용자 컴퓨터에 설치된 웹브라우저에 의해 실행된다. 웹 브라우저가 애플릿을 실행하기 위해서는 자바 가상 기계를 가지고 있어야 하는데, 데스크톱 응용 프로그램은 내 컴퓨터에 설치되어 있어야 실행할 수 있는 반면, 애플릿은 어디서든지 웹 서버에 접속하여 실행할 수 있다는 장점이 있다. 애플릿은 서버에서 다운로드 되어 사용자 컴퓨터에서 실행되므로 보안의 이유로 접근할 수 있는 자원(리소스)에 제약이 있음.
서블렛 Servlet
자바 서블릿은 애플릿과 반대로 서버에서 시행되는 자바 프로그램임. 서브-클라이언트 모델로 구성되는 시스템에서 서버의 역할을 하며, 웹브라우저 상에서 실행되는 애플릿이나 자바스크립트 코드등과 통신함. 애플릿은 웹 사용자에게 GUI 환경을 제고하는 간단한 기능을 구현하는 반면, 서블릿은 JAVA EE( 자바 기업용 배포판)의 일부분으로서 웹 서버에 연동되는 DB나 다른 서버와 연동하여 쇼핑몰이나 온라인 뱅킹등의 대규모 복잡한 응용 프로그램을 구현하는데 쓰임. 자바 서블리슨 사용자 인터페이스를 필요로 하지 않으며, 웹 서버에 의해 실행이 제어됨.
모바일 Mobile:
자바는 설계 당시부터 플랫폼 독립적이고 메모리 사용량이 적으며 통신 환경을 지원하도록 개발됨. 그러므로 다양한 하드웨어, 소프트웨어 플랫폼을 가지는 모바일 기기에 적합 JAVA ME(자바 모바일 배포판), Android 등등
※Android: 검색엔진으로 유명한 구글의 주도로 여러 모바일 회사가 모여 구성한 OHA(Open Handset Alliance)에서 개발한 무료 모바일 플랫폼.
자바로 프로그램 실행 하는 과정
클래스 정의로 시작하며 클래스 내에서 모든 변수나 메소드를 정의. 실행은 main() 메소드부터 시작
자바 소스 파일 작성(.java) → 컴파일(.javac.exe) → 바이트 코드 파일(.class) → JVM 구동 (java.exe) → 기계어/프로그램
#클래스 블록과 메소드 블록
자바 실행 프로그램은 반드시 클래스 블록과 메소드 블록으로 구성되어야 함.
클래스 블록은 필드 또는 메소드를 포함하는 블록. 메소드 블록은 단독으로 구성될 수 없고 클래스 블록 내부 위치
※ 클래스 이름은 개발자 마음이나, 소스 파일 명과 대소문자까지 완벽히 일치해야함.
#메소드 Method
어떤 일을 처리하는 실행문들을 모아놓은 것.
※ 메소드 이름은 개발자 마음이나, 메인 메소드 만큼은 필수로 존재해야 한다. JVM이 main 메소드부터 찾아서 실행시키기 때문이다. 그래서 main 메소드는 entry point라고 부른다.
#바이트 코드 Byte Code
컴퓨터가 아닌 JVM에서 시행되는 기계어(바이너리코드). 컴퓨터상의 CPU에서 직접 실행되지 않고, 대신 JVM이 인터프리터 방식으로 해석하여 해당 플랫폼에서 실행시킴. 그래서 플랫폼 독립적이다.
#JVM (stands for JAVA Virtual Machine)
실 운영체제를 대신해 자바 프로그램을 실행하는 가상 운영체제 역할. 소스 코드를 컴파일한 바이트 코드 파일은 완전한 기계어가 아닌 중간단계의이기 때문에 (완벽한 기계어가 아님), 이것을 해석하고 실행할 수 있는 가상의 운영체제가 필요. 자바프로그램을 중계하는 JVM을 두어 자바 프로그램이 맥/윈도우/리눅스 등 여러 운영체제에서 동일한 실행 결과가 나오도록 함. 자바는 그래서 C/C++랑 달리 운영체제 독립적이라고 함. *WORA: Write Once Run Anywhere
기타 자바 필수 개념 용어:
JRE & JDK
#JRE (stands for JAVA Runtime Environment)
JVM + 표준 클래스 라이브러리. 자바를 실행만 하려면 JRE만 있어도 됨. JRE에는 컴파일러가 없음 주의
JRE 내부 bin 디렉토리에는 자바 클래스 파일을 해석하고 실행하는 도구가 있음. (읽고 실행만 한다..)
#JDK (stands for Java Development Kit)
JRE + 개발 필요 도구. 자바 소스를 작성/수정하고 컴파일하고 실행할 때 필요.
JDK 내부 bin 디렉토리에 컴파일러인 javac.exe와 JVM 구동 명령어인 java.exe가 있음.
#JDK 내부에 있는 것들.
- bin: 자바 개발/실행에 필요한 도구 및 유틸리티
- db: 자바로 db 응용프로그램을 개발하는데 필요한 도구
- demo: 자바 프로그래밍 데모 예제와 소스코드
- include: 네이티브 코드 프로그래밍에 필요한 헤더 파일
- jre: 자바 런타임환경, JVM, 클래스 라이브러리 등 실행 필요 파일
- lib: JDK 기본 라이브러리 외 추가 클래스 라이브러리 & 개발 도구 필요 파일
- sample: 자바 프로그램 샘플 소스 코드
- src: 자바 API 클래스들에 대한 자바 소스
#JDK bin 내부에 있는 것들:
- javac : 자바소스를 바이트코드로 컴파일해줌
- java: JRE bin에도 있는데, 자바 응용 프로그램 실행기
- javadoc: 자바 소스 프로그램으로부터 HTML형식의 API Document 생성
- jar : 자바 클래스 파일을 압축한 자바 아카이브 파일을 생성하고 관리하는 유틸리티
- jdb: 자바 응용 프로그램 실행 중 오류를 찾는데 사용하는 디버거
- javap: 클래스 파일에 담긴 바이트 코드를 자바 소스와 함께 보여주는 diassembler
- appletviewer : 웹 브라우저 없이 에플릿 응용 프로그램을 실행하고 디버깅하는 유틸리티
#패키지
서로 관련된 클래스들을 모아놓은 그룹.
#자바 API:
오라클 회사에서 제공하는 주용한 기능들을 미리 구현한 클래스 라이브러리로 묶어놓은 패키지. print같이 빈번하게 이용하는 것들.
자바 IDE
#이클립스: 자바 전용 IDE. IBM에 의해 자바로 만들어진 오픈 소스 소프트웨어.
이클립스에서 자바 프로그램을 작성 과정 : project 생성 → class 생성 → 소스 코드 작성 → 컴파일/실행
코드 실행 단축키는 컨트롤+F11
#인텔리제이:
자바 파일
#jar파일: 다수의 클래스 파일로 자바 응용 프로그램이 구성된 경우에 jar파일로 압축하여 배포/실행 가능