Backend/Java

자바

AIHYEONJI 2025. 5. 14. 11:53

1. 자바는?

자바(Java)는 객체지향 프로그래밍(OOP)을 기반으로 한 범용 프로그래밍 언어로, 1995년 썬 마이크로시스템즈(Sun Microsystems)에서 처음 개발되었습니다. 자바는 한 번 작성하면 어떤 운영체제에서도 실행할 수 있는 "Write Once, Run Anywhere"라는 철학을 바탕으로, 자바 가상 머신(JVM)을 통해 플랫폼 독립적인 실행 환경을 제공합니다. 문법이 C, C++과 유사해 비교적 익히기 쉽고, 강력한 라이브러리와 안정적인 구조 덕분에 웹, 모바일(Android), 서버, 게임, 데스크톱 애플리케이션 등 다양한 분야에서 널리 사용되고 있습니다. 하지만 최근에 들어 모바일보단 웹에 사용되고 있다.

 

  • 아이폰 - 스위프트
  • 안르도이드 - 코트린
  • 모바일(앱) - C#
  • 웹 - Java

2. 자바 개발환경 설정

 

2.1. JDK 설치 (Java Development Kit)

  • 자바 공식 홈페이지 JDK 다운로드에 접속합니다.
  • JDK 17 (LTS)  버전 Windows x64 Installer (.exe) 파일을 다운로드합니다.
  • 다운로드한 설치 파일을 실행하고, Next → Next → Install로 설치합니다.
  • 자바는 모듈이 많이 없어 수작업이 많아서, 국내에서는 공식적으로 자바의 Spring 프레임워크(최대 버전이 17)를 사용합니다.

 

2.2 환경 변수 설정 (JAVA_HOME, Path)

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

  • 윈도우는 일단 자바코드를 컴파일 하려면 그 파일 안에서 실행해야하기 때문에, 어디서든지 해석할 수 있으려면 윈도우에 환경설정해주어야 한다.
  • 자바가 어디에 있는지 알아야하기 때문에 환경변수에 등록해야한다.

📌 JAVA_HOME 설정

  1. 윈도우 검색창에 “환경 변수” 입력 → 시스템 환경 변수 편집 클릭

  1. 아래쪽 환경 변수(N)... 클릭
  2. 시스템 변수 영역에서 새로 만들기 클릭:
    • 변수 이름: JAVA_HOME
    • 변수 값: C:\Program Files\Java\jdk-xx (자바 JDK가 설치된 경로 입력)

 

📌 Path에 추가

  1. 시스템 변수에서 Path를 찾아 선택 → 편집 클릭

  1. 새로 만들기 클릭 → 아래 경로 추가
%JAVA_HOME%\bin

 

 

2.3 설치확인

명령 프롬프트(cmd) 실행

java -version
javac -version

 

java -version
javac -version

 

3. 자바의 실행과정

 

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

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

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

 

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

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

javac Hello.java

→ 결과: Hello.class

.class 파일은 사람이 읽기 어려운 바이트코드(Bytecode)로 되어 있습니다.

바이트코드는 자바 전용 중간 언어로, 특정 운영체제에 종속되지 않습니다. JV에서 실행할 수 있는 플랫폼 독립적이라는 말이 나옵니다. 자바는 컴파일러가 있지만 중간언어로 바뀔 때 인터프리터를 통해 변환되기 때문에 실행속도가 느립니다.

.class 파일 생성

 

 

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도 힙에 있는 객체의 필드를 가리킵니다.