자바
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 설정
- 윈도우 검색창에 “환경 변수” 입력 → 시스템 환경 변수 편집 클릭
- 아래쪽 환경 변수(N)... 클릭
- 시스템 변수 영역에서 새로 만들기 클릭:
- 변수 이름: JAVA_HOME
- 변수 값: C:\Program Files\Java\jdk-xx (자바 JDK가 설치된 경로 입력)
📌 Path에 추가
- 시스템 변수에서 Path를 찾아 선택 → 편집 클릭
- 새로 만들기 클릭 → 아래 경로 추가
%JAVA_HOME%\bin
2.3 설치확인
명령 프롬프트(cmd) 실행
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에서 실행할 수 있는 플랫폼 독립적이라는 말이 나옵니다. 자바는 컴파일러가 있지만 중간언어로 바뀔 때 인터프리터를 통해 변환되기 때문에 실행속도가 느립니다.
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도 힙에 있는 객체의 필드를 가리킵니다.