백엔드/Java
자바
Ryuzy
2025. 5. 13. 15:50
728x90
반응형
1. 자바
자바(Java)는 객체지향 프로그래밍(OOP)을 기반으로 한 범용 프로그래밍 언어로, 1995년 썬 마이크로시스템즈(Sun Microsystems)에서 처음 개발되었습니다. 자바는 한 번 작성하면 어떤 운영체제에서도 실행할 수 있는 "Write Once, Run Anywhere"라는 철학을 바탕으로, 자바 가상 머신(JVM)을 통해 플랫폼 독립적인 실행 환경을 제공합니다. 문법이 C, C++과 유사해 비교적 익히기 쉽고, 강력한 라이브러리와 안정적인 구조 덕분에 웹, 모바일(Android), 서버, 게임, 데스크톱 애플리케이션 등 다양한 분야에서 널리 사용되고 있습니다.
2. 자바 개발환경 설정
1. JDK 설치 (Java Development Kit)
- 자바 공식 홈페이지 JDK 다운로드에 접속합니다.
- JDK 17 (LTS) 버전 Windows x64 Installer (.exe) 파일을 다운로드합니다.
- 다운로드한 설치 파일을 실행하고, Next → Next → Install로 설치합니다.
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도 힙에 있는 객체의 필드를 가리킵니다.
728x90
반응형