변수란?
자료형이란?
미리 정해진 크기의 데이터를 표현하며, 변수 자체에 값을 저장하는 방식입니다.
모두 소문자로 시작하며 비객체 타입으로 null값을 가질 수 없습니다.
기본형 데이터는 모두 메모리의 스택(Stack)영역에 저장됩니다.
기본형 데이터는 한 번 할당하면 필드 값을 변경할 수 없는 불변 객체입니다. (재할당은 가능)
| 구분 | Type | bit수 | 값 |
|---|---|---|---|
| 논리형 | boolean | 8 | true / false |
| 정수형 | byte | 8 | -128 ~ -127 |
| short | 16 | -32768 ~ 32767 | |
| int | 32 | -2147483648 ~ 2147483647 | |
| long | 64 | -9223372036854775808L ~ 9223372036854775807L | |
| 실수형 | float | 32 | float f = 0.1234567890123456789f; //0.12345679 |
| double | 64 | double d = 0.12345678901234567; //0.12345678901234568 | |
| 문자형 | char | 16 | \u0000 ~ \uffff |
정수형은 기본적으로 int형을 사용하고, 실수형은 기본적으로 double을 사용한다.
(정수형에서 long을 사용할 때는 뒤에 l을, 실수형에서 float을 사용할 때는 뒤에 f를 붙여준다.)
크기가 미리 정해질 수 없는 데이터를 표현하며, 변수에는 주소값만 저장하는 방식입니다.
기본적으로 제공하는 클래스, 직접 만든 클래스, 배열, 열거 타입 등을 모두 참조형이라고 합니다.
참조형 변수는 객체형으로 null로 초기화 시킬 수 있습니다.
메모리의 힙(Heap)에 실제 값을 저장하고, 힙의 주소값을 갖는 변수를 스택(Stack)에 저장합니다.
참조형 데이터는 기본적으로 가변 객체입니다. 예외적으로 String형만 불변 객체입니다.
참조형 데이터를 생성할 때는
new키워드를 사용해서 객체를 생성하여 변수에 해당 객체의 주소값을 할당해줍니다.
String 자료형 : 문자열을 관리하는 데이터 타입으로 기본적으로 참조형이지만, 기본형 데이터의 성질을 같이 가지고 있는 데이터 타입입니다.
// 리터럴 방식과 생성자 방식 비교
Stirng str1 = "Hello" // 리터럴 방식
String str2 = "Hello" // str1 == str2 (true) , str1.equals(str2) (true)
String str3 = new String("Hello"); // 생성자 방식
String str4 = new String("Hello"); // str3 == str4 (false) , str1.equals(str2) (true)
위와 같이 리터럴 방식으로 생성한 경우 Java String Pool이라는 공간에 문자열을 상수로 생성하고, 이미 있는 문자열이라면 해당 문자열의 주소를 변수에 할당합니다. == 비교 연산자는 변수에 담긴 값, 즉 주소값을 비교하므로, str1 == str2는 같은 주소를 담고 있기 때문에 true를 반환하게 됩니다.
이와 반대로 생성자 방식으로 생성한 경우 new 키워드를 사용하여 Heap에 새로운 공간을 할당 받고, 해당 공간에 문자열을 저장하게 됩니다. 그렇기 때문에 str3와 str4가 가르키는 공간은 각각 생성된 다른 공간이기 때문에 주소값이 달라져 ==연산자로 비교하면 false가 나오게 됩니다.
참조형 데이터는 값이 같은지 비교하기 위해서는 .equals 메서드를 사용해야 합니다.
변수의 타입(형)을 다른 타입(형)으로 변환하는 것을 형 변환(Type Casting) 이라고 합니다.
기본적으로 기본형은 기본형끼리, 참조형은 참조형끼리 형 변환이 가능합니다.
(예외적으로 boolean 타입은 다른 기본형과 호환되지 않습니다.)
int i = 300; //int형의 bit수는 32bits
byte b = (byte)i; // byte형의 bit수는 8bits -> 24bit의 자료 손실이 일어나므로 형 변환을 명시적으로 표현
기본형과 참조형의 형 변환을 위해서는 Wrapper Class를 활용합니다.
int i = 10; Integer num = Integer.valueOf(i); // boxingInteger num = 10; int i = num.intValue(); // unboxingint i = 10; Integer num = i; / Integer num = new Integer(10); int i = num;<기본형 Wrapper>.parse<기본형 Wrapper>(str);int i = Integer.parseInt(s1);String s1 = String.valueOf(i); / String s2 = "" + i;String s3 = num.toString(); / String s4 = "" + num;<기본형 Wrapper>.valueOf(str);Integer num = Integer.valueOf(s3);조건문이란?
조건으로 사용할 수 있는 범위
if(조건식) { // 조건식이 true일 때, 아래 실행문이 동작
// 실행문;
}
if(조건식){ // 조건식이 true일 때, 실행문1만 동작
// 실행문1;
}
else{ // 조건식이 false일 때, 실행문2만 동작
// 실행문2;
}
if(조건식1){ // 조건식1이 true일 때, 실행문1만 동작
// 실행문1;
}
else if(조건식2) { // 조건식1이 false지만, 조건식2가 true일 때 실행문2만 동작
// 실행문2;
}
else{ // 조건식1도 false이고, 조건문2도 false라면, 실행문3만 동작
// 실행문3;
}
switch(조건 변수){
case value1: // 조건변수가 value1이랑 같다면, 실행문1, 실행문2가 순서대로 실행
// 실행문1
case value2: // 조건변수가 value2랑 같다면 실행문2만 실행
// 실행문2
break;
case value3: // 조건변수가 value3이랑 같다면 실행문3만 실행
// 실행문3
break;
case value4:
case value5: // 조건변수가 value4 이거나 value5랑 같다면 실행문4만 실행
// 실행문4
break;
default: // 그 외의 값은 모두 실행문5가 실행
// 실행문5
}
반복문이란?
반복문의 4가지 요소
for(<초기식>; <조건식>; <증감식>) {
<실행식>
}
// ex) 0부터 9까지 세로로 출력하는 반복문
for(int i = 0; i < 10; i++) {
System.out.println(i);
}
<초기식>
while(<조건식>) {
<실행식>
<증감식>
}
// ex) 0부터 9까지 세로로 출력하는 반복문
int i = 0;
while(i < 10) {
System.out.println(i);
i++;
}
for문과 while문은 서로 변환하며 사용할 수 있습니다. while문에 비해서 for문이 여러가지 조건을 빠트리지 않고 반복할 수 있다는 장점이 있습니다.
무한 반복과 같은 경우에는 while문에 조건식으로 true를 넣어서 무한 반복하고, if문과 같은 조건문을 통해 반복문을 중단할 수 있습니다.