본문 바로가기
프로그래밍 언어/Java

자바 시작하기

by 진진리 2023. 9. 13.
728x90
  • 어셈블리어

어셈블리: 기계 명령어와 일상 용어를 일대일로 매칭하는 코드표

어셈블리어: 기계어와 일대일 대응이 되는 컴퓨터 프로그래밍의 저급 언어

CPU마다 실행할 수 있는 기계어가 다르므로 어셈블리어도 다르게 만들어짐

어셈블러: 어셈블리어를 기계어로 번역해주는 소프트웨어

 

  • C언어

어셈블리어로 개발할 때는 기계의 종류에 따라 다른 소스파일을 만들어야 했음

C언어 -> 하나의 소스파일을 각 기계어에 맞는 컴파일러로 컴파일하여 기계어 목적파일을 만들기 때문에

               기계에 상관없이 개발이 가능해짐

하지만 운영체제의 특성에 맞게 컴파일하기 전에 각 기종별로 소스코드를 수정할 필요가 있음

 

  • Java의 등장

객체지향 언어 , 클래스없이 개발이 불가능

  • 장점
    1. 플랫폼에 영향을 받지 않으므로 다양한 환경에서 사용 가능: 운영체제에서 직접 실행하는 것이 아니라 가상 머신에서 먼저 실행하고, 이 가상 머신이 운영체제에 맞는 실행 파일로 바꿔주기 때문!
    2. 객체 지향 언어이기 때문에 유지보수가 쉽고 확장성이 좋음
    3. 프로그램이 안정적: 포인터를 사용하지 않아 메모리를 직접 제어할 수 없음
    4. 풍부한 기능을 제공하는 오픈 소스
  • 개발할 수 있는 프로그램: 웹 서버, 안드로이드 앱, 게임

 

 

  • 환경설정
    • JDK(Java Development Kit)
      • Java 애플리케이션 개발을 위해 반드시 필요, Java 컴파일러가 포함
      • 일반적으로 OpenJDK + 제조사의 부가 기능 (ex. Oracle JDK)
      • JRE가 포함되어 있음
    • JRE(Java Runtime Environment), JVM(Java Virtual Machine)
      • Java로 컴파일 된 어플리케이션을 실행하는 역할
      • 모든 Java 어플리케이션은 JVM이라고 하는 가상의 컴퓨터 공간에서 실행됨

JDK 다운로드 링크

https://www.azul.com/downloads/?version=java-17-lts&os=windows&architecture=x86-64-bit&package=jdk#zulu 

 

Azul Downloads

According to the Gartner report, “by 2025, more than 70% of Java applications will be deployed on third-party Java runtimes, up from 30% in 2019.”

www.azul.com

 

InterlljJ 설치

  • JetBrain에서 개발한 Java 전용 IDE(Integrated Development Environment, 통합 개발 환경)

https://www.jetbrains.com/ko-kr/idea/download/?section=mac#section=mac 

 

최고의 Java 및 Kotlin IDE인 IntelliJ IDEA를 다운로드하세요

 

www.jetbrains.com

  • Java 소스코드 [파일명].java라는 파일 형식으로 루트 디렉토리에 패키지로 구분되어 작성됨
  • 자바 컴파일러를 통해 번역된 바이트 코드는 out 디렉토리에 [파일명].class라는 형태로 저장됨

 

  • main 함수 작성
public class Hello {

    public static void main(String[] args) {
        
    }
}

 

  • "Hello, world!" 출력
public class Hello {

