목차
01 자바 소개와 개발도구 설치
1.1 자바의 역사
- 2가지의 개발 도구 : 하나는 JDK의 명령어 버전, 또 하나는 이클립스
주로 이클립스를 사용하여 개발 하겠지만, JDK 명령어들도 한번은 사용해 보아야한다. - 자바가 가장 많이 사용되는 프로그래밍 언어 중 하나인 이유는 단순히 좋은 프로그래밍 언어라서 그런것만은 아님
- 자바는 단순한 언어가 아니라 방대한 라이브러리와 다양한 실행 환경을 가지고 있는 거대한 플랫폼
- 한 번만 작성해놓으면 코드를 변경하지 않아도 다양한 종류의 컴퓨터에서 실행이 가능
- 안드로이드 플랫폼에서 애플리케이션을 개발하는 기본 언어
- 자바는 강력한 객체 지향 언어이지만 비교적 배우기 쉬움
💡 자바와 자바스크립트
자바는 범용 개발 언어이지만, 자바스크립트는 웹 페이지에서 동적인 컨텐츠를 만들기 위하여 사용하는 스크립트 언어
자바의 역사
- 1991년 제임스 고슬링, 썬 마이크로시스템즈사 Green 프로젝트팀
- 가정용 전자 제품에 사용할 수 있는 컴퓨터 언어 설계 원함
- 가정용은 메모리가 부족했기에 언어는 간결해야 했음
- 또 가정용은 많은 종류의 CPU로 만들어지기에 특정한 CPU에 의존하면 안됨 -> CPU-중립적
- 따라서 연구팀은 일종의 가상 컴퓨터인 가상 기계 개념을 도입
- 처음엔 C++로 시도, 복잡도로 인해 실패
- 이후 고슬링이 팀 프로젝트를 위해 더 나은 언어를 직접 만듦 : 자바
- 1993년, 그래픽 기반의 월드 와이드 맵이 발표
- 웹 기반의 응용 프로그램에는 자바와 같은 CPU-중립적인 언어가 이상적
- 자바와 월드 와이드 웹 연동 → 자바 애플릿
1.2 자바의 특징
컴퓨터 구조에 중립적이다.
- 자바에서 컴파일된 실행 코드가 플랫폼 독립적이다
- 자바 컴파일러는 자바 언어로 작성된 프로그램은 바이트 코드라는 이진 파일로 변환
- 바이트 코드를 실행하기 위해서 자바 가상 기계(JVM) 필요. 이것이 한 줄씩 읽어서 해석 후 실행
단순하지만 강력하다.
- C++에서 여러 복잡한 기능을 삭제
- 풍부한 라이브러리를 무료로 제공
객체 지향적이다.
- 객체 지향 : 객체별로 코드를 작성하고 객체들을 조합하여 전체 프로그램을 완성하는 프로그램 설계 방법론
- 코드 재사용 용이
분산처리를 지원한다.
- 네트워크상에서 동작되는 것을 기본으로 설계된 언어로
TCP/IP, HTTP, FTP 같은 프로토콜을 처리할 수 있는 라이브러리를 가지고 있다.
안전하다.
- 자바는 처음부터 다음과 같은 작업들이 불가능하게끔 설계
- 실행 스택을 벗어난 접근
- 자신의 프로세스 밖의 메모리 공간 접근
- 파일을 허락없이 읽거나 쓰는 것
멀티스레딩을 지원한다.
- 멀티스레딩 : 여러 가지 작업을 동시에 실행
동적이다.
- 동적으로 변화하는 환경에 적응하도록 설계됨
1.3 자바의 용도
자바 데스크탑 애플리케이션
- 독립적으로 실행될 수 있는 응용 프로그램.
- JRE가 설치된 환경에서 실행 가능.
자바 애플릿
- 애플릿 : applicaiton + let(작다)
- 단독으로 실행되지 않고 웹 브라우저 안에서 실행되는 작은 자바 프로그램
- HTML의 <APPLET> 태그를 사용
- 애니메이션이나 비디오 재생
- 하지만 보안 단점을 이용한 악성 코드의 증가 → 최근에는 실행 차단
자바 서블릿
- 서블릿 : 웹 서버에서 동작하는 서버 모듈. 클라이언트의 요구를 처리, HTML 문서 형태로 다시 전송
JSP
- HTML안에 자바 코드를 넣으면 웹 페이지를 사용자와 상호작용하도록 만들 수 있다.
- JSP는 서버에서 (서블릿으로 변환되어) 실행되고 결과는 HTML로 사용자에게 보냄
안드로이드 애플리케이션
- 안드로이드 운영체제는 리눅스 사용. 나머지 부분은 모두 자바
- JVM이 아닌 자체적인 가상 머신 구현 (스마트폰이 처리 속도와 메모리 측면에서 뒤쳐짐)
- 달빅 가상 머신
- 바이트 코드는 달빅 실행 파일(.dex) 형식으로 변환해야 실행 가능
- 최근에는 안드로이드 개발 언어로 코틀린 많이 사용
1.4 가상 기계
자바와 다른 언어의 실행 과정 비교
- 자바는 프로그램을 완성하고 나면 하드웨어나 운영체제의 종류에 관계없이 동일한 모습으로 실행할 수 있다
- WORE : Write Once Run Everywhere
- C언어나 C++ 언어의 경우 타켓 컴퓨터의 cpu나 운영체제에 맞춘 코드를 생성해 다른 cpu나 운영체제에서 실행하려면 다시 컴파일 해야한다.
자바 프로그램의 실행 과정
- 다른 프로그래밍 언어의 경우, 컴파일러는 소스 파일을 처리하여 기계어를 바로 생성
- 자바 컴파일러는 바이트 코드를 생성해 JVM에 의해 한줄씩 해석되며 실행됨
가상 기계
- 가상 기계 : 가상적인 컴퓨터를 만드는 소프트웨어
- JDK 설치시 java.exe라는 프로그램 설치 이것이 가상 기계로 만들어주는 소프트웨어
- 자바 프로그램은 실제 기계의 명령어로만 구성된 네이티브 코드보다 속도는 느리다.
- 최근에는 컴파일러와 가상 기계 기술의 진보로 인하여 자바 코드의 속도가 네이티브 코드에 근접하는 정도로 빨라짐
JVM을 사용하는 다른 언어들
- 최근에 JVM 언어라고 불리는 언어들이 등장
- JVM 언어를 컴파일하면 JVM이 실행할 수 있는 유효한 클래스 파일 출력
- 클래스 파일에는 자바 바이트 코드와 심볼 테이블, 기타 보조 정보 포함
- JRuby와 Jython은 각각 Ruby와 Python을 JVM으로 이식한 것
- 자바 바이트 코드로 컴파일하기 위해 처음부터 생성된 언어 : Clojure, Apache Groovy, Scala, Kotlin
- JVM 언어들은 서로 호환가능하다.
자바 플랫폼
플랫폼 : 프로그램이 실행되는 하드웨어와 소프트웨어 환경
자바 플랫폼의 두 가지 요소
● 자바 가상 기계(JVM)
● 자바 응용 프로그래밍 인터페이스(API)
API : 네트워킹, 보안, XML 생성, 데이터베이스 접근에 필요한 기능들이 포함
1.5 자바의 종류와 버전
Java SE(Standard Edition)
- 자바 언어의 핵심 기능 제공
- Java SE API : 자바 언어의 기본적인 타입과 객체에서부터 네트워킹, 보안, 데이터베이스 접근, 그래픽 사용자 인터페이스, XML 파싱에 사용되는 고수준의 클래스까지를 모두 정의
- Java SE 플랫폼 : 자바 가상 기계, 컴파일러와 같은 개발 도구, 자바 웹 스타트와 같은 배포 기술 등을 포함
Java EE(Enterprise Edition)
- Java SE 플랫폼 상에 구축
- 기업용 애플리케이션을 개발하는 데 필요한 여러 가지 도구 및 라이브러리들을 모아 놓은 것.
- 응용 서버, 웹 서버, J2EE API, 엔터프라이즈 자바 빈즈 지원, 자바 서블릿 API와 JSP등을 포함
- 엔터프라이즈급의 서버 지향 구조(SOA)나 차세대 웹 애플리케이션을 구현하는 업계 표준이 되어가고 있음
Java ME(Micro Edition)
- 핸드폰, PDA, TV 셋톱박스, 프린터와 같은 모바일 기기나 다른 임베디드 장치들에서 실행되는 애플리케이션을 위한 강인하고 유연한 환경을 제공
- Java SE의 부분 집합에, 모바일 장치를 위한 특수한 클래스 라이브러리가 추가된 것
Java FX
- 애플리케이션 개발자들이 더 쉽게 리치-인터넷-애플리케이션(RIA)을 생성하고 배포하기 위한 자바 클라이언트 플랫폼
- RIA은 서로 인터넷상의 다양한 플랫폼에서도 동일한 외관으로 실행
- 고성능의 하드웨어 가속 그래픽과 미디어 엔진 API를 제공하여 엔터프라이즈 클라이언트 개발을 쉽게 함
RIA
RIA는 웹 브라우저나 웹 플러그인, 샌드박스, 자바스크립트, 가상 기계 등의 기술을 통하여 사용자에게 제공되는 웹기반의 애플리케이션으로 단조로운 웹 페이지를 화려하게 꾸미는데 이용된다.
어도비 플래시, Java FX, 마이크로소프트의 실버라이트가 가장 많이 사용되는 플랫폼
최근에는 모든 웹 브라우저가 외부 플러그인을 제한하는 추세여서 중요도가 줄어들고 있음
자바의 버전
- 자바는 지속적으로 업그레이드되고 있음
- 자바 역사상 J2SE 5.0과 Java 8이 가장 중요한 버전이라고 일컬어 짐
- 오라클사는 2019년 부터 3월과 9월에 새로운 버전 발표
- 3년에 한 번씩 LTS(Long Term Support) 버전 발표 (오랫동안 지원하겠다는 의미)
- Java 1.0
- 1996년
- 211개의 클래스
- 속도는 느림
- 애플릿이 가장 주목받음
- J2SE 5.0
- 2004년
- 제네릭 클래스
- "for each" 반복 루프
- 오토 박싱
- 열거형
- Java SE 8
- 2014년
- 함수형 프로그래밍 지원
- 람다 표현식
- 새로운 Data & Time API
- Java SE 15
- 2020년
- Sealed 클래스
- 은닉 클래스
- 텍스트 블록
- 레코드 도입
Java SE 8 : 함수형 프로그래밍 지원
- 중요한 특징
- 함수형 프로그래밍의 지원
- 람다식
- 작은 가상기계
- 병렬 배열 정렬
- 컬렉션을 위한 대용량 데이터 처리
- Base64 인코딩과 디코딩을 위한 표준 API
- 새로운 날짜, 시간 API(Date & Time API)
- 강화된 패스워드 기반 암호화(Password-Based-Encryption (PBE))
- 함수형 프로그래밍 : 부작용이 없는 함수들을 연결하여서 작업을 수행하는 방식
- 람다식은 그동안 소외되었던 함수를 객체로 취급
Java SE 9 : 모듈화 프로그래밍
- 모듈화 : 직소 프로젝트의 산물
- 모듈화의 목적 : 자바 응용 프로그램을 만들 때, 필요한 모듈만을 묶어서 사용하기 위함
1.6 JDK 설치
JDK 와 JRE
- JRE : 자바 프로그램을 실행하기 위한 라이브러리, JVM, 기타 컴포넌트들을 제공
자바 프로그램을 실행만하는 일반인들을 위한 환경 - JDK : JRE에 자바 프로그램을 개발하는 데 필요한 컴파일러, 디버거와 같은 도구들을 추가한 것
Oracle JDK 와 Open JDK
- Oracle JDK : 상업용 코드를 판매
- Open JDK : 공개 소스 기반
JDK 설치
JDK의 폴더
- bin : 컴파일러, 디버거 등의 도구가 들어 있음
- conf : 구성 파일이 저장됨. 개발자가 편집 가능
- include : 네이티브 코드 프로그래밍을 지원하는 헤더 파일들. 자바와 C를 동시 사용하는 프로그램 개발에 쓰임
- jmods : 컴파일된 모듈이 정의되어 있음
- legal : 저작권, 라이선스 파일이 저장됨
- lib : 개발 도구들이 필요로 하는 추가적인 클래스 라이브러리와 지원 파일들
lib 폴더 안의 src.zip 파일에 자바 핵심 API를 이루는 클래스 라이브러리 소스가 있음
JDK가 설치된 폴더를 외부 프로그램에 알려줄 때는 JAVA_HOME이라는 환경 변수를 사용
1.7 명령어 버전 JDK 사용하기
- JDK는 명령어 프롬프트에서 직접 사용이 가능한 몇가지의 명령어 도구들을 가지고 있음
- javac(자바 컴파일러), java(자바 프로그램을 실행시키는데 사용되는 JVM을 구현)
- 소스 파일 작성(메모장) → 소스 파일 컴파일(javac) → 프로그램 실행(java)
경로 설정하기
- 시스템 환경 변수에서 Path 변수의 값의 첫 부분에 JDK의 bin 폴더를 추가 bin;
소스 파일 작성
컴파일
- 동일한 디렉터리에 class 파일 생성됨
실행
Hello World 프로그램의 간단한 설명
- public class Hello {
클래스 Hello가 시작되는 문장. 클래스는 자바 프로그램의 빌딩 블록 - public static void main(String[] args) {
메소드 main()이 시작되는 문장. 메소드는 특정한 기능을 수행하는 코드들의 집합 - Systme.out.println("Hello World!");
Hello World! 를 콘솔창에 출력하는 문장. System.out은 객체. 객체는 여러 메소드를 가지고 있음
명령어 도구들의 간단한 설명
- appletviewer : 웹 브라우저 없이 애플릿을 실행하고 디버그하는 도구
- apt : 어노테이션 처리 도구
- extcheck : jar 파일을 체크하는 도구
- jar : 자바 압축 파일을 생성하고 관리하는 도구
- java : 가상 기계 프로그램
- javac : 자바 컴파일러
- javadoc : 도큐먼트 생성기, 자바 소스 파일 안에 /** */로 주석을 만들면 이 주석을 추출하여 문서로 만들어줌
- javah : C 언어로 된 네이티브 메소드를 작성할 때 사용되는 C 헤더 파일과 스터브 생성기
- javap : 클래스 파일 디어셈블러
- jdb : 자바 디버거
통합 개발 환경
소스 에디터, 컴파일러, 디버거가 결합되어 있음. 이클립스, 넷빈, IntelliJ IDEA 등이 있음
중요한 것은 통합 개발 환경도 내부적으로는 명령어 도구들을 이용한다는 것
1.8 이클립스 소개와 설치
이클립스 vs IntelliJ IDEA
- 이클립스를 많이 사용함
- 안드로이드 개발 환경은 IntelliJ IDEA
이클립스란?
- 비영리단체인 이클립스 제단에서 배포
- 자체 GUI 라이브러리 사용
이클립스의 설치
1.9 이클립스로 첫 번째 프로그램 작성
이클립스 실행
- 실행시 작업하고자 하는 폴더 지정
이후 https://kyeong-hoon.tistory.com/6 참고
1.10 컴파일 오류
- 이클립스는 오류가 발생했을 경우 처리 방법을 제시하고 방법 중 하나를 선택할 수 있도록 한다.
1.11 이클립스로 프로젝트 내보내기 & 읽기
프로젝트를 외부로 내보낼 때
![]() |
![]() |
![]() |
외부 프로젝트를 읽을 때
![]() |
![]() |
![]() |
1.12 자바 참고 문서
Java API 문서
자바 튜토리얼
- https://docs.oracle.com/javase/tutorial/
Summary
- 자바는 범용 프로그래밍 언어로서 객체 지향 언어이다.
- 자바의 가장 큰 특징은 가상 기계라는 개념을 사용하여 어떤 컴퓨터에서도 수정없이 실행이 가능하다는 점이다.
- 자바 소스파일을 컴파일하면 바이트 코드 생성. CPU-중립적이다.
- 자바를 개발하는 도구는 JDK. 오픈 소스로 배포된다.
- 자바는 데스크톱 응용 프로그램을 작성할 수 있는 Java SE 버전, 기업용 응용을 위한 Java EE 버전, 모바일 장치를 위한 Java ME로 나누어진다.
- 자바의 통합 개발 도구에는 이클립스와 IntelliJ IDEA 등이 있다.
- 자바 프로그램은 클래스의 선언으로 시작되며 main() 메소드부터 실행된다. 자바에서는 클래스 안에 모든 변수와 함수를 선언하여야 한다.
- 자바는 데스크탑이나 서버 쪽 응용 프로그램, 스마트폰 응용 프로그램을 작성할 수 있다.
- JIT(Just In Time) 컴파일러는 실행 속도를 개선하기 위하여 중요한 부분의 코드를 해당 CPU의 기계어로 컴파일하는 기법이다.
'Java > 교재 정리' 카테고리의 다른 글
06 상속 (1) | 2024.04.23 |
---|---|
05 클래스와 객체 II (0) | 2024.04.18 |
04 클래스와 객체 I (0) | 2024.04.15 |
03 조건문, 반복문, 배열 (0) | 2024.04.14 |
02 자바 프로그래밍 기초 (0) | 2024.04.12 |