> 변수 variable
어떤 값을 저장하는 공간
하나의 변수에는 하나의 값만, 한가지 타입의 값만 저장될 수 있음
프로그램을 실행할 때마다 저장된 값이 바뀔 수 있음
사용범위 - 블록{ } 안에서 선언된 변수는 해당 블록 안에서만 유효 (블록이 끝나면 메모리상에서 제거됨)
{
int a = 10;
}
System.out.println(a);
//Error
> 변수 선언
<data type> <변수 식별자 이름>;
int a;
초기화 - 변수 선언 후 처음 값을 저장하는 것, 그 값을 초기값이라고 함
int a;
a = 0;
변수 선언과 초기화를 동시에 하기
int a = 0;
*같은 타입의 변수는 한번에 선언할 수 있다
int a, b;
int a = 1, b = 2;
예)초기화 후 원하는 값 저장
int a = 1;
a = 500;
예)여러가지 값 저장
int a = 0;
int b = 3;
a = b;
System.out.println(a);
//3
int a = 2;
int b = 3;
int c = a + b + 5;
System.out.println(c);
//10
*숫자 여러개를 , 를 이용하여 함께 출력할 수 없다
-다른 데이터타입도 마찬가지 (문자, 문자열 등)
int a = 1;
int b = 2;
System.out.println(a, b);
//Error
> data type
정수형, 실수형, 논리형, 문자형
1. 정수형 - byte, short, int, long
주의. long 선언 시 숫자 뒤에 L 붙여주어야 함 (ex. long a = 10L;)
byte (1byte) < short (2byte) < int (4byte) < long (8byte)
정수(양의정수, 0, 음의정수)
byte → 1byte = 8bit → 2^8=256개의 숫자 표현가능 → 256/2=128, 저장 가능 범위: -128~127
short → 2byte = 16bit → 2^16=65536개의 숫자 표현가능 → 65536/2=32768, 저장 가능 범위: -32768~32767
int → 4byte = 32bit → 2^32=4294967296개의 숫자 표현가능 → 4294967296/2=2147483648, 저장 가능 범위: -2147483648~2147483647
long → 8byte = 64bit → 2^64 (...이하 생략)
ex. byte a = 128; ← 불가능하다
*1byte (8bit) _ _ _ _ _ _ _ _
첫 번째 칸: 부호비트 음수(1) 양수(0)
나머지 7칸: 2진법으로 숫자 표현
ex. 20 = 0001 0100
음수표현
1)양수의 2의 보수 취하기(1의 보수 1→ 0, 0→1 취한 후 1 더하기)
2)양수의 뒤에서부터 처음 1이 나올 때까지 (1까지) 그대로 쓰고, 나머지는 1→ 0, 0→1 바꾸기
ex. -20 = 1110 1100
*정수형은 2진수, 8진수, 16진수로도 값을 저장 할 수 있음
숫자 앞에 2진수는 0b, 8진수는 0, 16진수는 0x를 붙여서 저장
예) int a = 0b1010; ← 2진수, 10진수로 10
int a = 064; ← 8진수, 10진수로 4 + 8*6 = 52
int a = 0x3a4c; ← 16진수, 10진수로 12 + 16*4 + 16*16*10 + 16*16*16*3 = 14924
**16진수 표기법: 10~15를 각각 a~f로 쓴다 (ex. 15 → f, 26 → 1a)
2. 실수형 - float, double
float (4byte) < double (8byte)
주의. float 선언 시 숫자 뒤에 F 붙여주어야 함 (ex. float a = 3.14F;)
실수는 소수점 아래에서 작은 오차가 생길 수 있음
float는 소수점 아래 7자리, double은 소수점 아래 13자리까지 유효
*e 표기법 (num1)e(num2) = (num1)*10^(num2)
double a = 10e3; ← 10000
double b = 123e-3; ← 0.123
double c = 1.23e3; ← 1230
3. 논리형 - boolean
boolean (1byte)
값으로 오직 true, false 만 저장
ex. boolean a = true; (O)
boolean a = True; (X)
숫자값을 논리값으로 해석하지 않음 (0≠false, 1≠true)
boolean a = 0; (X)
다른 datatype과 형 변환 불가능하다
4. 문자형 - char, String
1) char 단일문자
값은 반드시 ' ' 안에 쓴다
ex. char c = 'A';
*아스키코드 1byte 8bit 2^7=128 (첫번째 칸 제외)
영어알파벳대문자/소문자/숫자0~9 포함한 76개의 문자를 저장
2~4번째 칸: 자료의 유형 - 대문자 100~101, 소문자 110~111, 숫자011
5~8번째 칸: 자료의 값 - A 100 0001 (65), a 110 0001 (97), 0 011 0000 (48)
ex. char c = 65; → 'A'가 저장됨
*유니코드 2byte 16bit 2^16=65536 (0~65535)
전세계 언어를 포함 65536가지의 문자값 표현
ex. char c = 44032; → '가'가 저장됨
'\u(16진수)' 저장하면 해당 문자가 저장됨
ex. char c = '\uAC00'; → '가'가 저장됨 (AC00 = 16*16*12 + 16*16*16*10 = 44032)
유니코드 이스케이프 시퀀스 \u : \u다음은 유니코드로 인식됨
16진수 이스케이프 시퀀스 \x : \x다음은 16진수로 인식됨
Invalid unicode 에러 - 주석에 유니코드 이스케이프 시퀀스가 포함된 경우
예)
char c1 = '가';
char c2 = 44032;
char c3 = '\uAC00';
System.out.println(c1 + c2 + c3); //132096 (44032+44032+44032=132096)
System.out.println(c1 + "" + c2 + "" + c3); //가가가
2) String 문자열
값은 반드시 " " 안에 쓴다
String의 S는 반드시 대문자로 쓴다
ex. String s = "안녕하세요.";
String은 기본 데이터형이 아닌 클래스이다
*문자열 길이 - 변수명.length()
ex. String st = "안녕하세요";System.out.println( st.length() );5
*문자열은 +를 이용해 한번에 출력할 수 있다
String s1 = "안녕하세요.";
String s2 = " 반갑습니다.";
System.out.println(s1 + s2);
//안녕하세요.반갑습니다.
char형처럼 (s1 + "" + s2) 로 출력하지 않아도 됨
*문자열과 다른 데이터 타입의 + 연산
문자열과 다른 데이터 타입의 연산 결과는 언제나 문자열이다
문자열 앞의 숫자 연산은 먼저 계산된다
100 + 200 + "300" = 300300
000 + 1 + 4 + "300" = 5300
"300" + 100 + 200 = 300100200
"3" + 000 + 10 = 3010 (000=0)

