Java 치트시트
마지막 업데이트
Hello World 및 프로그램 구조
모든 Java 프로그램은 클래스 안의 main 메서드에서 실행됩니다.
| 요소 | 코드 |
|---|---|
| 클래스 선언 | public class Main { ... } |
| 진입점 | public static void main(String[] args) { ... } |
| 한 줄 출력 | System.out.println("Hello, World!"); |
| 줄바꿈 없이 출력 | System.out.print("text"); |
| 입력 읽기 | Scanner sc = new Scanner(System.in); |
| 클래스 임포트 | import java.util.ArrayList; |
| 주석 | // line 그리고 /* block */ |
자료형
원시 타입은 소문자이며, 그 래퍼 클래스는 대문자로 시작합니다.
| 타입 | 설명 |
|---|---|
int | 32비트 부호 있는 정수 |
long | 64비트 부호 있는 정수 |
double / float | 부동소수점 숫자 |
boolean | true 또는 false |
char | 단일 16비트 유니코드 문자 |
byte / short | 8비트 / 16비트 정수 |
String | 불변 텍스트 (원시 타입이 아닌 클래스) |
Integer, Double, Boolean | 원시 타입을 위한 래퍼 클래스 |
var | 추론된 지역 타입 (Java 10+) |
변수
| 작업 | 문법 |
|---|---|
| 선언 및 초기화 | int x = 5; |
| 타입 추론 (지역) | var name = "Ada"; |
| 상수 | final double PI = 3.14159; |
| 문자열 연결 | String s = "Hi " + name; |
| 문자열을 int로 변환 | int n = Integer.parseInt("42"); |
| int를 문자열로 변환 | String s = String.valueOf(42); |
| 서식 지정된 문자열 | String.format("%d items", n) |
제어 흐름
| 문(statement) | 문법 |
|---|---|
| if / else | if (x > 0) { ... } else { ... } |
| switch 문 | switch (n) { case 1: ...; break; default: ...; } |
| switch 표현식 | var s = switch (n) { case 1 -> "one"; default -> "other"; }; |
| while 반복문 | while (i < n) { ... } |
| do-while 반복문 | do { ... } while (i < n); |
| for 반복문 | for (int i = 0; i < n; i++) { ... } |
| 향상된 for (for-each) | for (String item : list) { ... } |
| break / continue | break;는 반복문을 빠져나가고, continue;는 다음 반복으로 건너뜀 |
메서드
| 작업 | 문법 |
|---|---|
| 메서드 정의 | int add(int a, int b) { return a + b; } |
| 반환값 없음 | void greet() { ... } |
| 정적 메서드 | static int square(int x) { return x * x; } |
| 공개 메서드 | public String getName() { return name; } |
| 가변 인자(varargs) | int sum(int... nums) { ... } |
| 메서드 호출 | int r = add(2, 3); |
| 정적 메서드 호출 | Math.max(a, b); |
| 메서드 오버로딩 | int max(int a, int b)와 double max(double a, double b) |
클래스 및 객체 지향(OOP)
| 작업 | 문법 |
|---|---|
| 클래스 정의 | public class Dog { ... } |
| 필드 | private String name; |
| 생성자 | public Dog(String name) { this.name = name; } |
| 객체 생성 | Dog d = new Dog("Rex"); |
| 게터 / 세터 | public String getName() { return name; } |
| 상속 | class Puppy extends Dog { ... } |
| 인터페이스 | interface Runnable { void run(); } |
| 인터페이스 구현 | class Task implements Runnable { ... } |
| 메서드 오버라이드 | @Override public void speak() { ... } |
컬렉션
java.util의 제네릭 컬렉션.
| 타입 | 사용법 및 예시 |
|---|---|
ArrayList<T> | 동적 배열: list.add(1); list.get(0); list.size(); |
HashMap<K, V> | 키-값: map.put("a", 1); map.get("a"); |
HashSet<T> | 고유 값: set.add(5); set.contains(5); |
LinkedList<T> | 이중 연결 리스트, 큐/덱으로 적합 |
ArrayDeque<T> | 스택/큐: dq.push(x); dq.pop(); |
| 배열 | int[] nums = {1, 2, 3}; |
| 리스트 순회 | for (T x : list) { ... } |
| 맵 순회 | for (var e : map.entrySet()) { e.getKey(); e.getValue(); } |
스트림 및 람다
컬렉션에 대한 함수형 스타일 파이프라인 (Java 8+).
| 작업 | 문법 |
|---|---|
| 람다 표현식 | x -> x * 2 |
| 스트림 생성 | list.stream() |
| 필터 | .filter(n -> n > 0) |
| 매핑 / 변환 | .map(n -> n * 2) |
| 정렬 | .sorted() 또는 .sorted(Comparator.reverseOrder()) |
| 축약 / 합계 | .reduce(0, Integer::sum) |
| 개수 / 일치 | .count(), .anyMatch(n -> n > 5) |
| 리스트로 수집 | .collect(Collectors.toList()) |
| 각 요소 처리 | .forEach(System.out::println) |
자주 쓰는 패턴 (try/catch, 제네릭)
| 패턴 | 문법 |
|---|---|
| try / catch | try { ... } catch (Exception e) { ... } |
| 특정 예외 잡기 | catch (IOException e) { ... } |
| finally | finally { ... }는 항상 실행됨 |
| try-with-resources | try (Scanner sc = new Scanner(...)) { ... } |
| 예외 던지기 | throw new IllegalArgumentException("bad"); |
| 제네릭 클래스 | class Box<T> { T value; } |
| 제네릭 메서드 | <T> T first(List<T> list) { ... } |
| 제한된 타입 | <T extends Number> |
가장 자주 쓰는 Java 문법, 컬렉션, 스트림 연산을 한 페이지에 담았습니다. 이 Java 치트시트는 Java를 작성하기 위한 빠른 참조 자료입니다 - 자료형, 제어 흐름, 클래스, ArrayList/HashMap 컬렉션, Streams API, 그리고 매일 사용하는 예외와 제네릭 패턴을 다룹니다.
여기 나오는 모든 내용은 표준 Java(Java 8 이상)이며 javac로 컴파일됩니다. 필요한 것을 복사하거나, Java 플레이그라운드에서 어떤 코드든 바로 실행해 보세요 - JDK를 설치할 필요가 없습니다.
Java 치트시트 자주 묻는 질문
이 Java 치트시트는 무료인가요?
네. 이 Java 치트시트는 완전히 무료이며 회원 가입이 필요 없습니다. 즐겨찾기에 추가해 두고 문법, 컬렉션, 스트림 연산을 찾아봐야 할 때마다 다시 방문하세요.
Java에서 ==와 .equals()의 차이는 무엇인가요?
객체의 경우
==는 참조를 비교합니다 - 두 변수가 정확히 같은 객체를 가리키는지 - 반면 .equals()는 내용을 비교합니다. 같은 텍스트를 가진 서로 다른 두 String 객체는 .equals()로는 같지만 ==로는 같지 않을 수 있습니다. 문자열과 다른 객체의 값 동등성을 비교할 때는 항상 .equals()를 사용하고, ==는 원시 타입(int, boolean 등)이나 null 확인에만 사용하세요.Java에서 스트림은 무엇에 쓰이나요?
Streams API(Java 8+)는 수동 반복문 대신 읽기 쉬운 연산 파이프라인 -
filter, map, sorted, reduce, collect - 으로 컬렉션을 처리할 수 있게 해줍니다. list.stream()으로 시작해 중간 연산을 연결하고, collect(Collectors.toList())나 forEach 같은 종단 연산으로 마칩니다. 데이터 변환 코드를 간결하고 표현력 있게 유지해 줍니다.Java를 온라인에서 연습할 수 있나요?
네. Java 플레이그라운드를 열어 이 치트시트의 어떤 코드든 브라우저에서 컴파일하고 실행해 보세요 - JDK를 설치할 필요가 없습니다. 체계적으로 배우고 싶다면, Coddy의 무료 인터랙티브 Java 강좌가 변수와 반복문부터 클래스, 컬렉션, 스트림까지 단계별로 안내합니다.
이 치트시트는 초보자에게 적합한가요?
네. 가장 흔한 구성 요소(타입, 제어 흐름, 메서드)부터 고급 요소(스트림, 제네릭, 예외)까지 순서대로 정리되어 있어, 첫날부터 상단 섹션을 사용하고 점차 나머지로 넓혀갈 수 있습니다.