목차
1. Chapter 1 - 4 : 변수 (Variable)
수업 목표
● 변수(Variable)에 대해서 학습합니다.
● 자료형(Data type)이 무엇인지 학습합니다.
● 형변환(Casting)이 무엇인지 학습합니다.
1. 변수
- 데이터를 컴퓨터에 저장하기 위한 공간.
- Java에서 데이터를 활용하고 보관하기 위해 변수에 담아 관리함.
* 변수의 구조
[자료형][변수이름][세미콜론]
Ex) int a;
* 세미콜론(;)
- Java에서 문장을 끝내는 마침표.
- 문장이 끝났다는 것을 컴퓨터에 알려주며 세미콜론이 없으면 오류가 발생함.
* 변수 이름 규칙
- 프로그램의 유지 보수를 위해 올바른 변수명을 잘 지켜서 사용해야함.
- 가독성을 위해 카멜케이스 권장.
- 명사 형태로 사용하는 것이 좋음.
- 특수 문자는 사용하지 않는 것이 좋음.
규칙 | 나쁜 예시 | 좋은 예시 |
숫자로 시작할 수 없음 | ❌ 1stCar | ✅ car1 |
공백 사용 불가 | ❌ my car | ✅ myCar |
예약어 사용 불가 | ❌int, ❌class, ❌true | |
특수문자는 (_, $ )사용가능 |
* 변수 활용
1. 변수 선언
■ "변수를 선언한다" : 데이터 저장 공간을 만드는 것.
int a;
int b;
2. 변수에 값 할당
■ 선언된 a 변수에 값을 할당.
// a 는 변수 이름(Variable)
// 1은 리터럴(literal)
a = 1;
3. 선언과 동시에 값 할당
■ 변수를 선언하면서 동시에 값을 할당.
int c = 3;
* 초기화(initialization) : 처음으로 데이터 초기값을 설정하는 것.
4. 기존 변수에 데이터 재할당(reassign)
■ 변수는 재사용 가능.
■ 기존 변수에 값을 재할당 시, 값이 덮어씌워짐.
c = 4; //(1)
c = 5; //(2)
c = 6; //(3)
∴ C의 값은 6이 됨.
5. 변수에 변수를 할당
■ 변수에 직접 미리 선언된 변수를 할당 가능.
■ 데이터가 복사되어 할당되는 것.
int d = 1;
int e = d;
d = 10;
System.out.println("e = " + e); // 정답 1
2. 자료형(Data Type)
- 메모리를 사용하는 단위.
- 자료형은 데이터의 크기를 결정하는 규칙.
- 변수 이름으로는 데이터의 위치를 표현하고, 자료형으로는 데이터의 크기 표현.
자료형 | 종류 | 범위 | 바이트 | 비트 |
boolean | 논리형 | true/false | 1 | 8 |
char | 문자형 | 0 ~ 65535 유니코드 값 | 2 | 16 |
byte | 정수형 | -128 ~ 127 | 1 | 8 |
short | 정수형 | -32,768 ~ 32,767 | 2 | 16 |
int | 정수형 | -2,147,483,648 ~ 2,147,483,647 | 4 | 32 |
long | 정수형 | -9,233,372,036,854,775,808 ~ 9,233,372,036,854,775,807 | 8 | 64 |
float | 실수형 | 약 소수점 6~7자리까지 | 4 | 32 |
double | 실수형 | 약 소수점 15~17자리까지 | 8 | 64 |
* float와 double의 형 범위를 "약" 이라고 표현한 이유
- IEEE 754 부동소수점 표현 방식 때문. Java의 float 와 double은 2진수 기반의 부동소수점으로 저장되며, 이는 10진수에서 정확한 자릿수를 보장하지 못하는 경우가 있기 때문.
* 변수의 선언과 메모리 할당
- 컴퓨터에서 메모리는 1바이트 주소로 관리됨.
- 변수 이름으로 데이터의 위치를 나타내고, 자료형으로 데이터의 크기를 나타냄.
int a = 10; // 4 바이트 크기의 a 변수에 정수형 데이터 10을 넣어 초기화.
int b; // 4바이트 크기의 b 변수에 어떤 값이 저장되 있는지 알 수 없음.
[실습]
package chapter1.variable;
public class Main {
public static void main(String[] args) {
// [자료형] [변수명];
int a;
a = 1;
a = 2;
//sout = System.out.println()
//soutv -> 위에 선언한 변수를 바로 출력문 작성해줌.
System.out.println("a = " + a);
}
}
// 논리형
boolean booleanBox = true;
System.out.println("booleanBox = " + booleanBox);
3. 형변환(Casting)
- 변수의 자료형을 다른 자료형으로 변경하는 것.
- 업캐스팅(UpCasting)
- 다운캐스팅(DownCasting)
형 변환 종류 | 형변환 방식 | 자동 형 변환 여부 | 설명 |
다운캐스팅(DownCasting) | 명시적(Explicit) | ❌ | 큰상자 → 작은상자 |
업캐스팅(UpCasting) | 묵시적(Implicit) | ✅ | 작은상자 → 큰상자 |
* 다운캐스팅(DownCasting)
- 명시적 형변환(Explicit Casting)
- 큰 데이터를 작은 상자에 넣어야하기 때문에 강제로 형 변환 시켜야함.
- 강제로 형 변환 시, 명시적(int)로 변환시켜야함.
- 큰 데이터를 작은 상자에 넣었기 때문에 데이터 손실 발생.
// 다운캐스팅 : 큰 데이터 -> 작은 상자
//변환할 자료형을 변수명 앞에 () 혈태로 넣어주기.
// 큰 데이터를 작은 상자에 넣는 과정에서 데이터 손실 발생 가능.
double bigBox = 10.123;
int smallBox = (int)bigBox; // ✅ int <- double 명시적변환
System.out.println("smallBox = " + smallBox); // ✅ 출력: 10 !데이터손실발생!
* 업캐스팅(UpCasting)
- 묵시적 형 변환(Implicit Casting)
- 작은 데이터를 큰 상자에 옮겨담는 것.
- 문제가 발생하지 않기 때문에 자동으로 변경됨.
- 데이터 손실 없음.
int smallBox = 10;
double bigBox = smallBox; // ✅ double <- int 자동형 변환
System.out.println(bigBox); // ✅ 출력: 10.0
* 실무에서 자주 활용되는 변수 종류(중요)
1. 문자열 표현
■ 문자열 자료형의 첫글자는 대문자.
■ " "로 문자열 데이터를 나타냄.
String stringBox = "문자열을 표현할 수 있습니다.";
문자 VS 문자열
char a = 'a';
String str = "abc";
2. 정수 표현
int intBox = 1;
long longBox = 1;
3. 논리 표현
boolean booleanBox = false;
[퀴즈]
💬 Q1. 변수 이름으로 사용할 수 없는 것은?
- true
- car123
- myCar
- _car
✅ 1. ‘true’
Java의 예약어(‘true’, ‘int’, ‘if’, ‘class’ 등)는 변수 이름으로 사용할 수 없습니다.
💬 Q2. 변수 이름을 만들 때 올바른 규칙은?
- 변수 이름은 숫자로 시작할 수 있다.
- 변수 이름에는 공백(띄어쓰기)이 포함될 수 있다.
- 변수 이름에는 특수문자(@, #, !) 를 사용할 수 있다.
- 변수 이름은 영문자, 숫자, 언더스코어(_), $만 사용할 수 있다.
✅ 4. 변수 이름은 영문자(a-z, A-Z), 숫자(0-9), _, $만 사용 가능
숫자로 시작할 수 없음! ❌ → 1stPlace (오류!)
띄어쓰기 포함 불가! ❌ → my car (오류!)
특수문자 사용 불가! ❌ → @car, car#name, speed!limit (오류!)
💬 Q3. 다음 중 변수 이름으로 사용해도 되는 것은?
- myVariable
- int
- 1stPlace
- hello-world
✅ 1. myVariable
변수이름은 첫글자는 소문자 그리고 카멜케이스를 사용을 권장합니다.
💬 Q4. 같은 이름을 가진 변수를 같은 중괄호{} 안에 생성할 수 있을까요?
❌ 같은 중괄호{} 안에서 불가능
{ int number = 10; int number = 20; // 오류! 같은 블록에서 같은 이름의 변수 선언 불가 } |
✅ 해결 방법: 변수명을 다르게 하거나, 값을 바꿀 때는 =를 사용!
{ int number = 10; number = 20; // 올바른 코드 (값만 변경) } |
Q5. 다음 변수 선언이 잘못된 것들은?(여러 개 선택)
a. int num = 10; b. double price = 19.99; c. String name = 'Steve'; d. boolean isAvailable = "true"; e. char grade = 'AB'; |
✅ c. String 문자열 자료형 변수에는 쌍따옴표 "" 를 값에 사용해야합니다.
String name = "Steve"; |
✅ d. boolean 은 “true” 문자열 데이터를 저장할 수 없습니다.(쌍따옴표는 문자열)
boolean isAvailable = true; |
✅ e. char 캐릭터 자료형 변수에는 문자 하나만 저장할 수 있습니다.
char grade = 'A'; |
2. Chapter 1 - 5 : 입출력 - 프로그램과 사용자 간의 대화
수업 목표
● 입력과 출력 개념을 학습합니다.
● 입력과 출력 방법을 학습하고, 실습해 봅니다.
1. 입출력
1. 출력(Output)
- 컴퓨터가 결과를 콘솔화면에 보여주는 것.
System.out.println("안녕하세요!");
* 출력 방법
1. 출력 후 자동으로 줄 바꿈
System.out.println("Hello");
System.out.println("Java!");
// 출력결과:
Hello
Java!
2. 줄 바꿈 없이 출력
System.out.print("Hello");
System.out.print(" Java! ");
// 출력결과:
Hello Java!
* 개행문자 ( \n )
- 줄바꿈을 의미하는 문자.
- 개행문자 출력 시 줄바꿈 기능 수행.
System.out.println("Hello\nWorld!");
// 출력결과:
Hello
World!
* 출력방법 정리
출력 방법 | 설명 |
System.out.print() | 줄 바꿈 없이 출력 |
System.out.println() | 출력 후 줄 바꿈 |
2. 입력(Input)
- 데이터를 읽을 때 객체(Scanner) 사용.
- 출력 시에도 객체를 사용하는데, System이 출력을 도와주는 객체.
* 입력방법
1. Scanner 객체 소환
Scanner scanner = new Scanner(System.in);
2. 문자열 입력받기
scanner.nextLine();
3. 숫자 입력받기
scanner.nextInt()
scanner.nextDouble()
scanner.nextLong()
[퀴즈 및 실습과제]
Q1. 다음 코드의 출력 결과는?
System.out.println("Java\nis\nfun!");
A)
Java is fun |
\n 은 개행문자임으로 각 단어가 한 줄씩 출력 됩니다.
[실습과제]
package chapter1.io;
import java.util.Scanner;
public class UserInfoPrinter {
public static void main(String[] args) {
// TODO: 사용자로부터 이름을 입력받기
Scanner scanner = new Scanner(System.in);
System.out.print("이름을 입력하세요: ");
String name = scanner.next();
// TODO : 사용자로부터 나이를 입력받기
System.out.print("나이를 입력하세요: ");
int age = scanner.nextInt();
// TODO : 입력받은 값 출력
System.out.println("출력 결과: ");
System.out.println("이름: " + name);
System.out.println("나이: " + age);
}
}

3. Chapter 1 - 6 : 연산자 - 계산의 시작
수업 목표
● 연산자가 무엇인지 학습합니다.
● 연산자의 우선순위를 학습합니다.
● 문자열을 비교하는 방법을 학습합니다.
1. 산술 연산자
1) 기본적인 사칙 연산
int a = 10;
int b = 3;
// 기본 사칙연산
int sum = a + b;
System.out.println("sum = " + sum);
int sub = a - b;
System.out.println("sub = " + sub);
int mul = a * b;
System.out.println("mul = " + mul);
2) 기본적인 사칙 연산
- 정수끼리 나누게 되면 소수점이 버려짐.
- 소수점을 유지하려면 소수점과 연산시켜야함.
int a = 10;
int b = 3;
...
int div = a / b;
System.out.println("div = " + div); // ⚠️ 3 (소수점 버려짐)
double div2 = a / 3.0;
System.out.println("div2 = " + div2); // ✅ 3.333... (소수점 유지)
3) 모듈러 연산자(나머지 연산)
- 모듈러(%) 연산자는 나머지를 구할 때 유용함.
int mod = 10 % 3;
System.out.println("mod = " + mod); // 나머지: 1
int mod2 = 15 % 4;
System.out.println("mod2 = " + mod2); // 나머지: 3
int mod3 = 20 % 7;
System.out.println("mod3 = " + mod3); // 나머지: 6
* 모듈러 연산의 활용
- 시간 연산
(10 + 5) % 12 = 3
- 짝수/홀수 판별
6 % 2 = 0; // 짝수
7 % 2 = 1; // 홀수
2. 대입 연산자
1) 대입 연산자(=)
- 변수에 값을 할당할 때 사용.
- 연산자 중에 제일 마지막에 수행됨.
2) 복합 대입 연산자(+=, -=, *=, /=, %=)
- 누적값을 구할 때 자주 활용됨.
- num이 5일 때 num += 3; 의 의미는 num = num + 3; 임.
- num + 3 이 먼저 연산되고 대입됨.(대입 연산자는 제일 마지막에 수행!)
3. 증감 연산자
1) 증감연산자의 활용
■ 변수를 1 증가(++) 또는 1 감소(--) 시킬 때 사용.
■ 전위 연산(++i) 과 후위 연산(i++)의 차이가 있기 때문에 개념을 정확히 이해하는 것이 중요.
■ 전위연산은 연산 후 사용.
■ 후위연산은 사용 후 연산.
2) 전위 연산 VS 후위 연산
■ 전위 연산(++i)
- 연산 후 값이 사용됨.
int a = 5;
System.out.println("++a: " + (++a)); // 6 (먼저 증가 후 출력)
System.out.println("현재 a 값: " + a); // 6
■ 후위 연산(i++)
- 값이 사용된 후 연산됨.
int b = 5;
System.out.println("b++: " + (b++)); // 5 (출력 후 증가)
System.out.println("현재 b 값: " + b); // 6
4. 비교 연산자
1) 같음 연산자(==)
■ 두 값이 같으면 true, 다르면 false를 반환.
System.out.println("10 == 10: " + (10 == 10)); // true
2) 다름 연산자(!=)
■ 두 값이 다르면 true, 같으면 false를 반환.
System.out.println("10 != 5: " + (10 != 5)); // true
3) 크기 비교 연산자(>, <, <=, >=)
■ 양쪽의 값을 비교했을 때 논리에 맞으면 true 반환.
■ 논리에 어긋나면 false 반환.
System.out.println("10 < 5: " + (10 < 5)); // false
System.out.println("10 >= 10: " + (10 >= 10)); // true
System.out.println("10 <= 5: " + (10 <= 5)); // false
연산자 | 설명 | 예제 | 결과 |
== | 두 값이 같으면 true | 10 == 10 | true |
!= | 두 값이 다르면 true | 10 != 5 | true |
> | 왼쪽 값이 크면 true | 10 > 5 | true |
< | 왼쪽 값이 작으면 true | 10 < 5 | false |
>= | 왼쪽 값이 크거나 같으면 true | 10 >= 10 | true |
<= | 왼쪽 값이 작거나 같으면 true | 10 <= 5 | false |
5. 논리 연산자
1) AND 연산자(&&)
■ 두 조건이 모두 참일 때 true 반환.
2) OR 연산자(||)
■ 둘 중 하나라도 참이면 true 반환.
1) NOT 연산자(!)
■ true일 때 false로, false일 때 true로 변경함.
연산자 | 설명 | 예제 | 결과 |
&& (AND) | 두 조건이 모두 참일 때만 true | true && true | true |
true && false | false | ||
false && true | false | ||
|| (OR) | 하나라도 참이면 true | true || true | true |
true || false | true | ||
false || true | true | ||
false || false | false | ||
! (NOT) | 참이면 거짓, 거짓이면 참으로 변경 | !true | false |
!false | true |
6. 연산자 우선순위
- 우선순위가 헷갈린다면 괄호()를 적극적으로 사용할 것.
1. 산술 연산자 우선순위
- 기본적인 수학 사칙연산 우선순위 적용.
2. 기본 연산자 우선순위
- 산술 → 비교 → 논리 → 대입.
3. 비교 연산자와 산술 연산자의 우선순위
- 산술 → 비교
4. 논리 연산자 우선순위
- ! 가 제일 먼저 연산되고, 두번째로 &&, 마지막으로 ||
* 문자열 비교
- 실무에서 문자열을 비교할 때 == 를 사용하는 경우는 거의 없음.
- 문자열 비교는 항상 .equals() 를 활용할 것! (동등성/동일성 문제)
- == 는 문자열 값을 비교하는 것이 아니라 메모리 주소를 비교하는 방식이기 때문
[실습 과제]
💬 Q1. 산술 연산자 문제
두 개의 정수 a 와 b 가 주어졌을 때 두 수의 합, 차, 곱, 나누기 결과를 변수에 저장하는 출력하는 프로그램을 작성하세요.(%모듈러 연산도 포함하세요)
public class Main { public static void main(String[] args) { int a = 15; // 값 할당 필요 int b = 4; // 값 할당 필요 // 1. 더하기 // 1. 더하기 결과 출력 int sum = a + b; System.out.println("덧셈 결과: " + sum); // 2. 빼기 // 2. 빼기 결과 출력 int sub = a - b; System.out.println("뺄셈 결과: " + sub); // 3. 곱하기 // 3. 곱하기 결과 출력 int mul = a * b; System.out.println("곱셈 결과: " + mul); // 4. 나누기 // 4. 나누기 결과 출력 int div = a / b; System.out.println("나눗셈 결과: " + div); // 5. 모듈러 // 5. 모듈러 결과 출력 int mod = a % b; System.out.println("나머지 결과: " + mod); } } |

정답)
public class Main { public static void main(String[] args) { int a = 15; int b = 4; int sum = a + b; int difference = a - b; int product = a * b; int quotient = a / b; int remainder = a % b; System.out.println("덧셈 결과: " + sum); System.out.println("뺄셈 결과: " + difference); System.out.println("곱셈 결과: " + product); System.out.println("나눗셈 결과: " + quotient); System.out.println("나머지 결과: " + remainder); } } |
💬 Q2. 비교 연산자 문제
두 개의 정수 x와 y가 주어졌을 때
- x가 y보다 큰지 (>)
- x가 y보다 작은지 (<)
- x와 y가 같은지 (==)
- x와 y가 다르면 (!=)각각의 결과를 변수에 저장하고 출력하는 프로그램을 작성하세요.
public class Main3 { public static void main(String[] args) { int x = 5; int y = 7; System.out.println("x가 y보다 큰가? " + (x > y)); System.out.println("x가 y보다 작은가? " + (x < y)); System.out.println("x가 y와 같은가? " + (x == y)); System.out.println("x가 y와 다른가? " + (x != y)); } } |
정답)
public class Main { public static void main(String[] args) { int x = 10; int y = 20; boolean isGreater = x > y; boolean isSmaller = x < y; boolean isEqual = x == y; boolean isNotEqual = x != y; System.out.println("x가 y보다 큰가? " + isGreater); System.out.println("x가 y보다 작은가? " + isSmaller); System.out.println("x와 y가 같은가? " + isEqual); System.out.println("x와 y가 다른가? " + isNotEqual); } } |
💬 Q3. 두 문자열이 같은지 비교할 수 있는 프로그램을 만들어 봅시다.
입력한 두 개의 문자열 str1과 str2 을 비교한 결과를 result 에 담아서 출력하세요.
- 두 문자열이 같은지 비교할 때 활용 (.equals())
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("첫 번째 문자열을 입력하세요: "); String first = sc.nextLine(); System.out.print("두 번째 문자열을 입력하세요: "); String second = sc.nextLine(); boolean result = first.equals(second); System.out.println("두 문자열이 같은가요?" + result); } } |
정답)
import java.util.Scanner; public class StringComparison { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // TODO: 사용자로부터 첫 번째 문자열 입력받기 System.out.print("첫 번째 문자열을 입력하세요: "); String str1 = scanner.nextLine(); // TODO: 사용자로부터 두 번째 문자열 입력받기 System.out.print("두 번째 문자열을 입력하세요: "); String str2 = scanner.nextLine(); // TODO: 문자열 비교 결과를 변수 result 에 저장 boolean result = str1.equals(str2); // TODO: 결과 출력 System.out.println("두 문자열이 같은가요? " + result); } } |
'스파르타 내일배움캠프 > TIL(Today I learned)' 카테고리의 다른 글
25.02.27 TIL - 클래스, JVM 메모리, 계산기 과제 (2) | 2025.02.27 |
---|---|
25.02.26 TIL - 조건문, 반복문, 배열, 메서드 (3) | 2025.02.26 |
25.02.24 TIL - Open JDK, intelliJ 설치, Java 기초 (0) | 2025.02.24 |
25.02.21 TIL - 웹 개발 미니 프로젝트 회고, TIL 강의 (1) | 2025.02.21 |
25.02.20 TIL - 웹개발 미니 프로젝트(3) (0) | 2025.02.20 |