* 공부 정리일자 (2022년 8~12월)
- 책 : 명품 자바 에센셜
- 개인적으로 공부 및 복습하면서 정리한 내용입니다. (사진 제외)
* 목차
1장. 자바의 시작 (책 18p)
1.1 컴퓨터와 프로그래밍 (책 18p)
1.2 자바의 출현과 WORA (책 21p)
1.3 개발 도구와 자바 플랫폼 (책 26p)
1.4 자바 프로그램 개발 과정 (책 31p)
1.5 이클립스 이용한 자바 프로그램 개발 (책 33p)
1.6 자바 응용프로그램의 종류 (책 39p)
1.7 자바의 특징 (책 41p)
1. 복습 (중요 키워드 위주)
복습 파트 : 1강. 자바의 시작
1) 1장 – 자바의 시작 (책 18p)
1.1) 컴퓨터와 프로그래밍
(1) 컴퓨터와 소프트웨어
- 컴퓨터와 프로그래머, 소프트웨어의 관계는 만능 요리 기계, 요리설계사와 요리순서와 같다.
(2) 프로그래밍 언어
* 프로그램 작성 언어
* 기계어(machine language)
- 0, 1의 이진수로 구성된 언어
- 컴퓨터의 CPU는 기계어만 이해하고 처리가능
* 어셈블리어
- 기계어 명령을 ADD, SUB, MOVE 등과 같은 표현하기 쉬운 상징적인 단어인 니모닉 기호(mnemonic symbol)로 일대일 대응시킨 언어
* 고급언어
- 사람이 이해하기 쉽고, 복잡한 작업, 자료 구조,알고리즘을 표현하기 위해 고안된 언어
- Pascal, Basic, C/C++, Java, C#
- 절차 지향 언어와 객체 지향 언어로 나눌 수 있음
(3) 프로그래밍 언어의 진화
(4) 프로그래밍과 컴파일
* 소스 프로그래밍 언어로 작성된 텍스트 파일
* 컴파일 : 소스 파일을 컴퓨터가 이해할 수 있는 기계어로 만드는 과정
- 자바 : .java -> .class
- C : .c -> .obj -> .exe
- C++ : .cpp -> .obj -> .exe
1.2) 자바의 출현과 WORA (책 21p)
(1) 자바의 태동
* 1991년 그린 프로젝트(Green Project)
- 선마이크로시스템즈의 제임스 고슬링(James Gosling)에 의해 시작
- 가전 제품에 들어갈 소프트웨어를 위해 개발
- 1995년에 자바 발표
* 목적
- 플랫폼 호환성 문제 해결
-- 기존 언어로 작성된 프로그램은
PC, 유닉스, 메인 프레임 등 플랫폼 간에 호환성 없음
-- 소스를 다시 컴파일하거나 프로그램을 재 작성해야 하는 단점
- 플랫폼 독립적인 언어 개발
-- 모든 플랫폼에서 호환성을 갖는 프로그래밍 언어 필요
-- 네트워크, 특히 웹에 최적화된 프로그래밍 언어의 필요성 대두
- 메모리 사용량이 적고 다양한 플랫폼을 가지는 가전 제품에 적용
-- 가전 제품 : 작은 량의 메모리를 가지는 제어 장치
-- 내장형 시스템 요구 충족
* 초기 이름 : 오크(OAK)
- 인터넷과 웹의 엄청난 발전에 힘입어 퍼지게 됨
- 웹 브라우저 Netscape에서 실행
* 2009년에 선마이크로시스템즈를 오라클이 인수
(2) 기존 언어의 플랫폼 종속성
(3) 자바의 플랫폼 독립성, WORA
* WORA (Write Once Run Anywhere)
- 한번 작성된 코드는
모든 플랫폼에서 바로 실행되는 자바의 특징
- C/C++ 등 기존 언어가 가진 플랫폼 종속성 극복
-- OS, H/W에 상관없이 자바 프로그램이 동일하게 실행
- 네트워크에 연결된 어느 클라이언트에서나 실행
-- 웹 브라우저, 분산 환경 지원
* WORA를 가능하게 하는 자바의 특징
- 바이트 코드(byte code)
-- 자바 소스를 컴파일한 목적 코드
-- CPU에 종속적이지 않은 중립적인 코드
-- JVM 에 의해 해석되고 실행됨
- JVM (Java Virtual Machine)
-- 자바 바이트 코드를 실행하는 자바 가상 기계(소프트웨어)
(4) 자바 가상 기계와 자바 실행 환경
* 바이트 코드
- 자바 가상 기계에서 실행 가능한 바이너리 코드
-- 바이트 코드는 컴퓨터 CPU에 의해 직접 실행되지 않음
-- 자바 가상 기계가 작동 중인 플랫폼에서 실행
-- 자바 가상 기계가 인터프리터 방식으로 바이트 코드 해석
- 클래스 파일(.class)에 저장
* 자바 가상 기계 (JVM : Java Virtual Machine)
- 각기 다른 플랫폼에 설치
- 동일한 자바 실행 환경 제공
- 자바 가상 기계 자체는 플랫폼에 종속적
-- 자바 가상 기계는 플랫폼마다 각각 작성됨
-- 예) 리눅스에서 작동하는 자바 가상 기계는 윈도우에서 작동하지 않음
- 자바 가상 기계 개발 및 공급
-- 자바 개발사인 오라클 외 IBM, MS 등 다양한 회사에서 제작 공급
* 자바의 실행
- 자바 가상 기계가 클래스 파일(.class)의 바이트 코드 실행
* 실행 환경 (JRE)
- 실행 환경 (JRE) = 자바 가상 기계(JVM) + 자바 플랫폼의 다양한 클래스 라이브러리(자바 API)
* 응용프로그램 실행
- main() 메소드를 가진 클래스의 main()에서 실행 시작
- 자바 가상 기계는, 필요할 때 클래스 파일 로딩, 적은 메모리로 실행 가능
1.3) 개발 도구와 자바 플랫폼 (책 26p)
(1) JDK와 JRE* JDK (Java Development Kit) - 개발자 측면
- 자바 응용 개발 환경. 개발에 필요한 도구 포함
-- 컴파일러, 컴파일된 자바 API 클래스들이 들어 있는 모듈 파일들, 샘플 등 포함
* JRE (Java Runtime Environment) - 사용자 측면
- 자바 실행 환경. JVM 포함
- 컴파일된 자바 API 들이 들어 있는 모듈 파일
- 개발자가 아닌 경우 JRE만 따로 다운 가능
(4) 자바의 배포판 종류
* 오라클은 개발 환경에 따라 다양한 자바 배포판 제공
* 1. Java SE (자바 표준 배포판 (Standard Edition))
- 데스크탑과 서버 응용 개발 플랫폼
* 2. Java ME (자바 마이크로 배포판)
- 휴대 전화나 PDA, 셋톱박스 등 제한된 리소스를 갖는 하드웨어에서 응용 개발을 위한 플랫폼
- 가장 작은 메모리 풋프린트
- Java SE의 서브셋 + 임베디드 및 가전 제품을 위한 API 정의
* 3. Java EE (자바 기업용 배포판)
- 자바를 이용한 다중 사용자, 기업용 응용 개발을 위한 플랫폼
- Java SE + 인터넷 기반의 서버사이드 컴퓨팅 관련 API 추가
(5) Java 9부터 시작된 모듈 프로그래밍
* 모듈화 (modularity)
- Java 9에서 정의된 새로운 기능, 2017년 9월 21일 출시
* 모듈
- 자바 패키지들과 이미지, XML 파일 등의 자원들을 묶은 단위
* 모듈 프로그래밍
- 자바 응용프로그램을 마치 직소 퍼즐(jigsaw)을 연결하듯이 필요한 모듈을 연결하는 방식으로 작성
* 자바 플랫폼의 모듈화
- 실행 시간에 사용되는 자바 API의 모든 클래스들을 모듈들로 분할
- 모듈화의 목적
-- 세밀한 모듈화, 자바 응용프로그램이 실행되는데 필요없는 모듈 배제
-- 작은 크기의 실행 환경 구성
-- 하드웨어가 열악한 소형 IoT 장치 지원
(6) 자바에서 제공하는 전체 모듈 리스트 (Java SE)
(7) 자바 API
* 자바 API (Application Programming Interface)란?
- JDK에 포함된 클래스 라이브러리
-- 주요한 기능들을 미리 구현한 클래스 라이브러리의 집합
* 개발자는 API를 이용하여 쉽고 빠르게 자바 프로그램 개발
- API에서 정의한 규격에 따라 클래스 사용
* 자바 패키지(package)
- 서로 관련된 클래스들을 분류하여 묶어 놓은 것
1.7) 자바의 특징 (책 41p)
(1) 자바의 특성
* 플랫폼 독립성
- 하드웨어, 운영체제에 종속되지 않는 바이트 코드로
플랫폼 독립성
* 객체지향
- 캡슐화, 상속, 다형성 지원
* 클래스로 캡슐화
- 자바의 모든 변수나 함수는 클래스 내에 선언
- 클래스 안에서 클래스(내부 클래스) 작성 가능
* 소스(.java)와 클래스(.class) 파일
- 하나의 소스 파일에 여러 클래스를 작성 가능
-- public 클래스는 하나만 가능
- 소스 파일의 이름과
public으로 선언된 클래스 이름은 같아야 함
- 클래스 파일에는 하나의 클래스만 존재
-- 다수의 클래스를 가진 자바 소스를 컴파일하면
클래스마다 별도 클래스 파일 생성
* 소스 파일과 클래스, 클래스 파일의 관계
(2) 자바의 특징
* 실행 코드 배포
- 구성
-- 한 개의 class 파일 또는 다수의 class 파일로 구성
-- 여러 폴더에 걸쳐 다수의 클래스 파일로 구성된 경우 : jar 압축 파일로 배포
- 자바 응용프로그램의 실행은 main() 메소드에서 시작
-- 하나의 클래스 파일에 두 개 이상의 main() 메소드가 있을 수 없음
--- 각 클래스 파일이 main() 메소드를 포함하는 것은 상관없음
* 패키지
- 서로 관련 있는 여러 클래스를 패키지로 묶어 관리
- 패키지는 폴더 개념
-- 예) java.lang.System은 java\lang 디렉터리의 System.class 파일
* 멀티스레드
- 여러 스레드의 동시 수행 환경 지원
-- 자바는 운영체제의 도움 없이 자체적으로 멀티스레드 지원
-- C/C++ 프로그램은 멀티스레드를 위해 운영체제 API를 호출
* 가비지 컬렉션
- 자바 언어는 메모리 할당 기능은 있어도 메모리 반환 기능 없음
-- 사용하지 않는 메모리는 자바 가상 기계에 의해 자동 반환 – 가비지 컬렉션
* 실시간 응용프로그램에 부적합
- 실행 도중 예측할 수 없는 시점에 가비지 컬렉션 실행 때문
-- 응용프로그램의 일시적 중단 발생
* 자바 프로그램은 안전
- 타입 체크 엄격
- 물리적 주소를 사용하는 포인터 개념 없음
* 프로그램 작성 쉬움
- 포인터 개념이 없음
- 동적 메모리 반환 하지 않음
- 다양한 라이브러리 지원
* 실행 속도 개선을 위한 JIT 컴파일러 사용
- 자바는 바이트 코드를 인터프리터 방식으로 실행
-- 기계어가 실행되는 것보다 느림
- JIT 컴파일 기법으로 실행 속도 개선
-- JIT 컴파일 - 실행 중에 바이트 코드를 기계어 코드로 컴파일하여 기계어를 실행하는 기법
'프로그래밍 공부 > Java' 카테고리의 다른 글
[ Java 프로그래밍 ] 공부 정리 - 1장 본문 퀴즈 및 연습문제 (0) | 2023.04.30 |
---|---|
[ Java 프로그래밍 ] 공부 정리 - 4강. 클래스와 객체 (0) | 2023.04.30 |
[ Java 프로그래밍 ] 공부 정리 - 3강. 반복문과 배열 그리고 예외 처리 (0) | 2023.04.30 |
[ Java 프로그래밍 ] 공부 정리 - 2강. 자바 기본 프로그래밍 (0) | 2023.04.30 |
[ Java 프로그래밍 ] 공부 정리 - 목차. (0) | 2023.04.26 |