변수 선언
변수
하나의 값을 저장할 수 있는 메모리 번지에 붙여진 이름
자바의 변수는 처음에 선언된 타입 형태로만 저장할 수 있다.
변수명 규칙
- 첫번째 글자는 문자여야한다. 특수문자는 '$', '_' 만 포함할 수 있다.
- 중간부터는 숫자 및 허용된 특수문자를 사용할 수 있다.
- 첫 문자는 소문자로 시작하되, CamelCase로 작성한다.
변수 선언과 초기화
변수 선언
저장되는 값의 타입과 이름만 결정한다. 메모리에는 할당되지 않는 상태
int num;
변수 초기화
변수에 최초로 값을 대입한다. 변수를 선언함과 동시에 대입할 수 있다.
초기화 하지 않은 변수를 연산식에 대입할 경우 컴파일 에러가 발생한다.
int num; // 변수 선언
int value = 10; // 변수 초기화
int result = num + value; // 컴파일 에러 발생
변수 값 복사
변수는 또 다른 변수에 대입되어 메모리 간에 값을 복사할 수 있다.
int x = 1;
int y = 2;
int temp = x;
x = y;
y = temp;
// 결과값
// x: 2, y: 1
정수 타입
타입 | 메모리 크기 | 저장되는 값의 허용 범위 | ||
byte | 1byte | 8bit | -2^7 ~ (2^7-1) | -128 ~ 127 |
short | 2byte | 16bit | -2^15 ~ (2^15-1) | -32,768 ~ 32,767 |
char | 2byte | 16bit | 0 ~ (2^16-1) | 0 ~ 65,535 (유니코드) |
int | 4byte | 32bit | -2^31 ~ (2^31 -1) | -2,147,483,648 ~ 2,147,483,647 |
long | 8byte | 64bit | -2^63 ~ (2^63-1) | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,808 |
long
long 타입은 수치가 큰 데이터를 다루는 프로그램에서 사용된다.
기본적으로 컴파일러는 정수 리터럴을 int 타입 값으로 간주하기 때문에 int 타입의 허용범위를 초과하는 리터럴은 뒤에 소문자 'l'이나 대문자 'L'을 붙여 long 타입 값임을 컴파일러에게 알려줘야한다.
long var = 1000000000000000L;
문자 타입
char
하나의 문자를 작은따옴표(')로 감싼 것을 문자 리터럴이라고 한다. 문자 리터럴은 유니코드로 변환되어 저장된다.
유니코드가 정수이므로 char 타입도 정수 타입에 속한다. 따라서 char 변수에 작은따옴표로 감싼 문자가 아니라 유니코드 숫자를 직접 대입할 수도 있다.
char var1 = 'A';
char var2 = '가';
char var3 = '65; // 10진수 65와 매핑되는 문자: 'A'
char var4 = 0x0041; // 16진수 0x0041과 매핑되는 문자: 'A'
실수 타입
타입 | 메모리 크기 | 저장되는 값의 허용 범위 | 유효 소수 이하 자리 | |
float | 4byte | 32bit | 1.4 x 10^-45 ~ 3.4 x 10^38 | 7자리 |
double | 8byte | 64bit | 4.9 x 10^-324 ~ 1.8 x 10^308 | 15자리 |

float 타입과 double 타입은 가수와 지수를 저장하기 위해 전체 bit를 다음과 같이 나누어 사용한다.

double은 float보다 지수와 가수 부분의 bit 수가 크기 때문에 더 크고 정밀한 실수를 저장할 수 있다. 따라서, 더 정확한 실수를 저장하고자 하면 double 타입을 사용애햐 한다.
컴파일러는 실수 리터럴을 기본적으로 double 타입으로 해석하기 때문에 float 타입에 대입하고 싶다면 리터럴 뒤에 소문자 'f'나 대문자 'F'를 붙여 컴파일러가 float 타입임을 알 수 있도록 해야한다.
double var1 = 3.14;
double var2 = 314e-2;
float var3 = 3.14f;
float var4 = 3E6F;
논리 타입
참과 거짓을 의미하는 논리 리터럴은 true와 false 이다. 논리 리터럴은 boolean 타입 변우세 대입할 수 있다.
boolean 타입 변수는 주로 두가지 상태값을 저장할 필요가 있을 경우 사용되며, 상태값에 따라 조건문과 제어문의 실행 흐름을 변경하는 데 사용된다.
문자열 타입
작은 따옴표(')로 감싼 한 개의 문자는 char 타입이지만, 큰 따옴표(")로 감싼 여러 개의 문자들은 유니코드로 변환되지 않는다.
큰 따옴표(")로 감싼 문자들을 문자열이라고 부르며, 문자열을 변수에 저장하고 싶다면 String 타입을 사용해야 한다.
String var1 = "A";
String var2 = "문자열";
문자열에는 역슬래쉬(\)가 붙은 문자, 이스케이프 문자를 사용할 수 있다.
이스케이프 문자를 사용하면 특정 문자를 포함하고, 출력에 영향을 미치기도 한다.
이스케이프 문자 | |
\* | * 문자 포함 |
\' | ' 문자 포함 |
\\ | \ 문자 포함 |
\u16진수 | 16진수 유니코드에 해당하는 문자 포함 |
\t | 출력 시 탭만큼 띄움 |
\n | 출력 시 줄바꿈 |
\r | 출력 시 캐리지 리턴 (맨 앞으로 이동) |
자동 타입 변환
자동 타입 변환은 값의 허용 범위가 작은 타입이 허용 범위가 큰 타입으로 대입될 때 발생한다.

기본 타입을 허용 범위 순으로 나열하면 다음과 같다.

정수 타입 > 실수 타입
정수 타입이 실수 타입으로 대입될 경우에는 무조건 자동 타입 변환이 된다. 실수 타입은 정수 타입보다 허용 범위가 더 크기 때문이다.
char > int
char 타입의 경우 int 타입으로 자동 변환 되면 유니코드 값이 int 타입에 대입된다.
byte > char
byte 타입은 char 타입으로 자동 변환 될 수 없다. char 타입의 허용범위는 음수를 포함하지 않기 때문이다.
강제 타입 변환
큰 허용 범위 타입은 작은 허용 범위 타입으로 자동 타입 변환이 될 수 없다. 하지만 작은 단위로 쪼개어서 변환하는 건 가능하다.

// int -> byte
int intValue = 10;
byte byteValue = (byte) intValue;
// long -> int
long longValue = 300;
int intValue = (int) longValue;
// int -> char
int intValue = 65;
char charValue = (char) intValue; // 유니코드 65에 해당하는 값 'A' 출력
// 실수 -> 정수
double doubleValue = 3.14;
int intValue = (int) doubleValue; // 정수 부분인 3만 저장
연산식에서 자동 타입 변환
자바는 실행 성능을 향상시키기 위해 컴파일 단계에서 연산을 수행한다.
자바 컴파일러는 정수 리터럴 연산은 컴파일 단계에서 미리 연산하고 변수에 저장하도록 바이트코드를 생성한다.
하지만 변수가 피연산자로 사용되면 실행 시 연산을 수행한다.

byte 변수가 피연산자로 사용되면 int 타입으로 변환되어 연산되며, 피연산자에 허용 범위가 더 큰 타입이 사용되면 큰 타입으로 변환되어 연산이 수행된다.
정수 연산의 결과는 항상 정수가 되므로 실수 타입으로 연산 및 결과값을 얻기 위해서는 실수 타입으로 형 변환 후 연산을 실행해야한다.
문자열을 기본 타입으로 변환
변환 타입 | 사용 예 |
String -> byte | Byte.parseByte(str); |
String -> short | Short.parseShort(str); |
String -> int | Integer.parseInt(str); |
String -> long | Long.parseLong(str); |
String -> float | Float.parseFloat(str); |
String -> double | Double.parseDouble(str); |
String -> boolean | Boolean.parseBoolean(str); |
기본 타입을 문자열로 변환
변환 타입 | 사용 예 |
기본 타입 -> String | String.valueOf(기본타입값); |
변수 사용 범위
중괄호 {} 블록 내에 선언 된 변수는 해당 중괄호에서만 사용이 가능하고 밖에서는 사용할 수 없다.
이를 '지역 변수(Local Variable)' 이라고 말한다.
전역 변수(Global Varibale)은 함수 밖에서 선언되어 클래스 전체에서 사용되는 변수를 말한다.
변수값 출력
콘솔에 값을 출력하기 위해서 일반적으로 System.out.println();
(줄바꿈)를 사용한다.
이 함수는 변수가 어떤 타입이든 대입하여 사용할 수 있는데, 어떻게 이 함수는 모든 타입을 변수로 가질 수 있을까?
print 메소드가 구현되어있는 PrintStream 클래스를 확인해보면 print 관련 메소드가 모든 타입에 대해 오버로딩 되어있는 걸 확인할 수 있다.

printf()
형식 문자열에 맞추어 뒤의 값을 출력하는 함수이다.

형식화된 문자열 | 설명 | 출력 형태 | |
정수 | %d %6d %-6d %06d |
정수 6자리 정수. 왼쪽 빈자리 공백 6자리 정수. 오른쪽 빈자리 공백 6자리 정수. 왼쪽 빈자리 0채움 |
123 ___123 123___ 000123 |
실수 | %10.2f %-10.2f %010.2f |
정수 7자리+소수점+소주 2자리. 왼쪽 빈자리 공백 정수 7자리+소수점+소주 2자리. 오른쪽 빈자리 공백 정수 7자리+소수점+소주 2자리. 왼쪽 빈자리 0 채움 |
____123.45 123.45____ 0000123.45 |
문자열 | %s %6s %-6s |
문자열 6자리 문자열. 왼쪽 빈자리 공백 6자리 문자열. 오른쪽 빈자리 공백 |
abc ___abc abc___ |
특수 문자 | \t \n %% |
탭(tab) 줄바꿈 % |
% |
확인 문제
1번 정답: 4
초기화되지 않은 변수는 읽을 수 없다
2번 정답: 2, 3, 6, 7
2 - 예약어
3 - 첫 자리는 문자만 가능
6 - 특수문자는 $, _ 만 가능
7 - 예약어
3번 정답:
타입 / 크기 | 1byte | 2byte | 4byte | 8byte |
정수타입 | byte | short char |
int | long |
실수타입 | float | double | ||
논리타입 | boolean |
4번 정답:
타입: int, double
변수 이름: age, price
리터럴: 10, 3.14
5번 정답: 3
char는 음수를 포함하지 않기 때문에 short로 변환될 수 없다.
6번 정답: 4
String은 문자열이고, char는 문자 타입이기 때문에 강제 타입 변환할 수 없다.
// String -> char 출력하기
String str = "A";
for (char c : str.toCharArray()) {
System.out.println(c);
}
7번 정답: 3
char를 초기화하려면 적어도 하나의 문자가 포함되어야한다(공백 포함)
8번 정답: 3
printf()는 변수값을 바꾸는게 아니라 형식문자열에 변수를 대입한다.
9번 정답: 1
byte + byte는 int에 대입해야한다.
10번 정답: 2
Integer.parseInt();
'JAVA > 이것이 자바다' 카테고리의 다른 글
[이것이 자바다] CH04. 조건문과 반복문, 확인문제 (1) | 2025.03.17 |
---|---|
[이것이 자바다] CH03. 연산자, 확인문제 (0) | 2025.03.16 |
[이것이 자바다] CH01. 자바 시작하기, 확인문제 (3) | 2025.03.16 |

변수 선언
변수
하나의 값을 저장할 수 있는 메모리 번지에 붙여진 이름
자바의 변수는 처음에 선언된 타입 형태로만 저장할 수 있다.
변수명 규칙
- 첫번째 글자는 문자여야한다. 특수문자는 '$', '_' 만 포함할 수 있다.
- 중간부터는 숫자 및 허용된 특수문자를 사용할 수 있다.
- 첫 문자는 소문자로 시작하되, CamelCase로 작성한다.
변수 선언과 초기화
변수 선언
저장되는 값의 타입과 이름만 결정한다. 메모리에는 할당되지 않는 상태
int num;
변수 초기화
변수에 최초로 값을 대입한다. 변수를 선언함과 동시에 대입할 수 있다.
초기화 하지 않은 변수를 연산식에 대입할 경우 컴파일 에러가 발생한다.
int num; // 변수 선언
int value = 10; // 변수 초기화
int result = num + value; // 컴파일 에러 발생
변수 값 복사
변수는 또 다른 변수에 대입되어 메모리 간에 값을 복사할 수 있다.
int x = 1;
int y = 2;
int temp = x;
x = y;
y = temp;
// 결과값
// x: 2, y: 1
정수 타입
타입 | 메모리 크기 | 저장되는 값의 허용 범위 | ||
byte | 1byte | 8bit | -2^7 ~ (2^7-1) | -128 ~ 127 |
short | 2byte | 16bit | -2^15 ~ (2^15-1) | -32,768 ~ 32,767 |
char | 2byte | 16bit | 0 ~ (2^16-1) | 0 ~ 65,535 (유니코드) |
int | 4byte | 32bit | -2^31 ~ (2^31 -1) | -2,147,483,648 ~ 2,147,483,647 |
long | 8byte | 64bit | -2^63 ~ (2^63-1) | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,808 |
long
long 타입은 수치가 큰 데이터를 다루는 프로그램에서 사용된다.
기본적으로 컴파일러는 정수 리터럴을 int 타입 값으로 간주하기 때문에 int 타입의 허용범위를 초과하는 리터럴은 뒤에 소문자 'l'이나 대문자 'L'을 붙여 long 타입 값임을 컴파일러에게 알려줘야한다.
long var = 1000000000000000L;
문자 타입
char
하나의 문자를 작은따옴표(')로 감싼 것을 문자 리터럴이라고 한다. 문자 리터럴은 유니코드로 변환되어 저장된다.
유니코드가 정수이므로 char 타입도 정수 타입에 속한다. 따라서 char 변수에 작은따옴표로 감싼 문자가 아니라 유니코드 숫자를 직접 대입할 수도 있다.
char var1 = 'A';
char var2 = '가';
char var3 = '65; // 10진수 65와 매핑되는 문자: 'A'
char var4 = 0x0041; // 16진수 0x0041과 매핑되는 문자: 'A'
실수 타입
타입 | 메모리 크기 | 저장되는 값의 허용 범위 | 유효 소수 이하 자리 | |
float | 4byte | 32bit | 1.4 x 10^-45 ~ 3.4 x 10^38 | 7자리 |
double | 8byte | 64bit | 4.9 x 10^-324 ~ 1.8 x 10^308 | 15자리 |

float 타입과 double 타입은 가수와 지수를 저장하기 위해 전체 bit를 다음과 같이 나누어 사용한다.

double은 float보다 지수와 가수 부분의 bit 수가 크기 때문에 더 크고 정밀한 실수를 저장할 수 있다. 따라서, 더 정확한 실수를 저장하고자 하면 double 타입을 사용애햐 한다.
컴파일러는 실수 리터럴을 기본적으로 double 타입으로 해석하기 때문에 float 타입에 대입하고 싶다면 리터럴 뒤에 소문자 'f'나 대문자 'F'를 붙여 컴파일러가 float 타입임을 알 수 있도록 해야한다.
double var1 = 3.14;
double var2 = 314e-2;
float var3 = 3.14f;
float var4 = 3E6F;
논리 타입
참과 거짓을 의미하는 논리 리터럴은 true와 false 이다. 논리 리터럴은 boolean 타입 변우세 대입할 수 있다.
boolean 타입 변수는 주로 두가지 상태값을 저장할 필요가 있을 경우 사용되며, 상태값에 따라 조건문과 제어문의 실행 흐름을 변경하는 데 사용된다.
문자열 타입
작은 따옴표(')로 감싼 한 개의 문자는 char 타입이지만, 큰 따옴표(")로 감싼 여러 개의 문자들은 유니코드로 변환되지 않는다.
큰 따옴표(")로 감싼 문자들을 문자열이라고 부르며, 문자열을 변수에 저장하고 싶다면 String 타입을 사용해야 한다.
String var1 = "A";
String var2 = "문자열";
문자열에는 역슬래쉬(\)가 붙은 문자, 이스케이프 문자를 사용할 수 있다.
이스케이프 문자를 사용하면 특정 문자를 포함하고, 출력에 영향을 미치기도 한다.
이스케이프 문자 | |
\* | * 문자 포함 |
\' | ' 문자 포함 |
\\ | \ 문자 포함 |
\u16진수 | 16진수 유니코드에 해당하는 문자 포함 |
\t | 출력 시 탭만큼 띄움 |
\n | 출력 시 줄바꿈 |
\r | 출력 시 캐리지 리턴 (맨 앞으로 이동) |
자동 타입 변환
자동 타입 변환은 값의 허용 범위가 작은 타입이 허용 범위가 큰 타입으로 대입될 때 발생한다.

기본 타입을 허용 범위 순으로 나열하면 다음과 같다.

정수 타입 > 실수 타입
정수 타입이 실수 타입으로 대입될 경우에는 무조건 자동 타입 변환이 된다. 실수 타입은 정수 타입보다 허용 범위가 더 크기 때문이다.
char > int
char 타입의 경우 int 타입으로 자동 변환 되면 유니코드 값이 int 타입에 대입된다.
byte > char
byte 타입은 char 타입으로 자동 변환 될 수 없다. char 타입의 허용범위는 음수를 포함하지 않기 때문이다.
강제 타입 변환
큰 허용 범위 타입은 작은 허용 범위 타입으로 자동 타입 변환이 될 수 없다. 하지만 작은 단위로 쪼개어서 변환하는 건 가능하다.

// int -> byte
int intValue = 10;
byte byteValue = (byte) intValue;
// long -> int
long longValue = 300;
int intValue = (int) longValue;
// int -> char
int intValue = 65;
char charValue = (char) intValue; // 유니코드 65에 해당하는 값 'A' 출력
// 실수 -> 정수
double doubleValue = 3.14;
int intValue = (int) doubleValue; // 정수 부분인 3만 저장
연산식에서 자동 타입 변환
자바는 실행 성능을 향상시키기 위해 컴파일 단계에서 연산을 수행한다.
자바 컴파일러는 정수 리터럴 연산은 컴파일 단계에서 미리 연산하고 변수에 저장하도록 바이트코드를 생성한다.
하지만 변수가 피연산자로 사용되면 실행 시 연산을 수행한다.

byte 변수가 피연산자로 사용되면 int 타입으로 변환되어 연산되며, 피연산자에 허용 범위가 더 큰 타입이 사용되면 큰 타입으로 변환되어 연산이 수행된다.
정수 연산의 결과는 항상 정수가 되므로 실수 타입으로 연산 및 결과값을 얻기 위해서는 실수 타입으로 형 변환 후 연산을 실행해야한다.
문자열을 기본 타입으로 변환
변환 타입 | 사용 예 |
String -> byte | Byte.parseByte(str); |
String -> short | Short.parseShort(str); |
String -> int | Integer.parseInt(str); |
String -> long | Long.parseLong(str); |
String -> float | Float.parseFloat(str); |
String -> double | Double.parseDouble(str); |
String -> boolean | Boolean.parseBoolean(str); |
기본 타입을 문자열로 변환
변환 타입 | 사용 예 |
기본 타입 -> String | String.valueOf(기본타입값); |
변수 사용 범위
중괄호 {} 블록 내에 선언 된 변수는 해당 중괄호에서만 사용이 가능하고 밖에서는 사용할 수 없다.
이를 '지역 변수(Local Variable)' 이라고 말한다.
전역 변수(Global Varibale)은 함수 밖에서 선언되어 클래스 전체에서 사용되는 변수를 말한다.
변수값 출력
콘솔에 값을 출력하기 위해서 일반적으로 System.out.println();
(줄바꿈)를 사용한다.
이 함수는 변수가 어떤 타입이든 대입하여 사용할 수 있는데, 어떻게 이 함수는 모든 타입을 변수로 가질 수 있을까?
print 메소드가 구현되어있는 PrintStream 클래스를 확인해보면 print 관련 메소드가 모든 타입에 대해 오버로딩 되어있는 걸 확인할 수 있다.

printf()
형식 문자열에 맞추어 뒤의 값을 출력하는 함수이다.

형식화된 문자열 | 설명 | 출력 형태 | |
정수 | %d %6d %-6d %06d |
정수 6자리 정수. 왼쪽 빈자리 공백 6자리 정수. 오른쪽 빈자리 공백 6자리 정수. 왼쪽 빈자리 0채움 |
123 ___123 123___ 000123 |
실수 | %10.2f %-10.2f %010.2f |
정수 7자리+소수점+소주 2자리. 왼쪽 빈자리 공백 정수 7자리+소수점+소주 2자리. 오른쪽 빈자리 공백 정수 7자리+소수점+소주 2자리. 왼쪽 빈자리 0 채움 |
____123.45 123.45____ 0000123.45 |
문자열 | %s %6s %-6s |
문자열 6자리 문자열. 왼쪽 빈자리 공백 6자리 문자열. 오른쪽 빈자리 공백 |
abc ___abc abc___ |
특수 문자 | \t \n %% |
탭(tab) 줄바꿈 % |
% |
확인 문제
1번 정답: 4
초기화되지 않은 변수는 읽을 수 없다
2번 정답: 2, 3, 6, 7
2 - 예약어
3 - 첫 자리는 문자만 가능
6 - 특수문자는 $, _ 만 가능
7 - 예약어
3번 정답:
타입 / 크기 | 1byte | 2byte | 4byte | 8byte |
정수타입 | byte | short char |
int | long |
실수타입 | float | double | ||
논리타입 | boolean |
4번 정답:
타입: int, double
변수 이름: age, price
리터럴: 10, 3.14
5번 정답: 3
char는 음수를 포함하지 않기 때문에 short로 변환될 수 없다.
6번 정답: 4
String은 문자열이고, char는 문자 타입이기 때문에 강제 타입 변환할 수 없다.
// String -> char 출력하기
String str = "A";
for (char c : str.toCharArray()) {
System.out.println(c);
}
7번 정답: 3
char를 초기화하려면 적어도 하나의 문자가 포함되어야한다(공백 포함)
8번 정답: 3
printf()는 변수값을 바꾸는게 아니라 형식문자열에 변수를 대입한다.
9번 정답: 1
byte + byte는 int에 대입해야한다.
10번 정답: 2
Integer.parseInt();
'JAVA > 이것이 자바다' 카테고리의 다른 글
[이것이 자바다] CH04. 조건문과 반복문, 확인문제 (1) | 2025.03.17 |
---|---|
[이것이 자바다] CH03. 연산자, 확인문제 (0) | 2025.03.16 |
[이것이 자바다] CH01. 자바 시작하기, 확인문제 (3) | 2025.03.16 |