    public static void main(String[] args) {

        System.out.println("Hello, world!");
    }
}

 

  • Java의 실행 과정
    1. 개발자가 자바 소스파일(.java) 작성
    2. JDK가 제공하는 javac(컴파일러)를 사용하여 소스파일 컴파일
    3. JVM의 Class Loader는 컴파일로 생성된 바이트 코드(.class)를 전달 받아 동적 로딩을 통해 클래스 로딩하여 JVM 내부 Runtime Data Area에 로드
      • Class Loader: 프로그램 상의 모든 클래스, 변수 및 메서드의 정보를 Method Area에 배치. 동적으로 클래스를 로드하고 정적 변수와 메서드는 Heap Area에 배치함
    4. JVM의 Execution에 의해 기계어로 해석되어 실행
      • Execution(실행 엔진):
        • Interpreter: 바이트 코드를 한줄씩 읽고 번역. 느리다는 단점이 존재. 이를 보완하기 위한 JIT 컴파일러.
        • JIT 컴파일러: Interpreter 방식으로 실행을 하다가 적당한 시점에 바이트 코드 전체를 컴파일하여 캐싱(컴파일한 코드를 저장해둠)
        • Garbage Collector: 사용되지 않는 메모리를 추적하여 비워주는 기능을 가짐

 

  • Compile 언어: 소스파일 전체를 컴파일 한 후 기계어를 CPU와 메모리를 통해 읽어서 바로 실행하는 방식으로 동작하는 언어
    • 종류: C, C++, Java, C# 등
    • 소스파일이 클수록 컴파일 과정이 오래 걸림
    • 실행 속도가 빠름

=> Java는 javac에 의해 컴파일 되지만 JVM에서 인터프리터로 실행되므로 Compile 언어이지만 Interpreter 언어의 특징을 가짐

 

  • Interpreter 언어: 소스파일을 컴파일하지 않고 Interpreter를 사용하여 한줄 씩 번역하면서 실행하는 방식으로 동작하는 언어
    • 종류: Javascript, Ruby, Python 등
    • 별도의 목적 파일이 존재하지 않음
    • 수정 및 디버깅이 편리
    • Interpreter만 존재하면 어디서든 실행이 가능하므로 자유롭고 독립적
    • 실행속도가 느림

 

 

 

  • 전 처리 과정 이해하기

JRE이 메인 메서드를 포함하고 있는지 확인한 후 부팅시킨 JVM이 가장 먼저하는 일

  1. java.lang 패키지를 Method Area에 배치
  2. import한 패키지도 Method Area에 배치
  3. 프로그램 상의 모든 클래스, 변수 및 메서드 정보를 Method Area에 배치
  4. 정적 변수와 메서드는 Heap Area에 배치

 

  • Runtime Data Areas

자바 프로그램에서 발생하는 데이터를 저장하는 역할. 데이터의 속성에 따라 영역이 분리되어 있음.

  • PC Register: 스레드가 시작될 때마다 생성되는 공간으로, 스레드마다 하나씩 존재. 스레드가 어떤 명령에 의해 실행되어야 할지에 대한 기록을 하는 부분으로 현재 수행하고 있는 JVM의 명령 주소를 갖고 있음.
  • Native Method Stack: 기계어로 작성된 프로그램을 실행시키는 영역. 자바 이외의 언어로 작성된 코드르 실행할 때 할당됨. Java Native Interface를 통해 바이트 코드로 전환하여 저장. 커널이 독자적으로 프로그램을 실행시키는 영역
  • Method Area: 클래스 정보를 처음 메모리 공간에 올릴 때 초기화 되는 대상을 저장하기 위한 공간. 모든 스레드가 공유.
    • Runtime Concstant Pool: 상수 자료형을 저장하여 참조하고 중복을 막는 역할 수행
  • Heap Area: 객체가 생성되는 영역. 

1. Permanent Generation: 생성된 객체들의 정보의 주소값이 저장된 공간

2. New/Young Generation

  • Eden: 객체들이 최초로 생성되는 공간
  • Survivor 0, 1: Eden에서 참조되는 객체들이 저장되는 공간
  • Eden 영역에 객체가 가득차게 되면 Garbage Collector에 의해 Eden 영역의 값들을 Survivor 1 영역에 복사하고 나머지 객체들을 삭제

3. Tenured Generation

  • Old: 이곳의 객체들은 Garbage Collector에 의해 삭제됨
  • New/Young Generation에서 일정시간 살아남은 객체들이 저장되는 공간
  • Stack Area: 메서드를 빠져나가면 소멸이 되는 데이터를 저장하기 위한 영역. 쌓이는 메서드의 단위를 스택 프레임이라고 부름. 멀티 스레드 환경에서 각 스레드가 고유의 스택 영역을 가진다는 특징이 있

'프로그래밍 언어 > Java' 카테고리의 다른 글

객체지향  (0) 2023.09.13
배열  (0) 2023.09.13
조건문과 반복문  (0) 2023.09.13
연산자  (0) 2023.09.13
변수와 자료형  (0) 2023.09.13