Chap01. 자바 시작하기
1.1 프로그래밍 언어란?
- 컴퓨터가 이해할 수 있는 언어는 기계어.
- 0과 1로 이루어진 이진 코드이기 때문에 사람이 이해하기에는 매우 어렵다.
- 사람이 사용하는 언어는 컴퓨터 입장에서 보면 이해할 수 없는 문자 집합
- 사람과 컴퓨터가 대화하기 위해서는 다리 역할을 하는 프로그래밍 언어가 필요하다.
- 프로그래밍 언어는 고급언어와 저급언어로 구분.
- 고급 언어 : 컴퓨터와 대화할 수 있도록 만든 언어 중에서 사람이 쉽게 이해할 수 있는 언어.
- 컴퓨터가 바로 이해할 수 없기 때문에 컴파일 과정을 통해서 이진 기계어로 변환 후 컴퓨터가 사용.
- 저급 언어 : 기계어에 가까운 언어.
- 대표적으로 어셈블리어.
- 일반적으로 프로그래밍 언어라고 하면 고급언어를 말한다.
- C, C++, Java 등.
- 이 언어들로 작성된 내용을 소스라고 부르고 이 소스는 컴파일러라는 소프트웨어에 의해 기계어로 번역된 후 컴퓨터에서 실행할 수 있게 된다.
- 프로그램이란 컴퓨터에서 특정 목적을 수행하기 위해 프로그래밍 언어로 작성된 소스를 기계어로 번역한 것을 말한다.
- 0과 1로 이루어진 이진 코드이기 때문에 사람이 이해하기에는 매우 어렵다.
- 고급 언어 : 컴퓨터와 대화할 수 있도록 만든 언어 중에서 사람이 쉽게 이해할 수 있는 언어.
- 컴퓨터가 바로 이해할 수 없기 때문에 컴파일 과정을 통해서 이진 기계어로 변환 후 컴퓨터가 사용.
- 저급 언어 : 기계어에 가까운 언어.
- 대표적으로 어셈블리어.
- C, C++, Java 등.
1.2 자바란?
1.2.1 자바 소개
- 1995년도에 처음 썬 마이크로시스템즈에서 자바 언어 발표.
- 1991년에 썬의 엔지니어들에 의해서 고안된 오크라는 언어에서부터 시작.
- 오크는 처음에 가전제품에서 사용될 목적.
- 인터넷 등장과 함께 인터넷에서 실행되는 프로그래밍 언어로 사용되었고, 이름도 자바로 변경.
- 자바 언어를 발표한 1995년부터 1999년까지는 윈도우 프로그램 개발이 주류였기 때문에 C++언어에 비해 자바는 아주 열세였다.
- 메모리 및 CPU 를 지나치게 많이 사용하기 떄문에 윈도우 프로그래밍 언어로는 부적합하다는 문제점.
- 1999년도부터 인터넷이 활성화되면서 웹 애플리케이션 구축용 언어로 자바가 급부상.
- 단 한번의 작성으로 모든 곳에서 실행 가능한 언어는 자바뿐이었기 때문.
- 초기에는 가전 제품에 탑재할 프로그래밍 언어로 개발되었지만, 지금은 스마트폰을 비롯해서 각종 장비와 데스크톱에서 실행되는 애플리케이션, 그리고 금융, 공공, 대기업 등의 엔터프라이즈 기업환경에서 실행되는 서버 애플리케이션을 개발하는 중추적인 언어로 자리매김하고 있다.
- 오크는 처음에 가전제품에서 사용될 목적.
- 인터넷 등장과 함께 인터넷에서 실행되는 프로그래밍 언어로 사용되었고, 이름도 자바로 변경.
- 메모리 및 CPU 를 지나치게 많이 사용하기 떄문에 윈도우 프로그래밍 언어로는 부적합하다는 문제점.
- 단 한번의 작성으로 모든 곳에서 실행 가능한 언어는 자바뿐이었기 때문.
1.2.2 자바의 특징
이식성이 높은 언어이다.
- 이식성이란? 서로 다른 실행 환경을 가진 시스템 간에 프로그램을 옮겨 실행할 수 있는 것.
- 자바 언어로 개발된 프로그램은 소스파일을 다시 수정하지 않아도, 자바 실행환경(JRE : Java Runtime Environment)이 설치되어 있는 모든 운영체제에서 실행 가능.
객체 지향 언어이다.
- 객체 지향 프로그래밍(OOP: Object Oriented Programming) : 프로그램을 개발하는 기법으로 부품에 해당하는 객체들을 먼저 만들고, 이를 하나씩 조립 및 연결해서 전체 프로그램을 완성하는 기법.
- 이때 사용되는 언어를 객체 지향 언어라고 한다.
- 자바는 100% 객체 지향 언어.
- 아무리 작은 프로그램이라도 객체를 만들어 사용.
- 캡슐화, 상속, 다형성 기능을 완벽하게 지원.
- 이때 사용되는 언어를 객체 지향 언어라고 한다.
- 아무리 작은 프로그램이라도 객체를 만들어 사용.
- 캡슐화, 상속, 다형성 기능을 완벽하게 지원.
함수적 스타일 코딩을 지원한다.
- 자바는 객체 지향 프로그래밍이 소프트웨어 개발의 주요 패러다임이었던 1990년대에 디자인되었다.
- 최근들어 함수적 프로그래밍이 다시 부각되고 있다.
- 대용량 데이터의 병렬 처리 그리고 이벤트 지향 프로그래밍을 위해 적합하기 때문.
- 자바는 함수적 프로그래밍을 위해 람다식을 자바 8 부터 지원.
- 람다식을 사용하면 컬렉션의 요소를 필터링, 매핑, 집계 처리하는데 쉬워지고, 코드가 매우 간결해진다.
- 대용량 데이터의 병렬 처리 그리고 이벤트 지향 프로그래밍을 위해 적합하기 때문.
메모리를 자동으로 관리한다.
- 자바는 개발자가 직접 메모리에 접근할 수 없도록 설계되었다.
- 메모리는 자바가 직접 관리.
- 객체 생성 시 자동적으로 메모리 영역을 찾아서 할당하고, 사용이 완료되면 Garbage Collector를 실행시켜 자동적으로 사용하지 않는 객체를 제거시켜준다.
- 개발자는 메모리 관리의 수고스러움을 덜고, 핵심 기능 코드 작성에 집중할 수 있다.
- 메모리는 자바가 직접 관리.
- 객체 생성 시 자동적으로 메모리 영역을 찾아서 할당하고, 사용이 완료되면 Garbage Collector를 실행시켜 자동적으로 사용하지 않는 객체를 제거시켜준다.
다양한 애플리케이션을 개발할 수 있다.
- 윈도우, 리눅스, 유닉스, 맥 등 다양한 운영체제에서 실행되는 프로그램을 개발할 수 있다.
- 콘솔 프로그램, 윈도우 애플리케이션, 서버용 웹 애플리케이션, 모바일용 안드로이드 앱에 이르기까지 거의 모든 곳에서 실행되는 프로그램을 개발할 수 있다.
- 다양한 운영체제에서 사용할 수 있는 개발 도구와 API를 묶어 에디션 형태로 정의하고 있다.
Java SE(Standard Edition) - 기본 에디션
- Java SE는 자바 프로그램들이 공통적으로 사용하는 JVM을 비롯해서 자바 프로그램 개발에 필수적인 도구와 라이브러리 API를 정의한다.
- 클라/서버 프로그램에 상관없이 자바 프로그램을 개발하고 실행하기 위해서는 반드시 JAVA SE 구현체인 자바 개발 키트(JDK: Java Development Kit)을 설치해야 한다.
Java EE(Enterprise Edition) - 서버용 애플리케이션 개발 에디션
- 분산 환경(네트워크, 인터넷)에서 서버용 애플리케이션을 개발하기 위한 도구 및 라이브러리 API를 정의
- 서버용 애플리케이션으로는 Servlet/JSP를 이용한 웹 애플리케이션, 분산 처리 컴포넌트인 EJB(Enterprise Java Bean), XML 웹 서비스 등이 있다.
Java SE(Standard Edition) - 기본 에디션
- Java SE는 자바 프로그램들이 공통적으로 사용하는 JVM을 비롯해서 자바 프로그램 개발에 필수적인 도구와 라이브러리 API를 정의한다.
- 클라/서버 프로그램에 상관없이 자바 프로그램을 개발하고 실행하기 위해서는 반드시 JAVA SE 구현체인 자바 개발 키트(JDK: Java Development Kit)을 설치해야 한다.
Java EE(Enterprise Edition) - 서버용 애플리케이션 개발 에디션
- 분산 환경(네트워크, 인터넷)에서 서버용 애플리케이션을 개발하기 위한 도구 및 라이브러리 API를 정의
- 서버용 애플리케이션으로는 Servlet/JSP를 이용한 웹 애플리케이션, 분산 처리 컴포넌트인 EJB(Enterprise Java Bean), XML 웹 서비스 등이 있다.
멀티 스레드(Multi-Thread)를 쉽게 구현할 수 있다.
- 프로그램이 실행되는 운영체제에 따라서 멀티 스레드 구현 방법이 다르지만, 자바는 스레드 생성 및 제어와 관련된 라이브러리 API를 제공하고 있기 때문에 운영체제에 상관없이 멀티스레드를 쉽게 구현할 수 있다.
동적 로딩(Dynamic Loading)을 지원한다.
- 자바 애플리케이션은 여러 개의 객체가 서로 연결되어 실행된다.
- 이 객체들은 클래스로부터 생성.
- 애플리케이션이 실행될 때 모든 객체가 생성되지 않고, 객체가 필요한 시점에 클래스에 동적 로딩해서 객체를 생성.
- 개발 완료 후 유지보수가 발생하더라도 해당 클래스만 수정하면 되므로 다시 컴파일할 필요가 없다.
- 이 객체들은 클래스로부터 생성.
막강한 오픈소스 라이브러리가 풍부하다.
- 자바는 오픈소스 언어
- 라이브러리 또한 오픈소스로 넘쳐남.
- 오픈 소스 라이브러리를 사용하면 개발 기간을 단축하면서 안정성이 높은 애플리케이션을 쉽게 개발할 수 있다.
- 많은 회사들이 자바를 선택하는 이유 중의 하나가 막강하고 풍부한 자바 오픈소스 라이브러리가 있기 때문.
- 라이브러리 또한 오픈소스로 넘쳐남.
- 오픈 소스 라이브러리를 사용하면 개발 기간을 단축하면서 안정성이 높은 애플리케이션을 쉽게 개발할 수 있다.
1.2.3 자바 가상 기계(JVM)
- 운영체제는 자바 프로그램을 바로 실행할 수 없다.
- 자바 프로그램은 완전한 기계어가 아닌 중간 단계의 바이트 코드이기 때문.
- 이를 해석하고 실행할 수 있는 가상의 운영체제가 필요.
- JVM은 실 운영체제를 대신해서 자바 프로그램을 실행하는 가상의 운영체제 역할을 한다.
- 운영체제별로 프로그램을 실행하고 관리하는 방법이 다르기 때문에 운영체제별로 자바 프로그램을 별도로 개발하는 것보다 운영체제와 자바 프로그램을 중계하는 JVM을 두어 자바 프로그램이 여러 운영체제에서 동일한 실행 결과가 나오도록 설계한 것이다.
- 바이트 코드는 모든 JVM에서 동일한 실행 결과를 보장.
- 하지만 JVM은 운영체제에 종속적이다.
- JVM은 운영체제에 맞게 설치되어야 한다.
- JVM은 JDK 또는 JRE를 설치하면 자동으로 설치.
- 자바 프로그램은 .java인 파일(소스 파일)을 작성하는 것부터 시작. 이 소스 파일을 컴파일러(javac.exe)로 컴파일하면 확장자가 .class인 바이트 코드 파일이 생성된다.
- 바이트 코드 파일은 JVM 구동 명령어 javac.exe에 의해 JVM에서 해석되고 해당 운영체제에 맞게 기계어로 번역된다.
- Write once, run anywhere.
- 한 번 작성하면 어디서든 실행된다.
- 한 번의 컴파일링으로 실행 가능한 기계어가 만들어지지 않고 JVM에 의해 기계어로 번역되고 실행되기 때문에, C와 C++의 컴파일 단계에서 만들어지는 완전한 기계어보다는 속도가 느리다는 단점이 있다.
- 기계어로 빠르게 변환해주는 JVM 내부의 최적화된 JIT 컴파일러를 통해 속도의 격차는 많이 줄어들고 있다.
- 자바 프로그램은 완전한 기계어가 아닌 중간 단계의 바이트 코드이기 때문.
- 이를 해석하고 실행할 수 있는 가상의 운영체제가 필요.
- 하지만 JVM은 운영체제에 종속적이다.
- JVM은 운영체제에 맞게 설치되어야 한다.
- 바이트 코드 파일은 JVM 구동 명령어 javac.exe에 의해 JVM에서 해석되고 해당 운영체제에 맞게 기계어로 번역된다.
- 한 번 작성하면 어디서든 실행된다.
- 기계어로 빠르게 변환해주는 JVM 내부의 최적화된 JIT 컴파일러를 통해 속도의 격차는 많이 줄어들고 있다.
1.3 자바 개발 환경 구축
1.3.1 자바 개발 도구(JDK) 설치
- JDK : 프로그램 개발에 필요한 JVM, 라이브러리 API, 컴파일러 등의 개발도구가 포함.(JRE+개발에 필요한 도구)
- JRE : 프로그램 실행에 필요한 JVM, 라이브러리 API만 포함.(JVM + 표준 클래스 라이브러리)
- 개발이 아니고 실행만 하는 경우 JRE만 설치
- JDK 내부의 bin 디렉토리는 컴파일러인 javac.exe와 자바 가상 기계(JVM) 구동 명령어인 java.exe가 포함되어 있다.
- 개발이 아니고 실행만 하는 경우 JRE만 설치
1.3.2 API 도큐먼트
- 자바 프로그램을 개발하기 위해서는 JDK에서 제공하는 표준 클래스 라이브러리를 반드시 사용해야 한다.
- 이 클래스는 API(Application Programming Interface)라고도 하는데, JDK에 포함되어 있는 API들은 매우 방대하기 때문에 API 도큐먼트를 제공한다.
- 이 클래스는 API(Application Programming Interface)라고도 하는데, JDK에 포함되어 있는 API들은 매우 방대하기 때문에 API 도큐먼트를 제공한다.
1.4 자바 프로그램 개발 순서
1.4.1 소스 작성에서부터 실행까지
.java 소스 파일 작성 > 컴파일러로 바이트코드 파일 생성 > JVM 구동 명령어로 실행
- 파일 확장명이 .java인 텍스트 파일을 생성하고 프로그램 소스를 작성한다.
- 이렇게 만들어진 파일을 자바 소스 파일이라고 한다.
- 작성 완료 된 자바 소스 파일은 컴파일러(javac.exe)로 컴파일해야 한다.
- 컴파일이 성공되면 확장명이 .class인 바이트 코드파일이 생성된다.
- 바이트 코드 파일은 완전한 기계어가 아니므로 단독으로 실행될 수 없고 JVM이 실행되어야 한다.
.java 소스 파일 작성 > 컴파일러로 바이트코드 파일 생성 > JVM 구동 명령어로 실행
- 이렇게 만들어진 파일을 자바 소스 파일이라고 한다.
- 바이트 코드 파일은 완전한 기계어가 아니므로 단독으로 실행될 수 없고 JVM이 실행되어야 한다.
JVM 구동
구동시키는 명령어는 java.exe
Hello.class라는 바이트 코드 파일을 java.exe로 실행하려면
java Hello
- .class 확장명을 제외한 이름 입력
java.exe 명령어가 실행되면 JVM은 바이트 코드 파일을 메모리에 로드하고, 최적의 기계어로 번역한다.
이 후 main() 메소드를 찾아 실행 시킨다.
구동시키는 명령어는 java.exe
Hello.class라는 바이트 코드 파일을 java.exe로 실행하려면
java Hello
- .class 확장명을 제외한 이름 입력
java.exe 명령어가 실행되면 JVM은 바이트 코드 파일을 메모리에 로드하고, 최적의 기계어로 번역한다.
이 후 main() 메소드를 찾아 실행 시킨다.
1.4.2 프로그램 소스 분석
- 자바 실행 프로그램은 반드시 클래스 블록과 main() 메소드 블록으로 구성되어야 한다.
- 클래스 : 필드 또는 메소드를 포함하는 블록
- 클래스의 이름은 개발자가 마음대로 정할 수 있다.
- 주의 : 소스 파일명과 클래스 이름의 대소문자가 일치해야 한다.
- 메소드 : 어떤 일을 처리하는 실행문들을 모아 놓은 블록
- 메소드 이름도 개발자가 마음대로 정할 수 있지만 main() 메소드는 다른 이름으로 바꾸면 안된다.
- JVM이 구동되면서 제일 먼저 main() 메소드를 찾아서 실행하기 때문.
- main() 메소드를 entry point 라고 한다.
- 클래스의 이름은 개발자가 마음대로 정할 수 있다.
- 주의 : 소스 파일명과 클래스 이름의 대소문자가 일치해야 한다.
- 메소드 이름도 개발자가 마음대로 정할 수 있지만 main() 메소드는 다른 이름으로 바꾸면 안된다.
- JVM이 구동되면서 제일 먼저 main() 메소드를 찾아서 실행하기 때문.
- main() 메소드를 entry point 라고 한다.
1.5 주석문과 실행문
1.5.1 주석 사용하기
- 주석은 프로그램 실행과는 상관없이 코드에 설명을 붙인 것.
- 컴파일 과정에서 주석은 무시되고 실행문만 바이트코드로 번역된다.
- 주석을 많이 작성한다고 해서 전체 프로그램의 크기가 커지는 것은 아니므로 가급적 설명이 필요한 코드에 주석을 달아두는 것이 좋다.
- 주석문의 종류
- // : 행 주석
- /* ~ */ : 범위 주석
- 주석을 많이 작성한다고 해서 전체 프로그램의 크기가 커지는 것은 아니므로 가급적 설명이 필요한 코드에 주석을 달아두는 것이 좋다.
- // : 행 주석
- /* ~ */ : 범위 주석
1.5.2 실행문과 세미콜론(;)
- 실행문의 마지막에 반드시 세미콜론을 붙여서 실행문이 끝났음을 표시해주어야 한다.
- 컴파일러는 세미콜론이 나올 때까지 실행문이 계속해서 연결된 것으로 인지.
- 컴파일러는 세미콜론이 나올 때까지 실행문이 계속해서 연결된 것으로 인지.
'Work > 책 정리' 카테고리의 다른 글
[리뷰] 오라클 레벨업 - 한빛미디어 (0) | 2017.02.05 |
---|---|
[Java8 in action] Chap6. 스트림으로 데이터 수집 (3) | 2017.02.03 |
[Java8 in action] Chap5. 스트림 활용 (0) | 2017.02.02 |
[Java8 in action] Chap4. 스트림 소개 (0) | 2017.02.01 |
[이것이 자바다] Chap02. 변수와 타입 (0) | 2017.01.31 |
댓글