책읽기

[Java의 정석][Chapter-1] 자바를 시작하기 전에

pythaac 2021. 8. 1. 13:56
이 글은 "Java의 정석 (남궁 성 지음)"을 읽고 주관적으로 요약한 글입니다. 

출처 : http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9788994492032#N

 

※ 요약

  • 자바 특징
    • 운영체제에 독립적
    • 객체지향 언어
    • 자동 메모리 관리
    • 동적 로딩
  • JVM
    • 자바 프로그램은 운영체제 / 하드웨어 대신 JVM과 통신
    • 자바 프로그램을 운영체제에 독립적으로 실행할 수 있도록 해줌
    • 자바 인터프리터를 거치므로 속도가 느림
  • 소스코드 이름의 특징
    • 소스코드의 이름은 public class와 동일
    • 소스코드에는 둘 이상 public class가 존재할 수 없음
    • public class가 없을 경우, class 중 하나의 이름과 일치

 

1. 자바(Java Programming Language)

1) 자바란?

  • 썬 마이크로시스템즈에서 개발, 1996년 발표한 객체지향 프로그래밍 언어
  • 운영체제에 독립적으로 운영체제에 따라 프로그램 변경이 필요하지 않음
  • 자바의 특징을 잘 살려 쉽고 간결하여 많은 사용자층을 확보
  • 풍부한 클래스 라이브러리
  • 지속적인 개선으로 최신 기술 지원

2) 자바의 역사

  • 1991년 고안된 오크(Oak)라는 언어에서 시작
  • 제임스 고슬링 / 아서 밴 호프
  • C++을 확장해서 사용하려 했지만 목적에 부합하지 않았음
  • Oak는 처음에 소형기기에 사용될 목적으로 개발
  • 그러나 인터넷 보급으로 인해 운영체제에 독립적인 특징을 살려 인터넷에 적합하도록 개발

3) 자바언어의 특징

  1. 운영체제에 독립적 (JVM)
    • 일종의 에뮬레이터인 JVM으로 인해 가능
    • 자바 응용프로그램은 운영체제나 하드웨어가 아닌 JVM하고만 통신
    • 자바 응용프로그램에게 전달받은 명령을 운영체제가 이해할 수 있도록 변환
    • JVM은 운영체제에 종속적
  2. 객체지향 언어
    • 객체지향개념의 특징인 상속 / 캡슐화 / 다형성이 잘 적용된 순수 객체지향언어라는 평가를 받음
  3. 자동 메모리 관리 (Garbage Collector)
    • 가비지컬렉터가 자동으로 메모리를 관리
    • 프로그래머가 사용하지 않는 메모리를 직접 체크하고 반환하지 않아도 됨
    • 프로그래밍에 집중할 수 있음
  4. 동적 로딩 지원 (Dynamic Loading)
    • 실행 시에 모든 클래스가 로딩되지 않고, 필요한 시점에 로딩하여 사용
    • 클래스가 변경되어도 전체 어플리케이션을 다시 컴파일하지 않아도 됨
    • 비교적 적은 작업만으로 처리 가능
  5. 네트워크 / 분산처리 지원
    • 인터넷과 대규모 분산환경을 염두한 네트워크 프로그래밍 라이브러리(Java API)로 쉽게 개발
  6. 멀티쓰레드 지원
    • 운영체제에 따라 상이하고 처리방식도 다른 멀티쓰레드 방식을 시스템과 관계없이 구현 가능
    • 관련 라이브러리(Java API) 제공
    • 쓰레드 스케줄링을 자바 인터프리터가 담당
  7. 비교적 배우기 쉬움
    • 자바는 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파일로 압축 / 압축해제
  • JDK / JRE
    • JRE (Java Runtime Environment)
      - 자바 응용프로그램이 실행되기위한 최소환경
      - JVM + 클래스라이브러리(Java API)
    • JDK (Java Development Kit)
      - 자바개발도구
      - JRE + 개발에 필요한 실행파일(javac.exe 등)
  • 바이트코드
    • 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) 자바프로그램의 실행과정

  1. 프로그램 실행에 필요한 클래스 로드
  2. 클래스파일 검사
  3. 지정된 클래스에서 main 호출

4) 주석(comment)

  • template
    • /*
      Data    :
      Source :
      Author :
      Email   :
      */

5) 이 책으로 공부하는 방법

  • 책 내용 중...
객체지향개념을 공부할 때 주의할 점은, 객체지향개념 자체에 몰두하지 않아야 한다는 것이다. 이것은 완전히 샛길로 빠지는 것으로, 여러분들은 객체지향개념 언어인 '자바'를 배우는 것이지 객체지향개념을 배우는 것이 아니라는 것을 잊지 말자.
  • 나에게 매우 중요한 이야기였다.
    • 오랜시간 컴퓨터를 전공을 하면서도 Java에 대해 잘 몰랐던 가장 큰 이유가 아닌가 싶다
    • 내가 이 책을 읽어야하는 이유이다
    • 오만함을 반성하며 정독해야겠다