[Java] 변수(Variable), 자료형(Data Type), 자료형 변환(Casting)
변수 (Variable)
: 컴퓨터가 명령을 처리하는 동안 발생하는 값을 저장하기 위한 공간
: 바뀔 수 있는 어떤 값을 보관하는 곳
데이터 타입 (자료형, Data Type)
자료형 | 키워드 | 크기 | 기본값 | 표현범위 |
논리형 | boolean | 1bit = 8byte | false | true 또는 false (0과 1이 아님) |
문자형 | char | 2byte | \u0000 | 0 ~ 65,535 |
정수형 | byte | 1byte | 0 | -128 ~ 127 |
short | 2byte | 0 | -32,768 ~ 32,767 | |
int | 4byte | 0 | -2,147,483,648 ~ 2,147,483,647 | |
long | 8byte | 0 | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
|
실수형 | float | 4byte | 0.0 | -3.4E38 ~ +3.4E38 |
double | 1bit = 8byte | 0.0 | -1.7E308 ~ +1.7E308 |
pulic static void main(String[] args) {
char charVal1 = 'A'; // 문자
char charVal2 = "안녕하세요"; // 문자열
boolean booleanVal = true; // boolean
byte byteVal = 50; //정수
short shortVal = 190; // 정수
int intVal = 10; // 정수
long longVal = 100000000L; // 정수
float floatVal = 10.5F; // 실수
double doubleVal = 10.5; // 실수
}
- 문자형 char
' ' 과 " " 의 차이점
' ' : 문자 하나(char)
" " : 문자열(string)
문자 자료형에는 문자의 유니코드(정수)가 저장된다.
즉, 어떤 문자를 컴퓨터 내부에서 표현하기 위해서 특정 정수 값을 정의해 둔다.
이렇게 각 문자를 얼마로 표현할 것인지 코드 값을 모아둔 것을 문자세트(character set) 이라고 한다.
문자 세트에는 ASKII, euc-kr, utf-8, utf-16 등이 있다.
자바는 문자를 나타내기 위해 전세계 표준인 UNICODE를 사용한다.
(utf-16 인코딩을 사용해서 모든 문자를 2byte로 표시한다)
- 논리형 boolean
오직 true 나 false의 값만 가지는 논리 자료형이다.
true or false 이외의 값을 입력하면 Type mismatch 에러가 발생된다.
- 정수형 int
byte, short, int, long 각 범위를 넘은 값을 입력하면 Type mismatch 에러가 발생된다.
long 형에는 숫자 마지막에 접미사 L을 붙여줘야 컴퓨터가 long으로 인식한다
- 실수형 double
float와 double 이 있다.
float를 사용할 때는 실수 뒤에 접미사 F를 붙여줘야 한다.
double을 더 많이 사용한다.
변수를 활용해 Hello World~! 출력하기
package variable;
public class HelloWorld2 {
public static void main(String[] args) {
// 변수타입 변수명 = 값 ; // 변수지정 방법
String helloWorld = "Hello World~!";
System.out.println(helloWorld);
}
}
변수 선언 방법
변수타입 변수명 = 값 ;
** 변수 선언 시 주의사항
같은 이름의 변수로 선언할 수 없다.
초기화를 해준다. (값을 부여해주는 것) ex) int a = 0;
가독성을 위해 되도록 선언부(class안의 상단부)에 한꺼번에 선언한다.
변수 명
package variable;
public class VariableWarning {
public static void main (String[] args) {
int a, A; // a, A는 다른 변수!
int 1hi; // (오류) 숫자는 변수명의 제일 앞에 위치할 수 없다
int hi123; // (가능) 숫자가 변수명의 제일 앞이 아니면 선언 가능하다
int 한글; // (가능)
int space bar; // (오류)
int space_bar; // (가능)
int long, double, int; // (오류) JAVA의 예약어
}
}
숫자는 맨 앞에 쓸 수 없다.
띄어쓰기를 할 수 없다. → 언더바(_)는 사용가능
특수 문자(_ 제외)를 쓸 수 없다.
되도록 소문자만 사용한다. → 카멜표현법 (String goodBoy)
되도록 한글은 사용하지 않는다.
명사로 사용한다.
뜻이 있는 단어를 선택한다. ex) a, b (x) / data, num, height (o)
java의 예약어는 사용할 수 없다. ex) int, double, new, final 등
변수의 형변환
- 자동 (자료)형 변환
int iNum = 100;
// 자동 형변환
double dNum = iNum; // int -> double
System.out.println(dNum);
위의 예시 코드는 int형에서 double형으로 자동 형 변환을 한 것이다.
int는 4byte이고, double은 8byte 이므로 크기가 큰 것에 작은 것이 잘 담아진 것이다.
int(4byte) -> double(8byte)
- 강제 (자료)형 변환 (Casting)
double dNum = 1.1234;
// double -> int
// 자동 형 변환 오류
int iNum = dNum; // Type mismatch: cannot convert from double to int
// 강제 형 변환 (Casting)
int iNum = (int)dNum; // 컴퓨터에게 int형이라고 강제로 명령
System.out.println(iNum); // 1 -> 데이터 손실
double -> int 로 변환을 하려고 한다.
위에서 언급했듯이 int는 4byte이고, double은 8byte이다.
double 에서 int로 변경하려니 작은 크기에 큰 크기가 담기지 않는다.
그래서 자동 형 변환을 하면, Type mismatch: cannot convert from double to int 라는 오류 메시지가 뜨게 된다.
괄호( ) 안에 형 변환을 하고 싶은 자료형을 입력해준 뒤에 double형의 변수명을 써 준다면, 컴퓨터에게 강제로 int 형으로 변경시키라고 명령을 할 수 있다.
이때, double형의 소수점 뒤의 값은 없어지고 앞의 정수만 출력되게 되는데 데이터의 손실이 일어나게 된다.
- 문자열 형변환
String num1 = "1";
String num2 = "2";
String num3 = "3";
// 문자열 형변환
System.out.println(num1 + num2); // 12
System.out.println((int)num1 + (int)num2); // 불가
System.out.println(Integer.parseInt(num1)+Integer.parseInt(num2)); // 3
// 문자열 -> 정수
System.out.println(""+num3+9); // 39
문자열 + 문자열 은 문자열끼리 연결이 이뤄진다.
문자열 → 정수 은 불가능하다.
⟹ Integer.parseInt( ) 은 괄호 안의 값을 정수형으로 형변환을 해준다.
" "(문자열) + 정수 와 같이 문자열과의 연산을 출력하는 함수에서 함께 쓰면 문자열 뒤의 다른 자료형들은 문자열로 형변환이 이뤄진다.