> 형 변환 type casting
데이터의 크기: byte < short = char < int < long < float < double (정수형 < 실수형, 표현가능한 값이 더 많기 때문)
String, boolean - 형 변환 불가능
1. 크기가 작은 → 큰 데이터 타입으로 변환: 자동 형 변환, 캐스트 연산자 필요X (단, byte/short 와 char 는 항상 서로 강제 형 변환)
ex. int → double, long → float, char → int
ex1. char → int 자동 형 변환
char c = 'A';
int i = c;
System.out.println(i);
//65
2. 크기가 큰 → 작은 데이터 타입으로 변환: 강제 형 변환, 캐스트 연산자 필요O
(type)
데이터 타입이 변환되면서 값이 달라지기도 한다
ex. double → int, int → byte, int → char, byte/short ↔ char
ex1. double → int 강제 형 변환
double d = 3.14;
int i = (int)d;
System.out.println(i);
//3
ex2. int → byte 강제 형 변환
int i = 1000;
byte b = (byte)i;
System.out.println(b);
//-24 (1000 = 0011 1110 1000, byte형은 8bit이므로 앞 네자리 잘림, 1110 1000 = -24)
*연산에서의 형 변환
1. int 형보다 작은 type의 연산 (다르지 않더라도) - 자동으로 int형으로 변환되어 연산
ex1. byte + byte = int
byte b1 = 127;
byte b2 = 3;
System.out.println(b1 + b2);
//130 (byte 범위: -128~127, int이기 때문에 byte 범위를 넘어가도 출력됨)
short s = b1 + b2; //Error, int이기 때문
ex2. byte + byte = 결과를 byte로 받고싶은 경우 - (byte)(b1 + b2) 강제 형 변환
byte b1 = 5;
byte b2 = 10;
byte b3 = (byte)(b1 + b2);
ex3. byte/short + char = int
char c = 'A';
byte b = 127;
System.out.println(b + c);
//192 (int 이기 때문에 byte 범위를 넘어가도 출력됨)
ex4. char + char = int
char a = 'A';
System.out.println(a + 1); //66
System.out.println(++a); //B
2. 서로 다른 type의 데이터 연산 - 크기가 더 큰 type으로 변환되어 연산
ex1. float + int = float
float f = 3.14f;
int i = 10;
System.out.println(f + i);
//13.14
ex2. char + int = int
char c = 'A';
int i = 2;
System.out.println(c + i);
//67
ex3. 결과를 char로 받고싶은 경우 - (char)(a + b) 강제 형 변환
int a = 2;
char b = 'A';
System.out.println( (char)(a + b) );
//C
* int / int 를 실수 범위에서 연산하고 싶은 경우
int a = 50;
int b = 4;
double c = (double)a / b;
double c = a / (double)b; //어느 한 쪽을 double형으로 바꿔주면 double로 연산됨
double c = (double)a / (double)b; //모두 double형으로 바꿔줘도 됨
//12.5
//만약 아래와 같이 연산하면 결과가 달라진다
double c = a / b; //12.0 //int로 연산 후 c에 double형으로 저장됨
double c = (double)(a / b); //12.0 //int로 연산 후 double형으로 변환됨
'course 2021 > JAVA' 카테고리의 다른 글
day06 - array insert, update, delete (0) | 2021.08.24 |
---|---|
day05 - control statement (2) | 2021.08.18 |
day04 - array, scanner (1) | 2021.08.18 |
day03 - operator (0) | 2021.08.15 |
day01 - basic (0) | 2021.08.11 |
> 변수 variable
어떤 값을 저장하는 공간
하나의 변수에는 하나의 값만, 한가지 타입의 값만 저장될 수 있음
프로그램을 실행할 때마다 저장된 값이 바뀔 수 있음
사용범위 - 블록{ } 안에서 선언된 변수는 해당 블록 안에서만 유효 (블록이 끝나면 메모리상에서 제거됨)
{
int a = 10;
}
System.out.println(a);
//Error
> 변수 선언
<data type> <변수 식별자 이름>;
int a;
초기화 - 변수 선언 후 처음 값을 저장하는 것, 그 값을 초기값이라고 함
int a;
a = 0;
변수 선언과 초기화를 동시에 하기
int a = 0;
*같은 타입의 변수는 한번에 선언할 수 있다
int a, b;
int a = 1, b = 2;
예)초기화 후 원하는 값 저장
int a = 1;
a = 500;
예)여러가지 값 저장
int a = 0;
int b = 3;
a = b;
System.out.println(a);
//3
int a = 2;
int b = 3;
int c = a + b + 5;
System.out.println(c);
//10
*숫자 여러개를 , 를 이용하여 함께 출력할 수 없다
-다른 데이터타입도 마찬가지 (문자, 문자열 등)
int a = 1;
int b = 2;
System.out.println(a, b);
//Error
> data type
정수형, 실수형, 논리형, 문자형
1. 정수형 - byte, short, int, long
주의. long 선언 시 숫자 뒤에 L 붙여주어야 함 (ex. long a = 10L;)
byte (1byte) < short (2byte) < int (4byte) < long (8byte)
정수(양의정수, 0, 음의정수)
byte → 1byte = 8bit → 2^8=256개의 숫자 표현가능 → 256/2=128, 저장 가능 범위: -128~127
short → 2byte = 16bit → 2^16=65536개의 숫자 표현가능 → 65536/2=32768, 저장 가능 범위: -32768~32767
int → 4byte = 32bit → 2^32=4294967296개의 숫자 표현가능 → 4294967296/2=2147483648, 저장 가능 범위: -2147483648~2147483647
long → 8byte = 64bit → 2^64 (...이하 생략)
ex. byte a = 128; ← 불가능하다
*1byte (8bit) _ _ _ _ _ _ _ _
첫 번째 칸: 부호비트 음수(1) 양수(0)
나머지 7칸: 2진법으로 숫자 표현
ex. 20 = 0001 0100
음수표현
1)양수의 2의 보수 취하기(1의 보수 1→ 0, 0→1 취한 후 1 더하기)
2)양수의 뒤에서부터 처음 1이 나올 때까지 (1까지) 그대로 쓰고, 나머지는 1→ 0, 0→1 바꾸기
ex. -20 = 1110 1100
*정수형은 2진수, 8진수, 16진수로도 값을 저장 할 수 있음
숫자 앞에 2진수는 0b, 8진수는 0, 16진수는 0x를 붙여서 저장
예) int a = 0b1010; ← 2진수, 10진수로 10
int a = 064; ← 8진수, 10진수로 4 + 8*6 = 52
int a = 0x3a4c; ← 16진수, 10진수로 12 + 16*4 + 16*16*10 + 16*16*16*3 = 14924
**16진수 표기법: 10~15를 각각 a~f로 쓴다 (ex. 15 → f, 26 → 1a)
2. 실수형 - float, double
float (4byte) < double (8byte)
주의. float 선언 시 숫자 뒤에 F 붙여주어야 함 (ex. float a = 3.14F;)
실수는 소수점 아래에서 작은 오차가 생길 수 있음
float는 소수점 아래 7자리, double은 소수점 아래 13자리까지 유효
*e 표기법 (num1)e(num2) = (num1)*10^(num2)
double a = 10e3; ← 10000
double b = 123e-3; ← 0.123
double c = 1.23e3; ← 1230
3. 논리형 - boolean
boolean (1byte)
값으로 오직 true, false 만 저장
ex. boolean a = true; (O)
boolean a = True; (X)
숫자값을 논리값으로 해석하지 않음 (0≠false, 1≠true)
boolean a = 0; (X)
다른 datatype과 형 변환 불가능하다
4. 문자형 - char, String
1) char 단일문자
값은 반드시 ' ' 안에 쓴다
ex. char c = 'A';
*아스키코드 1byte 8bit 2^7=128 (첫번째 칸 제외)
영어알파벳대문자/소문자/숫자0~9 포함한 76개의 문자를 저장
2~4번째 칸: 자료의 유형 - 대문자 100~101, 소문자 110~111, 숫자011
5~8번째 칸: 자료의 값 - A 100 0001 (65), a 110 0001 (97), 0 011 0000 (48)
ex. char c = 65; → 'A'가 저장됨
*유니코드 2byte 16bit 2^16=65536 (0~65535)
전세계 언어를 포함 65536가지의 문자값 표현
ex. char c = 44032; → '가'가 저장됨
'\u(16진수)' 저장하면 해당 문자가 저장됨
ex. char c = '\uAC00'; → '가'가 저장됨 (AC00 = 16*16*12 + 16*16*16*10 = 44032)
유니코드 이스케이프 시퀀스 \u : \u다음은 유니코드로 인식됨
16진수 이스케이프 시퀀스 \x : \x다음은 16진수로 인식됨
Invalid unicode 에러 - 주석에 유니코드 이스케이프 시퀀스가 포함된 경우
예)
char c1 = '가';
char c2 = 44032;
char c3 = '\uAC00';
System.out.println(c1 + c2 + c3); //132096 (44032+44032+44032=132096)
System.out.println(c1 + "" + c2 + "" + c3); //가가가
2) String 문자열
값은 반드시 " " 안에 쓴다
String의 S는 반드시 대문자로 쓴다
ex. String s = "안녕하세요.";
String은 기본 데이터형이 아닌 클래스이다
*문자열 길이 - 변수명.length()
ex. String st = "안녕하세요";System.out.println( st.length() );5
*문자열은 +를 이용해 한번에 출력할 수 있다
String s1 = "안녕하세요.";
String s2 = " 반갑습니다.";
System.out.println(s1 + s2);
//안녕하세요.반갑습니다.
char형처럼 (s1 + "" + s2) 로 출력하지 않아도 됨
*문자열과 다른 데이터 타입의 + 연산
문자열과 다른 데이터 타입의 연산 결과는 언제나 문자열이다
문자열 앞의 숫자 연산은 먼저 계산된다
100 + 200 + "300" = 300300
000 + 1 + 4 + "300" = 5300
"300" + 100 + 200 = 300100200
"3" + 000 + 10 = 3010 (000=0)

