변수
변수는 변하는 값을 의미한다.
표현하려는 값에 맞는 데이터 타입을 이용하여 변수를 선언, 정의할 수 있다.
변수 선언은 자료형과 변수 명으로 선언하고, 선언과 동시에 초기화 할 수 있다.
변수 선언 예제
public static void main(String[] args){
int age;
age = 10;
int level = 10000;
System.out.println(age);
System.out.println(level);
}
//print
10
10000
변수의 이름
- 영문자, 숫자를 사용할 수 있고, 특수문자는 $, _ 만 사용할 수 있다.
- 숫자로 시작할 수 없다.
- 예약어는 사용할 수 없다. (while, break, ...)
- 용도에 맞고, 가독성 있게 만들어야 한다.
진수
자바에서는 숫자 자료형에 저장된 10진수, 2진수, 8진수, 16진수를 10진수로 출력할 수 있다.
public static void main(String[] args) {
System.out.println("Hello, Java");
int num = 10;
int bNum = 0B1010;
int oNum = 012;
int xNum = 0xa;
System.out.println(num);
System.out.println(bNum);
System.out.println(oNum);
System.out.println(xNum);
}
기본 자료형
정수
변수를 선언하면 자료형의 크기만큼 메모리가 할당된다.
자료형 바이트 크기 범위
byte | 1 | -2^7 ~ 2^7 -1 |
short | 2 | -2^15 ~ 2^15 -1 |
int | 4 | -2^31 ~ 2^31 -1 |
long | 8 | -2^63 ~ 2^63 -1 |
long의 경우, 숫자 뒤에 L 또는 l 을 써서 long 형임을 표시한다.
실수
실수는 정수보다 정밀하기 때문에, 정수와 다른 방식으로 표현한다.
부동소수점 방식
실수 값 0.1
1.0 x 10^{-1}
지수부(-1)와 가수부(1.0)로 표현한다.
💡 컴퓨터에서는 밑수를 2로 사용한다.
정규화
가수가 밑수보다 작은 작은 한 자리까지 가수로 표현되는 것을 말한다.
실수 값 0.2
0.4 x 2^{-1}
정규화
1.6 x 2^{-3}
float형과 double 형
자바에서 실수의 기본 타입은 double을 사용한다.
float
부호비트(1비트), 지수부(8비트), 가수부(23비트) - 32bits(4bytes)
double
부호비트(1비트), 지수부(11비트), 가수부(52비트) - 64bits(8bytes)
public static void main(String[] args){
double dnum = 3.14;
float fnum = 3.14f;
System.out.println(dnum);
System.out.println(fnum);
}
부동 소수점 방식의 오류
지수와 가수로 나타내는 부동 소수점 방식에서는 지수부가 0을 표현할 수 없기때문에 약간의 오차가 발생할 수 있다.
package test;
public class test {
public static void main(String[] args) {
double dnum = 1;
for (int i = 0; i < 1000; i++) {
dnum += 0.1;
}
System.out.println(dnum);
}
}
//예상 - 101
문자
문자를 특정 정수 값을 정의해서 표현한다.
- 문자세트(character set) : 각 문자를 표현한 코드 값을 모아둔 것을 말한다.(ascii, euc-kr, utf-8, utf-16, ...)
자바에서는 UNICODE를 사용한다.
utf-16 인코딩을 사용하여 모든 문자를 2바이트로 표시한다.
숫자로 표현되므로 숫자를 넣어도 문자로 출력 할 수 있다.
package test;
public class test {
public static void main(String[] args) {
char ch1 = 'A';
System.out.println(ch1);
ch1 = 66;
System.out.println(ch1);
}
}
- 인코딩 : 문자를 특정 정수 값으로 변환하는 것
- 디코딩 : 정수 값을 문자로 변환하는 것
- 유니코드(unicode) : 전 세계의 모든 문자를 다루도록 설계된 표준 문자 전산 처리 방식
- utf-8 : 8 bit unicode transform format, 1~4 바이트로 표현할 수 있다.
- utf-16 : 16 bit unicode transform format, 2~4 바이트로 표현할 수 있다.
논리형
참(true), 거짓(false)으로 나타낼 수 있다.
1byte를 사용한다.
package test;
public class test {
public static void main(String[] args) {
boolean bool = true;
System.out.println(bool);
System.out.println(!bool);
}
}
var
⚠️ 자바 10 이상에서 지원된다.
자료형 없이 지역변수로 사용할 수 있다.
package test;
public class test {
public static void main(String[] args) {
var x = 100;
var y = 1.90;
var z = 'a';
var a = "hello";
var b = false;
System.out.println(x);
System.out.println(y);
System.out.println(z);
System.out.println(a);
System.out.println(b);
}
}
⛔ 전역변수로 사용할 수 없다
package test;
public class test {
var x = 100;
public static void main(String[] args) {
System.out.println(x);
}
}
상수
constant
상수는 변하지 않는 수를 말한다.
final 예약어를 사용하여 선언한다.
package test;
public class test {
public static void main(String[] args) {
final int x = 100;
final int y;
y = 10;
System.out.println(x);
System.out.println(y);
}
}
리터럴
literal
숫자, 문자, 논리값을 뜻한다.
리터럴은 constant pool에 저장된다.
정수 리터럴은 int로, 실수 리터럴은 double로 저장된다.
형 변환
type conversion
서로 다른 자료형 간에 연산등의 수행을 위해 하나의 자료형으로 변환하는 것을 말한다.
묵시적 형 변환(explicit type conversion)
자동 형 변환
바이트 크기가 작은 자료형에서 큰 자료형으로의 형 변환은 자동으로 이루어진다.
더 정밀한 자료형으로의 형 변환은 자동으로 이루어진다.
package test;
public class test {
public static void main(String[] args) {
int i = 100;
long j = i;
double k = j;
System.out.println(i);
System.out.println(j);
System.out.println(k);
}
}
명시적 형 변환(implicit type conversion)
강제 형 변환
바이트가 큰 자료형에서 작은 자료형으로 형변환하는 경우, 데이터의 손실이 발생할 수 있다.
package test;
public class test {
public static void main(String[] args) {
double k = 1234.56789;
float j = (float)k;
int i = (int)j;
System.out.println(k);
System.out.println(j);
System.out.println(i);
}
}
참조 자료형
클래스형으로 변수를 선언하여 사용할 수 있다.
참조 자료형을 사용할 때에는 해당 변수에 대해 생성해야 한다.
(단, String 클래스는 예외적으로 생성하지 않고 사용할 수 있다.)
public class Student{
int id;
String name;
String phoneNumber;
}
'Java' 카테고리의 다른 글
[JAVA] 객체와 객체지향 프로그래밍 (0) | 2022.02.08 |
---|---|
[JAVA] 반복문 ~ while ~ for (0) | 2022.02.07 |
[JAVA] 조건문 ~ if (0) | 2022.02.07 |
[JAVA] 자바의 연산자 (0) | 2022.02.07 |
[JAVA] 자바란? (0) | 2022.02.01 |