⚠️ 주의: 이 글은 자바를 공부하면서 개인적으로 정리한 글입니다.
친절한 설명보다는 개념 정리 중심이니 참고용으로만 활용해주세요.

자바(Java)는 썬 마이크로시스템즈(Sun Microsystems)의 제임스 고슬링(James Gosling)과 연구원들이 개발한 객체 지향 프로그래밍1 언어로, 1995년에 발표되었다.
처음에는 가전제품에 탑재되는 프로그램을 만들기 위한 목적이었으나, 현재는 웹 애플리케이션, 모바일 앱, 서버 백엔드 개발 등 다양한 영역에서 가장 널리 사용되는 프로그래밍 언어 중 하나이다.
1💡 TMI : 객체지향 프로그래밍이란?객체는 프로그램에서 사용되는 데이터 또는 참조 공간을 말한다.
객체는 값을 저장할 변수와 작업을 수행할 메서드를 묶은 단위로, 쉽게 말해 "연관된 데이터 + 행동"을 하나로 묶은 구조이다.이를 레고 블록에 비유할 수 있다.
레고 조각 하나하나가 객체이고, 이 객체들을 조립해서 하나의 큰 구조를 만드는 것이 객체지향 프로그래밍이다.
프로그래밍 언어를 배울 때 자바는 다른 언어와 달리 첫 번째 예제로 다루는 Hello World 를 출력하는 자바 프로그램만 제대로 공부하면 자바 언어의 절반 이상을 익히는
것과 다름없다고 한다.
왜냐하면 Hello World 를 출력하는 프로그램을 작성하려면 JDK2 와 IDE3 를 설치하는 방법과 클래스, 함수, public, static 의 개념을 이해하고 실행하는 방법까지 모두 알아야 하기 때문이다.
2💬 TMI : JDK란?JDK(Java Development Kit)는 자바 프로그램을 개발하기 위한 도구 모음이다.
이 안에는 컴파일러(javac), 실행기(java), 디버거(jdb), 문서 생성기(javadoc) 등
개발에 필요한 핵심 도구들과 JRE(Java Runtime Environment)가 포함되어 있다
- javac: 자바 소스 코드를 바이트코드(.class)로 변환하는 컴파일러
- java: 컴파일된 바이트코드를 JVM에서 해석·실행하는 런처
- jdb: 자바 프로그램을 디버깅하기 위한 도구
- javadoc: 코드 주석을 기반으로 API 문서를 자동 생성
- 기타
jar,javadoc,javap,jinfo등 다양한 개발 유틸리티 포함JDK는 내부적으로 JRE + 개발 도구 모음이기 때문에,
단순히 Java 애플리케이션 실행 목적이라면 JRE만 설치해도 가능하지만,
개발을 하려면 꼭 JDK를 설치해야 한다.
3💬 TMI : IDE이란?IDE(통합 개발 환경)이란, 프로그램을 실행하기 위한 과정인 코드 작성 → 컴파일 → 실행을 하나의 소프트웨어 안에서 처리할 수 있도록 도와주는 도구이다.
프로그램을 실행하는 과정은 일반적으로 다음 두 단계로 이루어진다.1. 프로그래밍(코딩)
→ 우리가 실행하고자 하는 코드를 직접 작성하는 과정이다.2. 컴파일
→ 작성한 코드를 해당 언어의 컴파일러를 통해 기계어로 번역하고 실행한다.
예를 들어, Python의 경우 Python 컴파일러를 통해 실행된다.반면, IDE를 사용하면 코드 작성 → 컴파일 → 실행 과정을 한 곳에서 통합적으로 수행할 수 있어 훨씬 편리하다.
💡 자바 프로그램 실행 과정
※ 컴파일러는 javac.exe, 자바 가상 머신(JVM)은 java.exe에 해당합니다.
1
JDK(Java Development Kit) 설치
IntelliJ IDEA 설치
public class HelloWorld {
}
클래스 선언 시 public 키워드는 접근 제어자4이다.
자바에서는 하나의 파일에 여러 클래스를 작성할 수 있지만,
파일명과 동일한 클래스에는 public 키워드를 붙이는 것이 관례이다.
예를 들어 HelloWorld.java 파일 안에 여러 클래스가 있어도,
파일명과 같은 HelloWorld 클래스에만 public을 붙인다.
HelloWorld.java의 파일명과 HelloWorld 클래스의 이름은 같다.
4💬 TMI : 접근제어자(public, private, protected, default)자바에서 접근제어자(access modifier)는 클래스와 클래스의 멤버(필드, 메소드, 생성자)의 접근 범위를 지정하는 키워드이다.
1. 클래스의 접근제어자
클래스를 정의할 때 사용할 수 있는 접근제어자는 public과 default(생략) 두 가지이다.
- public 클래스: 모든 패키지에서 접근 가능
- default 클래스: 같은 패키지 내에서만 접근 가능
public class Book { // public 클래스 ... } class NoteBook { // default 클래스 ... }
2. 클래스 멤버의 접근제어자
클래스 멤버(필드, 메소드, 생성자)에 사용할 수 있는 접근제어자는 public, private, protected, default(생략) 네 가지이다.
- public 멤버: 모든 패키지에서 접근 가능
- private 멤버: 같은 클래스 내부에서만 접근 가능
- protected 멤버: 같은 패키지 및 다른 패키지의 자식 클래스에서 접근 가능
- default 멤버: 같은 패키지 내에서만 접근 가능
접근 범위는 public > protected > default > private 순으로 좁아진다.
public class Book { // public 클래스 public int a; // public 멤버변수 private int b; // private 멤버변수 protected int c; // protected 멤버변수 int d; // default 멤버변수 public Book() { } // public 생성자 public void showA() { … } // public 메서드 private void showB() { … } // private 메서드 }
main 메서드 이해하기
자바 프로그램을 실행하려면 main5 메서드가 필요하다.
모든 프로그램의 시작 지점이며, 실행 가능한 클래스에는 반드시 있어야 한다.
메서드는 함수와 개념이 동일하지만, 클래스 내부에 존재할 경우 보통 "메서드"라 부른다.
자바는 모든 것이 클래스 기반이므로, 자바에서의 함수는 곧 메서드이다.
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
5💬 TMI : main 메서드에 등장한 요소 설명 (보강)
public
- 접근 제어자 중 가장 허용 범위가 넓음.
- 자바 어플리케이션 실행 시 JVM이 어디서든
main메서드를 호출할 수 있도록 공개되어야만 함.- 만약
public이 아니면, JVM이 진입점을 찾지 못해 실행 오류 발생.static
- 클래스 로딩 시점에 메서드가 정적 영역(Static Area)에 미리 생성됨.
- 인스턴스를 생성하지 않아도 호출 가능.
static메서드에서는 아직 생성되지 않은(인스턴스화되지 않은) 인스턴스 멤버에 접근할 수 없음.void
- 반환값이 없음을 명시.
main메서드는 프로그램 실행 후 JVM으로 복귀만 하면 되므로, 아무것도 반환하지 않음.String[]
String객체들의 배열.- 프로그램 실행 시, 커맨드라인에서 전달된 여러 개의 문자열 인자를 저장하는 역할.
- 예:
java MyApp A B C→args[0]="A",args[1]="B",args[2]="C".args
- 변수명으로, 배열 참조 변수는 자유롭게 변경 가능 (
String[] data등).- 배열 길이(
args.length)를 통해 전달된 인자 개수를 확인할 수 있음.- 보통
for문으로 순회 처리하거나,if (args.length < n)조건 검사에 사용.System.out.println
- 표준 출력 스트림(
System.out)으로 데이터를 보내는 내장 메서드.- 메시지 출력 후 자동 줄바꿈.
커맨드라인 예제
# 컴파일 javac SampleProject.java -encoding UTF-8 # 실행: 전달 인자 3개 이상이 필요할 때 java SampleProject one two threepublic class SampleProject { public static void main(String[] args) { if (args.length < 3) { System.out.println("인자는 3개 이상 전달되어야 합니다."); return; } for (int i = 0; i < args.length; i++) { System.out.println("args[" + i + "] = " + args[i]); } } }
args.length로 인자 개수를 검사for문으로 각 인자를 순회-encoding UTF-8옵션으로 인코딩 오류 방지
main 메서드를 제대로 이해하려면 객체, 인스턴스 개념이 선행되어야 하므로
이번 장에서는 깊이 설명하지 않고 넘어간다.
중요한 점은, 자바 프로그램을 실행하려면 반드시 아래 형식의 main 메서드가 있어야 한다는 것이다.
public static void main(String[] args)
앞에서 main 메서드를 준비했으므로, 이제 프로그램을 실행할 수 있다.