회고록 블로그

[공부 필기] Java 기본 공부하기 (1) 본문

2. 프로그래밍 언어 공부/Java

[공부 필기] Java 기본 공부하기 (1)

김간장 2021. 8. 20. 16:20

※ Java에 대해 공부하는 학생(?)의 입장이므로, 틀린 내용이 있을 수 있습니다.


 

# Java 이전의 프로그래밍 언어(C, C++ 등)는 플랫폼 종속성의 특징이 있음

    → 플랫폼 종속성?

          e.g.) Intel CPU + 리눅스 환경에서 개발된 프로그램 ===> 동일한 환경에서만 실행됨

    → 발생 원인은 (1)CPU마다 기계어 상이, (2)OS마다 API 상이, (3)OS마다 실행파일 형식 상이 등의 이유 때문임

    → C언어만 해도, 컴파일되면 플랫폼에 종속적인 코드가 되어버림

 

# Java는 개발 단계에서부터 플랫폼에 독립적

    → 이는 Java가 가지고 있는 자바 가상 머신(JVM) 덕분임

    → 즉, OS나 하드웨어(CPU 등)에 관계없이(=동일한 환경이 아니라도) 동일한 실행 결과를 기대할 수 있음 (= WORA의 특징)

    → 참고로 WORA는 Write Once Run Anuwhere의 약자

 


1. 바이트 코드

    → 기본적으로 소스 파일(.java, .cpp 등)을 컴파일하면 "컴퓨터가 이해할 수 있는" 기계어로 변환이 됨

    → Java 역시 컴파일러로 소스 파일(.java)을 컴파일하면 기계어로 변환이 되는데, 이 기계어를 '바이트 코드'라고 함

    → 바이트 코드는 가상 머신 안에서만 실행이 되는 바이너리 코드(binary code)라고 생각하면 됨

          (가상 머신이 아닌, CPU에 의해 실행되는 코드는 '바이너리 코드')

 

※ 즉, C언어 같은 경우 '바이너리 코드'가 되지만

※ Java는 JVM(자바 가상 머신)을 이용하기 때문에 '바이트 코드'가 됨

 

2. JDK(Java Development Kit)

    → 자바 개발 도구라고 해석함

    → 아주 쉽게 말해서 Java로 응용 프로그램 등을 개발 및 실행할 때 필요한 도구/환경임

    → 이 JDK에는 바이트 코드(=컴퓨터가 이해할 수 있도록 표현되어 있음)를 개발자(=사람)가 볼 수 있도록 변환 해주는 도구(javap)도 있음

          * 바이트 코드는 '컴파일된 클래스 파일'에 적혀 있고, 이 클래스 파일을 디어셈블하면 사람이 이해할 수 있는 언어로 변환됨

 

3. 자바 가상 머신(JVM)

    → JVM은 응용 프로그램을 개발할 때, 플랫폼(OS, CPU 등)에 관계없이 항상 동일한 실행 환경을 제공함

    → 그렇기 때문에, 프로그램 실행 시 플랫폼에 관계 없이 동일한 실행 결과를 기대할 수 있음

    → 하지만 JVM 자체는 플랫폼에 종속적임 (JVM 자체는 각 플랫폼에 맞게 porting 되어야 하기 때문)

    → 쉽게 말해서,

          사용자A는 MAC PC를 사용하고 사용자 B는 Windows를 사용한다고 가정 ▶

          각자 사용자A와 사용자B의 PC에서 자바 프로그램을 실행하면 동일한 실행 결과를 보임 ▶

          또는 사용자A와 사용자B의 PC에서 동일한 자바 코드를 작성해도 동일한 실행 결과를 보임 ▶

          다만, 사용자A는 MAC용 JVM이 설치되어 있어야 하고, 사용자B는 Windows용 JVM이 설치되어 있어야함

 

4. Java 실행과정

    → 소스코드(.java)를 클래스 파일(.class)로 컴파일함

    → 참고로, 클래스 파일 안에는 바이트 코드로 작성이 되어 있음

    → 클래스 파일(.class)에 적힌 바이트 코드는 JVM(자바 가상 머신)에서 하나씩 실행됨

    → 다만, 이때 클래스 파일이 실행되는 PC에 '자신의 플랫폼에 맞는 JVM이 설치'되어 있어야 함

    → 운영체제(Windows, MAC, Linux 등)는 JVM을 실행시켜 줌.

         (운영체제는 가상머신을 인지하고 실행시킴)

         (운영체제가 자바 프로그램을 실행하는게 아님. 자바 프로그램을 실행시키는건 JVM이 함)

    → 참고로, "클래스 로더"는 JVM이 딱 실행을 시작할 때, 실행에 필요한 클래스 파일들(=JDK 라이브러리)을 미리 로딩해옴

    → 그렇기 때문에 C언어에서 처럼 링크(=링커가 하는 일) 과정이 없음

 

