CHAPTER 02. 변수와 상수
1. 변수란?
- What
변수란 값을 저장할 수 있도록 이름을 붙인 메모리 공간이다.
변수에 저장된 값은 프로그램 실행 중에 변경 가능하다. - Why
자바 프로그램에서 데이터를 임시로 저장하거나,
값을 반복해서 사용하고, 변경할 수 있도록 하려면 반드시 변수 개념이 필요하다. - How
int age; // 변수 선언 age = 20; // 값 할당(초기화) double pi = 3.14; // 선언과 동시에 초기화
(1) 변수의 선언과 초기화
- 선언: 변수의 타입과 이름을 지정해서 메모리 공간을 준비한다.
- 초기화: 변수에 처음으로 값을 저장하는 것.
- 중요: 지역 변수는 반드시 초기화 후 사용해야 한다(컴파일 오류 방지).
int number; // 변수 선언 number = 10; // 변수 초기화 int score = 90; // 선언과 동시에 초기화
(2) 데이터 타입 (Data Type)
- What
변수에 저장할 수 있는 값의 종류와 크기를 결정하는 정보. - Why
다양한 데이터(숫자, 문자, 논리 등)를 효율적으로 저장하고 정확하게 다루기 위해 필요하다. - How
자바의 데이터 타입은 크게 기본형(Primitive Type)과 참조형(Reference Type)으로 나뉜다.
① 기본형(Primitive Type)
| 분류 | 타입 | 크기 | 기본값 | 표현범위/특징 | 리터럴 예시 |
| 정수형 | byte | 1byte | 0 | -128 ~ 127 | 127 |
| short | 2byte | 0 | -32,768 ~ 32,767 | 32000 | |
| int | 4byte | 0 | -2,147,483,648 ~ 2,147,483,647 | 1000 | |
| long | 8byte | 0L | 아주 큰 정수, L 접미사 필요 | 100L | |
| 실수형 | float | 4byte | 0.0f | 소수점 약 7자리, f 접미사 필요 | 3.14f |
| double | 8byte | 0.0 | 소수점 약 15자리(기본 실수형) | 3.141592 | |
| 문자형 | char | 2byte | '\u0000' | 한 글자(유니코드 지원) | 'A', '가' |
| 논리형 | boolean | 1byte* | false | true/false만 저장 | true, false |
*boolean의 실제 크기는 JVM 구현에 따라 다름
주의
- 정수형은 오버플로우/언더플로우에 유의 (범위 넘으면 값이 원점으로 돌아감)
- char는 한 글자만 저장, 작은따옴표(') 사용
- boolean은 true/false만 저장, 0/1 불가
② 참조형(Reference Type)
- 배열, 클래스, 인터페이스, String 등
- 실제 데이터는 힙(Heap)에 저장, 변수에 저장되는 값은 "참조값(주소)"
- String은 참조형이고, 불변(immutable) 객체
String name = "홍길동"; int[] arr = new int[3];
(3) 형 변환 (Type Casting)
- 자동 형 변환 (작은 타입 → 큰 타입)
컴파일러가 자동으로 변환한다. int n = 10; double d = n; // int → double 자동 변환- 강제 형 변환 (큰 타입 → 작은 타입)
데이터 손실 가능성, 반드시 명시적 변환 필요. double pi = 3.14; int num = (int)pi; // double → int 강제 변환, 결과: 3- char ↔ int 변환
char ch = 'A'; int code = (int)ch; // 65 char ch2 = (char)66; // 'B'- 문자열 ↔ 숫자 변환
int i = Integer.parseInt("123"); String s = String.valueOf(123);
(4) 상수(Constant)의 선언
- What
한 번 저장하면 값을 바꿀 수 없는 공간/이름. - Why
변하지 않는 값(예: 원주율, 국가코드 등)을 실수로 바꾸지 않도록 보호. - How
final키워드 사용, 이름은 대문자+언더바 관례- 상수는 선언과 동시에 반드시 값을 할당해야 함(예외: 생성자에서만 가능)
- 값을 바꾸려고 하면 컴파일 오류
final double PI = 3.14159; final int MAX_USER = 100;
(5) 변수/상수의 범위(Scope)
- 변수는 선언된 블록({}) 안에서만 사용 가능
- 지역 변수(메서드 내 선언)는 반드시 초기화 후 사용,
멤버 변수(클래스 필드)는 자동 초기화
(6) 변수와 상수의 네이밍 규칙
- 변수: 의미 있는 영문 소문자, 카멜 표기법 (ex: studentScore)
- 상수: 모두 대문자, 단어 사이는 언더바 (ex: MAX_LENGTH)
- 숫자로 시작 불가, 예약어 사용 불가
(7) 핵심 포인트
- 지역 변수는 반드시 초기화 후 사용!
- 문자형(char)은 한 글자만 가능, String은 여러 글자
- 기본형은 값 자체, 참조형은 주소(참조값) 저장
- boolean은 true/false만 저장(0/1 불가)
- 상수(final)는 반드시 선언과 동시에 값 할당
- String 비교는 equals() 사용
CHAPTER 03. 연산자 (Operators)
1. 연산자란?
- What
연산자는 변수나 값에 대해 계산, 비교, 대입, 논리 판단, 조건 분기 등을 수행하는 기호(+, -, *, / 등) 또는 키워드(instanceof 등)이다. - Why
실제 프로그램에서 데이터를 처리(계산, 비교, 저장)하거나
흐름을 제어(조건/반복문에서 판단)하려면 꼭 필요하다.
연산자 없이 값만 다루면 의미 있는 동작(판단, 처리, 결정)을 할 수 없다. - How
int sum = 10 + 20; // 산술 연산자 + boolean isBig = sum > 10; // 비교 연산자 > int x = 3; x++; // 증감 연산자 ++
2. 연산자의 종류와 우선순위
- What
자바에는 산술, 대입, 비교, 논리, 조건, 증감, 비트, instanceof 등 다양한 연산자가 있다.
연산자마다 우선순위가 다르며, 먼저 계산되는 순서가 정해져 있다. - Why
다양한 데이터 상황(계산, 조건판단, 반복, 대입 등)에 맞게
적절한 연산자를 골라야 하고, 우선순위를 몰라서 결과가 다르게 나오는 실수를 방지해야 한다. - How
- 산술:
+,-,*,/,% - 비교:
<,>,<=,>=,==,!= - 논리:
&&,||,! - 대입:
=,+=,-=,*=,/=,%= - 증감:
++,-- - 조건(삼항):
조건식 ? 값1 : 값2 - instanceof:
참조변수 instanceof 클래스명 - 비트:
&,|,^,~,<<,>>,>>> - 우선순위: () → 단항(++ -- !) → 산술(* / %) → 산술(+ -) → 비교 → 논리 → 대입
int result = 3 + 4 * 2; // *가 +보다 우선: 3 + (4*2) = 11 boolean check = (a > 5) && (b < 10); // 괄호로 우선순위 명확히! - 산술:
3. 산술 연산자
- What
숫자 타입 데이터의 덧셈, 뺄셈, 곱셈, 나눗셈, 나머지 연산을 한다:+,-,*,/,% - Why
점수 합계, 평균, 통계, 금액 계산 등
거의 모든 프로그램에서 수치 연산이 필요하기 때문. - How
int a = 10, b = 3; int sum = a + b; // 13 int sub = a - b; // 7 int mul = a * b; // 30 int div = a / b; // 3 (정수/정수는 정수, 소수점 버림) int mod = a % b; // 1 (나머지) double avg = (a + b) / 2.0; // 실수 연산 결과 실수- 초보 주의
- 정수/정수 나눗셈은 소수점 이하 버림, 실수 연산은 결과도 실수
- 0으로 나누면 ArithmeticException(런타임 오류) 발생
4. 단항 연산자 (부호, 증감, 논리 부정)
(1) 부호 연산자(+, -)
- What
수의 부호를 바꾼다 - Why
음수/양수 변환, 입력값의 부호 제어에 필요 - How
int x = -7; int y = +x; // -7 int z = -x; // 7
(2) 증감 연산자(++/--)
- What
변수의 값을 1 증가(++), 1 감소(--)시킨다
전위(++a), 후위(a++) 구분 - Why
반복문(카운트), 배열 탐색 등에서 가장 많이 쓰임 - How
int a = 5; int b = ++a; // a=6, b=6 (전위: 증가 후 사용) int c = a++; // c=6, a=7 (후위: 사용 후 증가)
(3) 논리 부정 연산자(!)
- What
true/false 값을 반대로 바꿈 - Why
조건을 뒤집어 처리할 때 필요(예: “참이 아니면”) - How
boolean flag = false; flag = !flag; // true
5. 비교 연산자
- What
두 값의 대소, 등가를 비교해 true/false 반환:<,>,<=,>=,==,!= - Why
조건문, 반복문, 필터링 등에서
값의 관계를 판단해야 분기/반복이 가능하다. - How
int a = 10, b = 20; boolean isSmaller = a < b; // true boolean isEqual = a == b; // false- 주의
- 참조형(문자열 등)은 ==이 주소(참조값) 비교,
값 비교는 반드시 equals() 사용 - 부동소수점(double, float) == 비교는 신중(정확도 문제)
- 참조형(문자열 등)은 ==이 주소(참조값) 비교,
6. 논리 연산자 (&&, ||, !)
- What
여러 조건을 논리적으로 결합(true/false 판단):- AND:
&&(모두 참) - OR:
||(하나라도 참) - NOT:
!(반대)
- AND:
- Why
복합 조건(“20대이면서 여성”, “합격이거나 특별전형”) 등
현실 세계의 다양한 조건 구현에 필수 - How
boolean adult = (age >= 20) && (age < 65); boolean special = (age < 10) || (age > 65); boolean notAdult = !adult;- 주의
&&,||는 단락 평가(앞에서 결과 확정 시 뒤 조건 미평가)&,|는 비트 연산(논리 연산에도 사용 가능, 단락 평가 X)
7. 대입 연산자
- What
값을 변수에 저장하거나, 연산 후 저장(복합 대입):=,+=,-=,*=,/=,%= - Why
변수 값을 누적, 갱신, 반복적으로 처리할 때 편리하다. - How
int a = 10; a += 5; // a = a + 5; → 15 a *= 2; // a = a * 2; → 30
8. 조건(삼항) 연산자
- What
조건식 ? 값1 : 값2
조건이 참이면 값1, 아니면 값2를 선택 - Why
간단한 if-else를 한 줄에 쓸 때
가독성과 코드 간결성을 높인다. - How
int max = (a > b) ? a : b; String grade = (score >= 90) ? "A" : "B";
9. instanceof 연산자
- What
객체가 특정 클래스(또는 부모)의 인스턴스인지 검사 - Why
다형성/타입 변환/예외 처리 등에서
안전하게 객체의 타입을 확인해야 할 때 필수 - How
Object obj = "hello"; if (obj instanceof String) { String s = (String)obj; // 안전하게 사용 }
10. 비트 연산자
- What
정수 값을 2진수(비트) 단위로 직접 조작:~,&,|,^,<<,>>,>>> - Why
하드웨어 제어, 효율적 데이터 관리,
권한/상태 플래그 등 특수한 상황에서 꼭 필요하다. - How
int n = 5; // 0000 0101 int m = ~n; // 1111 1010 int l = n << 1; // 0000 1010 (왼쪽 쉬프트, 5*2=10)
11. 포인트
- 연산자 종류별(산술, 비교, 논리, 대입, 증감, 조건, instanceof, 비트) What/Why/How 구분
- 우선순위와 괄호의 중요성(실수 방지)
- 문자열(참조형)은 ==이 아니라 equals()로 비교하는 이유
- 전위/후위 증감 연산자 차이
- 논리 연산자 단락 평가와 일반 &| 차이
- 조건(삼항) 연산자와 if-else의 차이
- instanceof, 비트 연산자는 실전에서 언제 필요한지
[예상 주관식 문제 예시]
- 자바 연산자 종류별로 What/Why/How를 설명하시오.
- ==와 equals의 차이(Why 포함), 예시와 함께 쓰시오.
- 증감 연산자의 전위/후위 차이와 실제 예시(Why 포함)를 쓰시오.
- 논리 연산자(&&, ||, !)가 실제로 왜 필요한지 예시로 설명하시오.
- 우선순위 실수 방지법(Why 괄호가 필요한지 포함)을 설명하시오.
CHAPTER 04. 제어문 (Control Statements)
1. 제어문이란?
- What
프로그램의 실행 순서(흐름)를 바꾸거나 반복하는 명령문.
대표적으로 조건문(if, switch)과 반복문(for, while, do~while)이 있다. - Why
단순히 위에서 아래로만 실행되면 복잡한 프로그램을 만들 수 없다.
조건에 따라 실행을 분기하거나, 반복해서 처리해야 현실 세계를 효과적으로 모델링할 수 있다.
2. 조건문 (if, switch)
(1) if문
- What
주어진 조건이 true일 때만 특정 코드 블록을 실행한다. - Why
상황에 따라 다르게 동작하는 프로그램(예: “점수가 60점 이상이면 합격”)을 만들 때 필수다. - How
if (score >= 60) { System.out.println("합격"); }
(2) if-else문
- What
조건이 true면 if 블록, false면 else 블록을 실행한다. - Why
두 가지 경우(예: 합격/불합격, 참/거짓 등)를 나누어 처리할 때 필요하다. - How
if (score >= 80) { System.out.println("우수"); } else { System.out.println("노력"); }
(3) if-else if문
- What
여러 가지 조건을 차례대로 검사한다. - Why
3가지 이상으로 분기(등급, 가격대 등)해야 할 때 사용한다. - How
if (score >= 90) { System.out.println("수"); } else if (score >= 80) { System.out.println("우"); } else { System.out.println("가"); }
(4) 중첩 if문
- What
if문 안에 또 if문이 들어가는 형태. - Why
조건이 계층적(여러 단계로 나뉘는) 상황(예: 로그인했을 때만 관리자 검사)에 필요하다. - How
if (login) { if (admin) { System.out.println("관리자입니다"); } }
(5) switch문
- What
변수(정수, 문자, 문자열 등)의 값에 따라 여러 갈래로 분기하는 조건문. - Why
조건이 많고, 값이 딱 떨어지는 경우(예: 학점, 메뉴 선택 등)에 if문보다 더 간결하고 가독성이 높다. - How
switch (grade) { case 'A': System.out.println("최우수"); break; case 'B': System.out.println("우수"); break; default: System.out.println("노력"); }- 초보 주의
- break를 빼먹으면 아래 case도 계속 실행됨(fall-through)
- 자바 7부터 문자열도 분기 가능
- case에는 상수(리터럴, final 변수)만 사용 가능
3. 반복문 (for, while, do~while)
(1) for문
- What
반복 횟수가 정해진 반복문.
초기식, 조건식, 증감식으로 구성되어 있다. - Why
인덱스를 이용한 반복, 배열/리스트 전체 처리 등
반복 횟수가 명확한 경우에 빠르고 간결하게 반복 처리가 가능하다. - How
for (int i = 0; i < 5; i++) { System.out.println(i); }
(2) while문
- What
조건식이 true인 동안 계속 반복하는 반복문. - Why
반복 횟수를 미리 알 수 없고,
조건이 만족될 때까지 무한히 반복하는 상황(사용자 입력 등)에 적합하다. - How
int i = 0; while (i < 5) { System.out.println(i); i++; }
(3) do~while문
- What
조건에 상관없이 최소 1번은 반드시 실행되고,
그 다음부터 조건을 검사해 반복하는 반복문. - Why
사용자 입력 등 반드시 1회 이상 실행해야 하는 상황에서 유용하다. - How
int i = 0; do { System.out.println(i); i++; } while (i < 5);
(4) break / continue문
- break
- What: 반복문(또는 switch문) 전체를 즉시 종료한다.
- Why: 조건에 따라 반복을 즉시 멈추고 다음 코드로 넘어가야 할 때 필요하다.
- How:
for (int i = 0; i < 5; i++) { if (i == 2) break; // i가 2가 되면 반복 종료 System.out.println(i); }
- continue
- What: 현재 반복을 건너뛰고, 다음 반복을 바로 시작한다.
- Why: 불필요한 작업을 건너뛰고, 반복 조건만 유지하고 싶을 때 사용한다.
- How:
for (int i = 0; i < 5; i++) { if (i == 2) continue; // i==2일 때만 건너뜀 System.out.println(i); }
- 초보 주의
- break와 continue는 가장 가까운 반복문(블록)만 영향을 준다.
- 중첩 반복문에서는 한 단계만 탈출/건너뜀.
4. 포인트
- if문, switch문, for/while/do~while문의 차이와 각각의 적합한 사용 상황(Why)
- switch문의 break, case에는 상수만(Why)
- for문은 반복 횟수 명확, while문은 조건만족 반복, do~while은 최소 1회 실행(Why)
- break와 continue의 차이, 작동 범위(Why 반복문을 부분적으로/즉시 제어해야 하는지)
- 중첩문에서 break/continue의 동작(한 단계만 영향, Why)
- 조건문/반복문에서 변수의 유효 범위(scope, Why 변수 오염/오류 방지에 중요한지)
'JS' 카테고리의 다른 글
| 2~3장 예상 문제 (0) | 2025.05.12 |
|---|---|
| [25.05.09 롤링 대비] 5장 배열~6장 클래스 (0) | 2025.05.09 |
| 전체 반복 구조 (구구단 틀)/System.out.printf과 System.out.println의 차이 (0) | 2025.05.01 |
| [시험대비JS] 탭 2 (forEach) X -> 카드 한장 전용. 중지. (0) | 2025.04.26 |
| [시험대비JS] 탭 1(통과) (0) | 2025.04.25 |