백기선 선생님과 함께하는 JAVA스터디 2주차
- 학습할 것
프리미티브 타입 종류와 값의 범위 그리고 기본 값
프리미티브 타입과 레퍼런스 타입
리터럴
변수 선언 및 초기화하는 방법
변수의 스코프와 라이프타임
타입 변환, 캐스팅 그리고 타입 프로모션
1차 및 2차 배열 선언하기
타입 추론, var
type | size in bytes | range | default value |
---|---|---|---|
boolean | 정의되지 않음(일반적으로 1byte) | true or false | false |
char | unsigned 2byte | '\u0000'(0) to '\uffff'(65535) | '\u0000' |
byte | 1byte | -128 to 127 | 0 |
short | 2byte | -32,768 to 32,767 | 0 |
int | 4byte | -231 to -231-1 | 0 |
long | 8byte | -263 to -263-1 | 0 |
float | 4byte | (6~7자리 정밀도) | 0.0f |
double | 8byte | (15자리 정밀도) | 0.0d |
참고 : https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
리터럴은 데이터 그 자체를 뜻한다.
변수에 넣는 변하지 않는 데이터를 의미하는 것이다.
int a = 10;
여기서 10은 리터럴이 된다.
상수와 리터럴을 구분해야하는데, 상수는 변하지 않는 변수(메모리 위치)를 의미하며 final을 붙여서 변수를 선언하면 된다.
리터럴은 변수의 값이 변하지 않는 데이터(메모리 위치안의 값)이다.
btye value1=120;
int value3=300;
long value4= 25000L;
여기서 vlaue4를 보면, 숫자 뒤에 대문자 L(혹은 소문자l)을 붙이는 경우가 있는데 이것은 변숫값이 long형이라고 명시적으로 선언하는 것이다. 이러한 문자표기법을 자바에서는 정수 리터럴이라고도 한다.
float price = 2.99f;
int a;
int a=100;
자동으로 타입을 변환 시키는 것
double a = 10;
double b= 10.0f + 3.14;
System.out.println(a);
System.out.println(b);
여기서 a의 결과는 10.0이 된다. int 데이터인 10을 넣었지만 double 형식이기 때문에 자동으로 타입 변환이 된다.
b의 결과는 float와 double의 데이터의 산술 연산을 수행하여서 float데이터가 double로 자동 타입 변환 된다.
사용자가 type cast를 강제로 수행하는 것
(변환할 타입)변환할 데이터
int a =1;
int b=2;
double res1 = a/b;
double res2 = (double) a/b;
여기서 res1은 0.0이 출력된다. int형이 0으로 반환되어서 double에 결과가 대입될 때 자동으로 0.0으로 대입이 되는 것이다.
res2의 결과는 0.5가 된다. 피연산자 중의 하나의 타입이 double형이 되면, 나눗셈 연산을 위해 나머지 하나의 피연산자도 자동으로 타입 변환이 된다.
[데이터형] 배열이름[] = new [데이터형][배열길이];
[데이터형] 배열이름[] = new 데이터형[]{ [객체0],[객체1], .... };
[데이터형] 배열이름[] = new { [객체0], [객체1].... };
원래는 [데이터형][] 배열이름 = new [데이터형][배열길이];
이렇게 많이 사용하는데 뭔가 나는 c언어를 먼저 접해서 그런지 항상 배열이름[];
이렇게 쓰게 된다.. 이게 더 익숙한데 둘다 상관없으니까 난 이렇게 써야지
사용예) String str[]=new String[19];
String str[] = new String[]{"a","b","c"};
String str[]= {"a","b","c"};
[변수형] 배열이름 [][]= new [변수형][1차원배열 길이] [2차원 배열길이];
[변수형] 배열이름 [][]=new 변수형[][]{ {1차원객체1,1차원객체2},{2차원객체1,2차원객체2}};
[변수형] 배열이름 [][]= {{1차원객체1,1차원객체2},{2차원객체1,2차원객체2}};
이렇게 쓰니까 좀 복잡해보이지만 실은 엄청 간단하다.
String arr[][]= new String[10][20];
String arr[][]= new String[][]{ {"a","b","c"}, {"d","e","f"} };
2차원 배열만 가능한 것이 아니라 다양한 다차원배열도 이런식으로 사용이 가능하다.
하지만 var를 사용할 때 주의해야할 점이 몇가지 있다.
var
- 초기화 값이 있는 지역변수로만 선언이 가능하다.
- null값으로 초기화 될 수 없다.
- 람다 표현식에는 var를 사용할 수 없다.
- 배열을 선언할 때 var 대신 타입을 명시해주어야한다.