※ 위의 내용은 Java의 실행 과정에 대하여 아주 쉽게 이해하기 위해서 큰 틀만 적음

※ 더 세부적인 내용은 아래글 참고

http://www.tcpschool.com/java/java_intro_programming

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

 

※ 또한, 실행 과정을 확실하게 이해하고 나면 더 심화된 내용(e.g. 클래스 로더, JVM 구성 등)에 대해서 학습할 필요가 있어보임..

 


5.1. 자바 개발 환경_JDK

    → JDK는 위에서 언급했듯이 Java 응용 프로그램 개발에 필요한 여러 도구들이 있음

    → 자바 컴파일러, JRE, 클래스 라이브러리 소스 등

    → 일반적으로 사용자는 "자바 실행 환경"만 있어도 되기 때문에 JRE(Java Runtime Enviroment)를 설치함

         (그러나 대부분의 PC에는 기본적으로 설치되어 있다고 함)

 

# JDK 16.0.2 버전 분석하기

    → 참고 사이트 : 아래 링크의 "Contents of the JDK"

https://www.oracle.com/java/technologies/javase/jdk16-readme-downloads.html

 

    → bin 디렉터리 안에는 여러 도구가 있는데 그 도구에 대한 설명은 아래 링크 참고

          (모든 도구의 기능을 외우고 다닐 수는 없으니, 어디에 어떤 설명이 적혀 있는지는 찾을 수 있어야 할 것 같음)

https://docs.oracle.com/en/java/javase/16/docs/specs/man/index.html

 

5.2. 자바 개발 환경_자바 API

    → 관련된 클래스를 모아둔 것을 자바에서는 "패키지"라고 함

    → 오라클이라는 회사가 주요한 기능들을 미리 클래스 라이브러리로 묶어놓은 패키지를 "자바 API"라고 함

    → 개발자는 자바 API로 부터 자신이 필요로 하는 "클래스"가 속한 "패키지"를 import 하면 됨

    → 자바 API 문서를 열어놓고 프로그램 개발하기를 권장함 

    → 자바 API 문서는 Oracle 사이트에서 ▶ 자신의 JDK 버전에 맞춰 Readme 클릭 ▶ 그 안에서 API Specification 등 찾아서 클릭 

 

# JDK 16버전 API Specification 분석하기

    → 아래 사이트에서 자바 API 문서 확인

https://docs.oracle.com/en/java/javase/16/docs/api/index.html

    → 처음에 모듈(Module)을 확인할 수 있음

          (e.g.) java.base 모듈 ▶ Java SE 플랫폼의 기본적인 API가 정의되어 있음

    → 모듈(Module) 안에는 패키지(Package)가 있는 것을 확인할 수 있음

          (e.g.) java.base 모듈 안에 ▶ java.io 패키지 ▶ 시스템 입출력 관련한 것을 제공함

    → 패키지(Package) 안에 인터페이스(Interface)나 클래스(Class)가 있는 것을 확인할 수 있음

          (e.g.) java.base 모듈 안에 ▶ java.io 패키지 안에 ▶ BufferedReader 클래스  ▶ character-input stream 으로부터 텍스트를 읽음

 

5.3. 자바 IDE

    → IDE ?

         Integrated Development Environment의 약자. 통합 개발 환경이라고 해석함.

    → IDE는 소스 코드 편집, 컴파일, 디버깅 등을 한번에 할 수 있는 환경인데

         대표적으로 Microsoft의 비주얼스튜디오, IBM의 이클립스(eclipse) 등이 있음

 


# 자바 소스 파일(*.java)의 이름과, public으로 선언된 클래스의 이름은 동일해야함

 

# 1개의 자바 소스 파일(*.java)에는 여러 개의 클래스 작성 가능

   하지만, 그 여러 개의 클래스는 컴파일하면 각각의 클래스 파일(*.class)로 생성됨

    → 내부 클래스라는 것도 있는데, 위의 예시에서는 클래스 C가 내부 클래스임

    → 1개의 자바 소스 파일에는 1개의 클래스만 'public'으로 선언 가능함

 

# 프로그램은 main() 메소드에서부터 시작되며, 1개의 클래스 파일에는 1개의 main() 메소드만 있을 수 있음

    → 즉, 여러 클래스 파일에 각각 main() 메소드를 1개씩 가질 수 있음

 

# 참고로, 클래스 안에 있는 함수를 Java에서는 '메소드'라고 함


참고 문헌

황기태.김표수 저자(2016). 명품 Java Programming(제2판). 경기:생능출판.

Comments