C
Java/기초/Lesson 03

Java 변수·자료형·제어문 — 진짜 시작점

45분·theory

Java 변수·자료형·제어문 — 진짜 시작점

🎯 이 lesson 을 읽고 나면

이 lesson 을 다 읽고 나면 아래 3가지를 자신 있게 할 수 있습니다.

  • ✅ 8개 기본 자료형 중 실무에서 쓰는 4개 (int/double/boolean/char) 차이
  • ✅ for-each · for · while · switch 중 언제 무엇 을 쓰는지
  • ✅ 정수 나눗셈 함정 + 타입 캐스팅 (int) double 의 truncate 동작 설명

학습 목표를 체크리스트로 두고 다 답할 수 있게 되면 lesson 을 닫으세요.

8개 기본 자료형 — 다 외울 필요 없습니다

Java 는 2가지 분류 가 있습니다

  • 기본형 (primitive) — 실제 값을 담는 타입. 8종류.
  • 참조형 (reference) — 객체의 주소를 담는 타입. String, 배열, 클래스 등.

기본형 4개만 외우면 됩니다: int, double, boolean, char.

기본형 8가지 — 표 한 장으로

타입크기범위언제 쓰나
byte1바이트-128 ~ 127거의 안 씀. 바이너리 처리만.
short2바이트±3만거의 안 씀.
int4바이트±21억정수의 기본값. 거의 다 이걸로.
long8바이트±900경int 범위 넘는 큰 수 (예: 타임스탬프).
float4바이트소수 7자리정밀도 부족. 거의 안 씀.
double8바이트소수 15자리소수의 기본값.
boolean1비트true/false참/거짓.
char2바이트한 글자글자 1개 ('A').

결론: 처음엔 int·double·boolean·char 만 알면 됩니다.

선언과 할당

java
int age = 30;
double height = 175.5;
boolean isStudent = true;
char grade = 'A';
String name = "임동근";   // String 은 참조형이지만 자주 씁니다

= 는 "같다" 가 아니라 "넣어라" 의 뜻. 오른쪽 값을 왼쪽 변수에 대입 합니다.

출력 — println vs printf

java
System.out.println("이름: " + name);          // 줄바꿈 포함
System.out.print("한 줄에 ");                 // 줄바꿈 없음
System.out.printf("나이: %d세, 키: %.1fcm%n", age, height);  // C 스타일 포맷팅

%d = 정수, %f = 소수, %s = 문자열, %n = 줄바꿈. 옵션 %.1f소수점 1자리.

타입 캐스팅 — int 와 double 사이 변환

자동 변환 (암묵적)

작은 타입 → 큰 타입 은 알아서 변환됩니다.

java
int a = 10;
double b = a;    // 10 → 10.0 자동 변환
System.out.println(b);  // 10.0

강제 변환 (명시적)

큰 타입 → 작은 타입명시적 캐스팅 필요. 데이터 손실 가능성을 알리려는 거죠.

java
double pi = 3.14;
int x = (int) pi;     // 3 — 소수점 잘림 (반올림 X)
System.out.println(x);

괄호 안에 어떤 타입으로 바꿀지 명시. 반올림이 아니라 잘라냅니다 (truncate)3.993 이 됩니다.

흔한 함정 — 정수 나눗셈

java
int a = 5, b = 2;
System.out.println(a / b);          // 2  (정수끼리 나누면 정수)
System.out.println((double) a / b); // 2.5 (한 쪽이라도 double 이면 결과 double)

가장 흔한 버그. 정수만 나누면 소수점 버려진 결과가 나옵니다.

if · switch · 반복문 — 한 페이지 정리

if / else

java
int score = 85;
if (score >= 90) {
    System.out.println("A");
} else if (score >= 80) {
    System.out.println("B");   // 출력됨
} else {
    System.out.println("C");
}

조건은 boolean 이어야 합니다. C 처럼 if (x) 식으로 0/1 을 쓸 수 없어요.

switch — 값 비교가 많을 때

Java 14+ 부터는 화살표 문법 이 깔끔합니다.

java
String day = "MON";
String korDay = switch (day) {
    case "MON", "TUE", "WED" -> "주중";
    case "SAT", "SUN"        -> "주말";
    default                  -> "모름";
};

