Java

현서·2025년 5월 20일

자바

목록 보기
1/32
post-thumbnail

1. 자바

자바(Java): 객체 지향 프로그래밍(OOP)을 기반으로 한 범용 프로그래밍 언어.
자바는 자바 가상 머신(JVM)을 통해 어떤 소프트웨어나 시스템이 특정 운영체제(OS)나 하드웨어 환경에 의존하지 않고 다양한 환경에서 동일하게 동작할 수 있다.

2. 자바 개발환경 설정

1. JDK 설치 (Java Development Kit)

자바 공식 홈페이지 JDK 다운로드
JDK 17 (LTS) 버전 Windows x64 Installer (.exe) 파일을 다운로드.
다운로드한 설치 파일을 실행하고, Next → Next → Install로 설치한다.

여기서 x64 Installer를 설치했던 듯.

2. 환경 변수 설정 (JAVA_HOME, Path)

JDK를 설치한 후, 명령 프롬프트(cmd)에서 자바 명령어를 사용할 수 있도록 환경 변수 설정을 해야 한다.

📌 JAVA_HOME 설정

윈도우 검색창에 “환경 변수” 입력 → 시스템 환경 변수 편집 클릭
아래쪽 환경 변수(N)... 클릭

시스템 변수 영역에서 새로 만들기 클릭:

변수 이름: JAVA_HOME
변수 값: C:\Program Files\Java\jdk-xx (자바 JDK가 설치된 경로 입력)

📌 Path에 추가

시스템 변수에서 Path를 찾아 선택 → 편집 클릭
새로 만들기 클릭 → 아래 경로 추가

%JAVA_HOME%\bin

3. 설치 확인

명령 프롬프트(cmd) 실행

java -version
javac -version

3. 자바의 실행 과정

1. 자바 소스 코드 작성 (.java 파일)

개발자가 .java 확장자를 가진 자바 코드를 작성한다.

public class Hello {
    public static void main(String[] args) {
        System.out.println("안녕하세요!");
    }
}

2. 자바 컴파일러로 컴파일 (javac 명령어)

작성한 .java 파일을 자바 컴파일러(javac)로 변환하면 .class라는 파일이 만들어진다.

javac Hello.java

→ 결과: Hello.class

.class 파일은 사람이 읽기 어려운 바이트코드(Bytecode)로 되어 있다.
바이트코드는 자바 전용 중간 언어로, 특정 운영체제에 종속되지 않는다. (플랫폼 독립적)

3. JVM이 바이트코드를 읽고 실행

자바 가상 머신(JVM, Java Virtual Machine)이 Hello.class를 읽고 실행한다.

java Hello

JVM은 운영체제마다 따로 존재하지만, 바이트코드는 동일하다.
JVM이 바이트코드를 한 줄씩 해석(인터프리팅) 하거나, 필요한 부분을 미리 기계어로 바꾸어 실행(JIT 컴파일) 한다.

4. 자바의 메모리 구조

  1. 메서드 영역(Method Area) 클래스에 대한 정보(예: 클래스 이름, 변수, 메서드, static 변수 등)가 저장된다. 모든 스레드가 공유한다.
  2. 힙 영역(Heap) new 키워드로 생성한 객체(클래스 인스턴스)들이 저장되는 공간이다. 모든 스레드가 공유하며, 가비지 컬렉터(GC)가 이 영역을 관리한다.
  3. 스택 영역(Stack) 메서드 호출 시 생성되는 지역 변수들이 저장된다. 각 스레드마다 따로 존재하며, 메서드 호출이 끝나면 해당 스택은 자동으로 제거된다.
  4. 프로그램 카운터(PC) 레지스터 현재 실행 중인 JVM 명령어 주소를 저장한다. 스레드마다 하나씩 존재한다.
  5. 네이티브 메서드 스택(Native Method Stack) 자바 외의 언어(C, C++)로 작성된 네이티브 메서드 실행 시 사용되는 스택이다.
public class Person {
    String name;
    
    public static void main(String[] args) {
        int age = 20;                // 스택 영역
        Person p = new Person();     // p는 스택, 객체는 힙
        p.name = "김사과";           // 힙에 저장된 객체의 필드
    }
}

int age = 20; → age는 스택에 저장.
Person p = new Person(); → p는 스택에 있지만, 실제 Person 객체는 힙에 생성
"김사과"는 힙에 저장되고, p.name도 힙에 있는 객체의 필드를 가리킴.

IntelliJ IDEA 다운로드

profile
The light shines in the darkness.

0개의 댓글