프로그래밍 언어는 데이터를 어디에 어떤 방식으로 저장할지 정하고 메모리를 관리하기 위해 변수를 사용한다.
변수 는 하나의 값을 저장할 수 잇는 메모리 번지에 붙여진 이름이다. 변수를 통해 프로그램은 메모리 번지에 값을 저장하고 읽을 수 있다.
변수 사용을 위해서는 변수 선언이 필요하다.
변수 선언은 저장할 데이터 타입이 무엇인지, 변수 이름은 무엇인지 결정하는 것이다.
int age; //정수(int)값을 저장할 수 잇는 age 변수 선언
double value; //실수(double) 값을 저장할 수 있는 value 변수 선언
변수 이름 규칙
1. 첫 번쨰 글자가 문자여야 한다.
2. 중간부터는 문자, 숫자, $, _ 를 포함할 수 있다.
3. 첫 문자를 소문자로 시작하되 캐멀 스타일로 작성하는 것이 관례이다.
캐멀 스타일
코드를 작성할 때 여러 단어를 혼합하여 명명하는 경우, 낙타의 등처럼 대소문자가 섞여있도록 작성하는 스타일을 말한다.
자바 소스 파일명과 변수명을 작성할 때 관례적으로 사용한다.
1. 자바 소스 파일명(클래스명)은 대문자로 시작
2. 변수명은 소문자로 시작
변수가 선언되었다면 값을 저장할 수 있다. 값을 저장할 때는 대입연산자 =
를 사용한다.
int score; //변수 선언
score = 90; //값 대입
변수의 초기값은 변수를 선언함과 동기에 대입할 수도 있다.
int score = 90;
자바에서 정수 타입은 다음과 같다.
타입 | 메모리 크기 | 저장되는 값의 허용범위 |
---|---|---|
byte | 1byte | -128 ~ 127 |
short | 2byte | -32,768 ~ 32,767 |
char | 2byte | 0 ~ 65535 |
int | 4byte | -2,147,483,648 ~ 2,147,483,647 |
long | 8byte | -9,223,372,036,854,775,808 ~ -9,223,372,036,854,775,808 |
c언어에서 char 타입이 1byte 인 것에 비해 자바는 2byte인 것을 볼 수 있다.
c언어에서는 문자를 1byte인 ASCII 로 표현을 하고, 자바에서는 2byte인 유니코드로 표현을 하기 때문에 차이가 발생한다.
자바의 long 타입은 c언어의 long long 타입과 크기가 동일한 것을 볼 수 있다.
자바에서 정수 리터럴은 2진수, 8진수, 10진수, 16진수가 있다.
각각의 표현은 다음과 같다.
int x = 0b1011;
int y = 0B10100;
int x = 013;
int y = 0206;
int x = 12;
int y = 365;
int x = 0xB3;
int y = 0x2A0F;
자바에서 문자 타입은 다음과 같다.
타입 | 메모리 크기 | 저장되는 값의 허용범위 |
---|---|---|
char | 2byte | 0 ~ 65535 |
하나의 문자를 작은따옴표(')로 감싼 것을 문자 리터럴이라고 한다.
자바에서 문자 리터럴은 유니코드로 변환되어 저장되는데, 유니코드가 2byte 크기의 정수이므로 char 타입도 정수 타입에 속하며 그 크기는 2byte 이다.
char var1 = 'A';
char var3 = '가';
자바에서 실수 타입은 다음과 같다.
타입 | 메모리 크기 | 저장되는 값의 허용범위 | 유효 소수 이하 자리 |
---|---|---|---|
float | 4byte | 1.4e-45 ~ 3.4e38 | 7자리 |
double | 8byte | 4.9e-324 ~ 1.8e308 | 15자리 |
double x = 0.25;
double y = -3.14;
double x = 5e2;
double y = 0.12E-2;
컴파일러는 실수 리터럴을 기본적으로 double 타입으로 해석하기 때문에 실수 리터럴을 float 타입 변수에 대입할려면 리터럴 뒤에 'f' 나 'F'를 붙여야 한다.
float var = 3.14f;
float var = 3E6F;
논리 타입은 다음과 같다.
boolean 타입 변수는 주로 두 가지 상태값을 저장할 필요가 있을 경우 사용된다.ㄷ
boolean stop = true;
boolean stop = false;
참과 거짓을 의미하는 논리 리터럴은 true와 false이다.
char 타입 변수는 단일 문자만 저장이 가능하고 문자열은 저장할 수 없다. 문자열을 저장하기 위해서는 String 타입을 사용해야 한다.
String 타입은 자바 기본 타입에 속하지 않는 참조 타입이다.
String str1 = "A";
String str2 = "홍길동";
문자 리터럴은 작은따옴표(')로 감싼 한 개의 문자이고. 문자열 리터럴은 큰따옴표(")로 감싼 여러개의 문자집합이다.
문자열 내부에는 다음과 같은 이스케이프 문자를 사용할 수 있다.
이스케이프 문자 | 설명 |
---|---|
\" | " 문자 포함 |
\' | ' 문자 포함 |
'' | \ 문자 포함 |
\u16진수 | 16진수 유니코드에 해당하는 문자 포함 |
\t | 출력 시 탭만큼 띄움 |
\n | 출력 시 줄바꿈(라인피트) |
\r | 출력 시 캐리지 리턴 |
자동 타입 변환은 말 그대로 자동으로 타입변환이 일어나는 것을 말한다.
자동 타입 변환은 값의 허용 범위가 작은 타입이 허용 범위가 큰 타입으로 대입될 때 발생한다.
byte < short, char < int < long < float < double
char 타입은 음수를 포함하지 않으므로, 음수를 포함하는 byte 타입은 char 타입으로 자동 변환 될 수 없다.
byte byteValue = 65;
char charValue = byteValue; //컴파일 에러
큰 허용 범위 타입은 작은 허용 범위 타입으로 자동 타입 변환 될 수 없다.
큰 허용 범위 타입을 작은 허용 범위 타입으로 쪼개어서 저장하는 것을 강제 타입 변환이라고 한다.
int intValue = 10;
byte byteValue = (byte) intValue;
long longValue = 300;
int intValue = (int) longValue;
int intValue = 65;
char charValue = (char) intValue;
System.out.println(charValue) //'A' 출력
double doubleValue - 3.14;
int intValue = (int)doubleValue; // 3 저장
서로 다른 타입간의 연산식에서는 허용 범위가 더 큰 타입으로 자동 타입 변환된다.
int intValue = 10;
double doubleValue = 5.5;
double result = intValue + doubleValue; // 10.0 + 5.5
자바에서 + 연산자는 두가지 기능을 가지고 있다. 피연산자가 모두 숫자일 경우에는 덧셈 연산을 수행하고, 피연산자 중 하나가 문자열일 경우에는 나머지 피연산자도 문자열로 자동 변환되어 문자열 결합 연산을 수행한다.
String str = "3" + 7 //"37"
String str = 3 + 4 + "7" //7 + "7" -> "77"
자바에서 문자열을 기본타입으로 변환하는 방법은 다음과 같다.
변환 타입 | 메소드 |
---|---|
byte | Byte.parseByte(str) |
short | Short.parseShort(str) |
int | Integer.parseInt(str) |
long | Long.parseLong(str) |
float | Float.parseFloat(str) |
double | Double.parseDouble(str) |
boolean | Boolean.parseBoolean(str) |
중괄호 {}
블록 내에서 선언된 변수는 해당 중괄호 {}
블록 내에서만 사용이 가능하고 밖에서는 사용할 수 없다.
int v1 = 15;
if (v1 > 10) {
int v2 = v1 - 10;
}
int v3 = v1 + v2 + 5; //컴파일 에러 발생
- 변수에 대해 잘못 설명한 것은 무엇입니까?
- 변수는 초기값이 저장되지 않은 상태에서는 읽을 수 없다.
- 변수 이름으로 사용할 수 없는 것을 모두 선택하세요.
- class
- 6hour
- #name
- int
- 다음 표의 빈 칸에 자바의 기본 타입 8개를 적어보세요
- 정수 타입: byte, short, char, int, long
- 실수 타입: float. double
- 논리 타입: boolean
- 다음 코드에서 타입, 변수 이름, 리터럴에 해당하는 것을 적어보세요.
- 타입: int, double
- 변수 이름: age, price
- 리터럴: 10, 3.14
- 다음 자동 타입 변환에서 컴파일 에러가 발생하는 것을 선택하세요.
byte byteValue = 10; char charValue = 'A';
- short shortValue = charValue;
- 다음 강제 타입 변환에서 컴파일 에러가 발생하는 것을 선택하세요.
int intValue = 10; char charValue = 'A'; double doubleValue = 5.7; String strValue = "A";
- char var = (char) strValue;
- 변수를 잘못 초기화한 것은 무엇입니까?
- char var3 = '';
- 콘솔에 값을 입출력하는 방법에 대해 잘못 설명한 것을 선택하세요.
- System.out.printf("형식", 변수)는 주어진 형식대로 변수값을 바꾼다.
- 연산식의 타입 변환 중에서 컴파일 에어가 발생하는 것을 선택하세요.
byte byteValue = 10; float floatValue = 2.5f; double doubleValue 2.5;
- byte result = byteValue + byteValue;
- 문자열을 기본 타입으로 변환하는 코드로 틀린 것을 고르세요.
String str = "5";
- int var2 = Int.parseInt(str);
- 다음 코드에서 컴파일 에러가 발생하는 라인을 모두 적어보세요
int v1 = 1; System.out.println("v1: " + v1); if(true) { int v2 = 2; if(true) { int v3 = 2; System.out.println("v1: " + v1); System.out.println("v2: " + v2); System.out.println("v3: " + v3); } System.out.println("v1: " + v1); System.out.println("v2: " + v2); System.out.println("v3: " + v3); } System.out.println("v1: " + v1); System.out.println("v2: " + v2);
- 13행, 16행