옛 문법 (Java 13 이하) 은 break 빼먹으면 다음 case 까지 흘러내려 가는 함정이 있었습니다 — 신규 코드는 화살표 문법 쓰세요.

for — 횟수가 정해진 반복

java
for (int i = 0; i < 5; i++) {
    System.out.println(i);    // 0, 1, 2, 3, 4
}

순서는 초기화 → 조건검사 → 본문 → 증감 → 조건검사 .... 이걸 생애주기 라고 부릅니다.

while / do-while — 조건만 있을 때

java
int n = 0;
while (n < 3) {       // 먼저 조건 확인
    System.out.println(n++);
}

do {                   // 일단 한 번 실행 후 조건
    System.out.println("적어도 한 번은 실행");
} while (false);

do-while무조건 한 번 실행 후 조건을 봅니다. 실무에선 거의 안 씁니다.

예제 — 1 ~ 100 합

java
int sum = 0;
for (int i = 1; i <= 100; i++) {
    sum += i;
}
System.out.println(sum);   // 5050

배열 — 같은 타입 여러 개를 한 묶음

배열 선언과 초기화

java
int[] arr = new int[5];          // 길이 5, 모두 0 으로 초기화
int[] nums = {10, 20, 30, 40};   // 값과 함께 선언
String[] names = {"김", "이", "박"};

int[] 가 "int 배열" 타입입니다. int arr[]C 스타일 도 가능하지만 권장 X.

접근 — 인덱스는 0 부터

java
int[] nums = {10, 20, 30};
System.out.println(nums[0]);    // 10
System.out.println(nums[2]);    // 30
nums[1] = 999;                  // 수정
System.out.println(nums[1]);    // 999

인덱스를 벗어나면 ArrayIndexOutOfBoundsException가장 자주 만나는 런타임 에러 입니다.

길이 — .length

java
int[] nums = {10, 20, 30};
for (int i = 0; i < nums.length; i++) {
    System.out.println(nums[i]);
}

.length괄호 없는 필드 입니다 (length() 가 아닙니다). String 의 length() 와 헷갈리지 마세요.

for-each — 더 간결한 반복

java
int[] nums = {10, 20, 30};
for (int n : nums) {
    System.out.println(n);
}

인덱스가 필요 없을 때 이게 가독성 압도적. 다만 인덱스를 알 수 없으니 수정 작업엔 일반 for 가 낫습니다.

2차원 배열

java
int[][] grid = {
    {1, 2, 3},
    {4, 5, 6}
};
System.out.println(grid[1][2]);   // 6 — 1행 2열

게임 보드·매트릭스에서 자주. 실무에선 대부분 ArrayList 를 쓰지만 알고리즘 문제엔 배열이 빠릅니다.

다음 학습

변수·제어문·배열 — 여기까지가 모든 Java 코드의 기본 재료 입니다. 이제 다음 챕터 OOP 에서 "왜 클래스로 묶어야 하는가" 를 만나게 됩니다.

☕ 직접 실행 — 변수 · 자료형 · 연산 · 제어문

기본형 8가지 + 제어문을 한 번에 실행. 값을 바꿔가며 결과 확인.
☕ Java
✏️ 코드 편집기
📟 출력 결과
▶ 실행하기 버튼을 눌러보세요
💡 코드를 직접 수정하고 실행해보세요. 변수값을 바꾸거나 println을 추가해 결과를 확인하세요!
☁️ Judge0 API로 서버에서 실행 — Java / Python / JS / C++ 지원

🤖 AI 에게 이렇게 요청해보세요

이 lesson 의 개념을 알면 AI 에게 구체적으로 지시할 수 있습니다. 막연한 "고쳐줘" 가 아니라 어휘를 가진 요청 — 그게 토큰 절약의 출발점입니다.

  • "이 Java 코드의 int 와 long, float 과 double 사용을 적절히 교정해줘"
  • "이 for 루프를 향상된 for-each 로 바꿔줘"
  • "이 if-else 체인을 switch 표현식 (Java 14+) 으로 리팩토링해줘"

왜 이게 토큰을 줄이나

개념을 모를 땐 AI 답변을 받고도 "그게 뭐예요?" 를 다시 물어야 합니다. 그 "다시 물음" 이 토큰을 잡아먹습니다. 개념 한 번 익혀두면 대화가 한 번에 끝납니다.

Java 변수·자료형·제어문 — 진짜 시작점 - Java