> 형 변환 type casting
데이터의 크기: byte < short = char < int < long < float < double (정수형 < 실수형, 표현가능한 값이 더 많기 때문)
String, boolean - 형 변환 불가능
1. 크기가 작은 → 큰 데이터 타입으로 변환: 자동 형 변환, 캐스트 연산자 필요X (단, byte/short 와 char 는 항상 서로 강제 형 변환)
ex. int → double, long → float, char → int
ex1. char → int 자동 형 변환
char c = 'A';
int i = c;
System.out.println(i);
//65
2. 크기가 큰 → 작은 데이터 타입으로 변환: 강제 형 변환, 캐스트 연산자 필요O
(type)
데이터 타입이 변환되면서 값이 달라지기도 한다
ex. double → int, int → byte, int → char, byte/short ↔ char
ex1. double → int 강제 형 변환
double d = 3.14;
int i = (int)d;
System.out.println(i);
//3
ex2. int → byte 강제 형 변환
int i = 1000;
byte b = (byte)i;
System.out.println(b);
//-24 (1000 = 0011 1110 1000, byte형은 8bit이므로 앞 네자리 잘림, 1110 1000 = -24)
*연산에서의 형 변환
1. int 형보다 작은 type의 연산 (다르지 않더라도) - 자동으로 int형으로 변환되어 연산
ex1. byte + byte = int
byte b1 = 127;
byte b2 = 3;
System.out.println(b1 + b2);
//130 (byte 범위: -128~127, int이기 때문에 byte 범위를 넘어가도 출력됨)
short s = b1 + b2; //Error, int이기 때문
ex2. byte + byte = 결과를 byte로 받고싶은 경우 - (byte)(b1 + b2) 강제 형 변환
byte b1 = 5;
byte b2 = 10;
byte b3 = (byte)(b1 + b2);
ex3. byte/short + char = int
char c = 'A';
byte b = 127;
System.out.println(b + c);
//192 (int 이기 때문에 byte 범위를 넘어가도 출력됨)
ex4. char + char = int
char a = 'A';
System.out.println(a + 1); //66
System.out.println(++a); //B
2. 서로 다른 type의 데이터 연산 - 크기가 더 큰 type으로 변환되어 연산
ex1. float + int = float
float f = 3.14f;
int i = 10;
System.out.println(f + i);
//13.14
ex2. char + int = int
char c = 'A';
int i = 2;
System.out.println(c + i);
//67
ex3. 결과를 char로 받고싶은 경우 - (char)(a + b) 강제 형 변환
int a = 2;
char b = 'A';
System.out.println( (char)(a + b) );
//C
* int / int 를 실수 범위에서 연산하고 싶은 경우
int a = 50;
int b = 4;
double c = (double)a / b;
double c = a / (double)b; //어느 한 쪽을 double형으로 바꿔주면 double로 연산됨
double c = (double)a / (double)b; //모두 double형으로 바꿔줘도 됨
//12.5
//만약 아래와 같이 연산하면 결과가 달라진다
double c = a / b; //12.0 //int로 연산 후 c에 double형으로 저장됨
double c = (double)(a / b); //12.0 //int로 연산 후 double형으로 변환됨
'course 2021 > JAVA' 카테고리의 다른 글
day06 - array insert, update, delete (0) | 2021.08.24 |
---|---|
day05 - control statement (2) | 2021.08.18 |
day04 - array, scanner (1) | 2021.08.18 |
day03 - operator (0) | 2021.08.15 |
day01 - basic (0) | 2021.08.11 |