01 자바 소개와 개발도구 설치

목차

    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이 실행할 수 있는 유효한 클래스 파일 출력
    • 클래스 파일에는 자바 바이트 코드와 심볼 테이블, 기타 보조 정보 포함
    • JRubyJython은 각각 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 프로그램의 간단한 설명

    1. public class Hello {
      클래스 Hello가 시작되는 문장. 클래스는 자바 프로그램의 빌딩 블록
    2. public static void main(String[] args) {
      메소드 main()이 시작되는 문장. 메소드는 특정한 기능을 수행하는 코드들의 집합
    3. 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 목차로 돌아가기

    '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