이 글은 "Java의 정석 (남궁 성 지음)"을 읽고 주관적으로 요약한 글입니다.
※ 요약
- 자바 특징
- 운영체제에 독립적
- 객체지향 언어
- 자동 메모리 관리
- 동적 로딩
- JVM
- 자바 프로그램은 운영체제 / 하드웨어 대신 JVM과 통신
- 자바 프로그램을 운영체제에 독립적으로 실행할 수 있도록 해줌
- 자바 인터프리터를 거치므로 속도가 느림
- 소스코드 이름의 특징
- 소스코드의 이름은 public class와 동일
- 소스코드에는 둘 이상 public class가 존재할 수 없음
- public class가 없을 경우, class 중 하나의 이름과 일치
1. 자바(Java Programming Language)
1) 자바란?
- 썬 마이크로시스템즈에서 개발, 1996년 발표한 객체지향 프로그래밍 언어
- 운영체제에 독립적으로 운영체제에 따라 프로그램 변경이 필요하지 않음
- 자바의 특징을 잘 살려 쉽고 간결하여 많은 사용자층을 확보
- 풍부한 클래스 라이브러리
- 지속적인 개선으로 최신 기술 지원
2) 자바의 역사
- 1991년 고안된 오크(Oak)라는 언어에서 시작
- 제임스 고슬링 / 아서 밴 호프
- C++을 확장해서 사용하려 했지만 목적에 부합하지 않았음
- Oak는 처음에 소형기기에 사용될 목적으로 개발
- 그러나 인터넷 보급으로 인해 운영체제에 독립적인 특징을 살려 인터넷에 적합하도록 개발
3) 자바언어의 특징
- 운영체제에 독립적 (JVM)
- 일종의 에뮬레이터인 JVM으로 인해 가능
- 자바 응용프로그램은 운영체제나 하드웨어가 아닌 JVM하고만 통신
- 자바 응용프로그램에게 전달받은 명령을 운영체제가 이해할 수 있도록 변환
- JVM은 운영체제에 종속적
- 객체지향 언어
- 객체지향개념의 특징인 상속 / 캡슐화 / 다형성이 잘 적용된 순수 객체지향언어라는 평가를 받음
- 자동 메모리 관리 (Garbage Collector)
- 가비지컬렉터가 자동으로 메모리를 관리
- 프로그래머가 사용하지 않는 메모리를 직접 체크하고 반환하지 않아도 됨
- 프로그래밍에 집중할 수 있음
- 동적 로딩 지원 (Dynamic Loading)
- 실행 시에 모든 클래스가 로딩되지 않고, 필요한 시점에 로딩하여 사용
- 클래스가 변경되어도 전체 어플리케이션을 다시 컴파일하지 않아도 됨
- 비교적 적은 작업만으로 처리 가능
- 네트워크 / 분산처리 지원
- 인터넷과 대규모 분산환경을 염두한 네트워크 프로그래밍 라이브러리(Java API)로 쉽게 개발
- 멀티쓰레드 지원
- 운영체제에 따라 상이하고 처리방식도 다른 멀티쓰레드 방식을 시스템과 관계없이 구현 가능
- 관련 라이브러리(Java API) 제공
- 쓰레드 스케줄링을 자바 인터프리터가 담당
- 비교적 배우기 쉬움
- 자바는 C++(연산자 / 기본 구문)과 스몰톡(객체지향관련 구문)에서 두 장점을 모두 가져옴
- 객체지향언어가 많은 장점에도 불구하고 배우기 어려웠으나, 자바는 간결하고 명료함
4) JVM(Java Virtual Machine)
- 가상 기계
- 소프트웨어로 구현된 하드웨어를 뜻하는 넓은 의미
- JVM
- 자바로 작성된 어플리케이션을 실행하려면 반드시 JVM 필요
- 속도가 느리다
- JVM을 한 번 더 거침
- 하드웨어에 맞게 완전히 컴파일된 상태가 아니고, 실행 시 해석되기 때문
2. 자바개발환경 구축하기
1) 자바 개발도구(JDK)설치하기
- JDK 설치
- JVM, 자바클래스 라이브러리, 필요한 프로그램들 설치
- path에 추가해줘야함
- JDK bin 디렉토리의 주요 실행파일
- javac.exe (자바 컴파일러)
- 바이트코드로 컴파일 - java.exe (자바 인터프리터)
- 바이트코드를 해석하고 실행 - javap.exe (역어셈블러)
- 컴파일된 클래스파일들을 원래의 소스로 변환 - javadoc.exe (자동문서생성기)
- 주석을 이용해 Java API문서와 같은 형식의 문서로 자동 생성 - jar.exe (압축프로그램)
- 클래스파일 / 프로그램 실행에 관련된 파일을 하나의 jar파일로 압축 / 압축해제
- javac.exe (자바 컴파일러)
- JDK / JRE
- JRE (Java Runtime Environment)
- 자바 응용프로그램이 실행되기위한 최소환경
- JVM + 클래스라이브러리(Java API) - JDK (Java Development Kit)
- 자바개발도구
- JRE + 개발에 필요한 실행파일(javac.exe 등)
- JRE (Java Runtime Environment)
- 바이트코드
- JVM이 이해할 수 있는 기계어
- JVM은 바이트코드를 해당 OS의 기계어로 변환하여 OS에 전달
2) Java API문서 설치하기
- 자바에서 제공하는 클래스 라이브러리(Java API)를 잘 사용하기 위해선 Java API 문서가 필수적
- 'C:\jdk1.8\docs\api\index.html' path에 위치
3. 자바로 프로그램작성하기
1) Hello.java
- Hello.java --(javac.exe / 컴파일)--> Hello.class --(java.exe / 실행)--> "Hello, world" 출력
- 자바의 모든 코드는 반드시 클래스 안에존재
- public static void main(String[] args)
- main 메서드의 선언부
- java.exe에 의해 호출될 수 있게 미리 약속된 부분
- 소스파일 이름
- public class의 이름과 일치해야함
- 하나의 소스파일에는 public class가 둘 이상 존재할 수 없음
- public class가 없으면 어떤 클래스의 이름과 일치해도 상관없음
- 클래스파일은 클래스마다 하나씩 만들어짐
2) 자주 발생하는 에러와 해결방법
- 생략
3) 자바프로그램의 실행과정
- 프로그램 실행에 필요한 클래스 로드
- 클래스파일 검사
- 지정된 클래스에서 main 호출
4) 주석(comment)
- template
- /*
Data :
Source :
Author :
Email :
*/
- /*
5) 이 책으로 공부하는 방법
- 책 내용 중...
객체지향개념을 공부할 때 주의할 점은, 객체지향개념 자체에 몰두하지 않아야 한다는 것이다. 이것은 완전히 샛길로 빠지는 것으로, 여러분들은 객체지향개념 언어인 '자바'를 배우는 것이지 객체지향개념을 배우는 것이 아니라는 것을 잊지 말자.
- 나에게 매우 중요한 이야기였다.
- 오랜시간 컴퓨터를 전공을 하면서도 Java에 대해 잘 몰랐던 가장 큰 이유가 아닌가 싶다
- 내가 이 책을 읽어야하는 이유이다
- 오만함을 반성하며 정독해야겠다
'책읽기' 카테고리의 다른 글
[쉽게 배우는 운영체제](요약)[Part-4][Ch-10] 입출력 시스템과 저장장치 (0) | 2021.08.02 |
---|---|
[Java의 정석][Chapter-2] 변수 (0) | 2021.08.01 |
[파이썬 알고리즘 인터뷰][최단경로] K 경유지 내 가장 저렴한 항공권 (0) | 2021.07.30 |
[파이썬 알고리즘 인터뷰][최단경로] 네트워크 딜레이 타임 (0) | 2021.07.30 |
[파이썬 알고리즘 인터뷰] 13장 - 최단 경로 문제 (0) | 2021.07.30 |