๐ ์์
โญ ์์ ๊ฐ์
โ ์์๋?
์์(constant)๋ ๋ณ์์ ๋์ผํ๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋ ๊ณต๊ฐ์ด๋ค.
๋ค๋ง, ๋ณ์์ ๋ค๋ฅธ ์ ์ ํ ๋ฒ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค.
โ ์์ ์ฌ์ฉ ๋ชฉ์
1. ๋ณ๊ฒฝ๋์ง ์๋ ๊ณ ์ ๋ ๊ฐ์ ์ ์ฅํ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๋ค.
2. ์ด๊ธฐํ ์ดํ ๊ฐ ๋์ ์ ์ปดํ์ผ ์๋ฌ๋ฅผ ๋ฐ์์์ผ ๊ฐ์ด ์์ ๋์ง ๋ชปํ๋๋ก ํ๋ค.
ex) ์ํ ๊ณต์์ ์ฌ์ฉ๋๋ ์์น, ํ๋ก๊ทธ๋จ์ ๊ธฐ๋ณธ์ ์ธ ํ๊ฒฝ์ค์ ์ ๋ณด(DB ์ ๋ณด, IP ์ฃผ์์ ๋ณด ๋ฑ)
โญ ์์์ ์ฌ์ฉ
์์๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ณ์์ ๊ฑฐ์ ๋์ผํ๋ค.
๋ค๋ง ์ฐจ์ด์ ์ ์ ์ธ ์ final ํค์๋๋ฅผ ์ฌ์ฉํ๋ค๋ ๋ถ๋ถ์ด ๋ค๋ฅด๋ค.
โ ์์์ ์ ์ธ ๋ฐ ์ด๊ธฐํ
/* 1. ์์ ์ ์ธ
final int AGE; // ์์ ์ ์ธ ์ ์๋ฃํ ์์ final ํค์๋๋ฅผ ๋ถ์ธ๋ค.
/* 2. ์ด๊ธฐํ */
AGE = 20;
//AGE = 30; // ํ ๋ฒ ์ด๊ธฐํ ํ ์ดํ ๊ฐ์ ๋ค์ ๋์
ํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ๋ค.
/* 3. ํ์ํ ์์น์ ์์๋ฅผ ํธ์ถํด์ ์ฌ์ฉํ๋ค. */
System.out.println("AGE์ ๊ฐ : " + AGE); // ์ถ๋ ฅ ๊ตฌ๋ฌธ์์ ์ฌ์ฉ
System.out.println("AGE์ 2๋ฐฐ : " + (AGE * 2)); // ํ์ ์ ์ฐ์ฐ์์ ํธ์ถํด์ ์ฌ์ฉ
โ ์์์ ๋ช ๋ช ๊ท์น
1. ๋ชจ๋ ๋ฌธ์๋ ์๋ฌธ์ ๋๋ฌธ์ ํน์ ์ซ์๋ง ์ฌ์ฉํ๋ค.
final int AGE1 = 20;
final int AGE2 = 30;
final int age3 = 40; // ์๋ฌธ์๋ก ์ฌ์ฉ์ ๊ฐ๋ฅํ์ง๋ง ๋ณ์์ ๊ตฌ๋ถํ๊ธฐ ํ๋ค๊ธฐ ๋๋ฌธ์ ๋ง๋ค์ด์ง ๊ท์น์ด๋ค.
2. ๋จ์ด์ ๋จ์ด ์ฐ๊ฒฐ์ ์ธ๋์ค์ฝ์ด( _ )๋ฅผ ์ฌ์ฉํ๋ค.
final int MAX_AGE = 60;
final int MIN_AGE = 20;
final int minAge = 30; // camel case ์ฌ์ฉ์ด ๊ฐ๋ฅํ์ง๋ง ์ญ์ ๋ณ์์ ๊ตฌ๋ถ๋์ง ์๋๋ค.
๐ ์ค๋ฒํ๋ก์ฐ
โญ ์ค๋ฒํ๋ก์ฐ ๊ฐ์
โ ์ค๋ฒํ๋ก์ฐ๋?
์ค๋ฒํ๋ก์ฐ(overflow)๋ ๋ณ์๊ฐ ๋ด์ ์ ์๋ ๊ฐ์ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ ๋ฐ์ดํฐ๋ฅผ ๋ด์์ ๋ ๋ฐ์ํ๋ ํ์์ ์ค๋ฒํ๋ก์ฐ๋ผ๊ณ ํ๋ค.
์๋ฃํ ๋ณ ๊ฐ์ ์ต๋ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ ๊ฒฝ์ฐ ๋ฐ์ํ carry๋ฅผ ๋ฒ๋ฆผ ์ฒ๋ฆฌํ๊ณ sign bit๋ฅผ ๋ฐ์ ์์ผ ์ต์๊ฐ์ผ๋ก ์ํ์ํค๋ ํ์์ด๋ค.
System.out.println("byte ๊ฐ์ ๋ฒ์ : " + Byte.MIN_VALUE + " ~ " + Byte.MAX_VALUE);
System.out.println("char ๊ฐ์ ๋ฒ์ : " + (int)Character.MIN_VALUE + " ~ " + (int)Character.MAX_VALUE);
System.out.println("short ๊ฐ์ ๋ฒ์ : " + Short.MIN_VALUE + " ~ " + Short.MAX_VALUE);
System.out.println("int ๊ฐ์ ๋ฒ์ : " + Integer.MIN_VALUE + " ~ " + Integer.MAX_VALUE);
System.out.println("long ๊ฐ์ ๋ฒ์ : " + Long.MIN_VALUE + " ~ " + Long.MAX_VALUE);
System.out.println("float ๊ฐ์ ๋ฒ์ : " + Float.MIN_VALUE + " ~ " + Float.MAX_VALUE);
System.out.println("double ๊ฐ์ ๋ฒ์ : " + Double.MIN_VALUE + " ~ " + Double.MAX_VALUE);
โ ์ค๋ฒํ๋ก์ฐ ๋ฐ์ ํ์ธ๊ณผ ํด๊ฒฐ ๋ฐฉ๋ฒ
1. ์ค๋ฒํ๋ก์ฐ
byte num1 = 127;
System.out.println("num1 : " + num1); // 127 : byte์ ์ต๋ ์ ์ฅ ๋ฒ์
num1++; // 1 ์ฆ๊ฐ
System.out.println("num1 overflow : " + num1); // -128 : byte์ ์ต์ ์ ์ฅ ๋ฒ์
2. ์ธ๋ํ๋ก์ฐ
byte num2 = -128;
System.out.println("num2 : " + num2); // -128 : byte์ ์ต์ ์ ์ฅ ๋ฒ์
num2--; // 1 ๊ฐ์
System.out.println("num2 underflow : " + num2); // 127 : byte์ ์ต๋ ์ ์ฅ ๋ฒ์
3. ๋ ผ๋ฆฌ์ ๋ฌธ์ ๋ฐ์๊ณผ ํด๊ฒฐ ๋ฐฉ๋ฒ
/* ===== ๋ฌธ์ ๋ฐ์ ===== */
int firstNum = 1000000; // 100๋ง
int secondNum = 700000; // 70๋ง
int multi = firstNum * secondNum; // 7์ฒ์ต์ด ๋์์ผ ํจ
System.out.println("firstNum * secondNum = " + multi); // --79669248 ์ด ๋์จ๋ค.
/* ===== ํด๊ฒฐ ๋ฐฉ๋ฒ ===== */
/* ์ค๋ฒํ๋ก์ฐ๋ฅผ ์์ธกํ๊ณ ๋ ํฐ ์๋ฃํ์ผ๋ก ๊ฒฐ๊ณผ๊ฐ์ ๋ฐ์์ ์ฒ๋ฆฌํ๋ค. */
long longMulti = firstNum * secondNum;
System.out.println("longMulti : " + longMulti); // ์ฌ์ ํ ์ค๋ฒํ๋ก์ฐ๊ฐ ๋ฐ์ํ๋ค.
/* ์ด๋ฏธ ์ค๋ฒํ๋ก์ฐ ์ฒ๋ฆฌ๋ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ง๊ณ ๋ณ์์ ๋ด๊ธฐ ๋๋ฌธ์ ์์ ๊ฒฐ๊ณผ๋ ๋ณ ์ฐจ์ด๊ฐ ์๋ค.
* ๊ทธ๋ผ ์ด๋ป๊ฒ ํด๊ฒฐ์ ํด์ผ ํ๋?
* ๊ณ์ฐ์ด ์ฒ๋ฆฌ ๋๊ธฐ ์ ์ long ํ์
์ผ๋ก ์๋ฃํ์ ๋ณ๊ฒฝํด์ฃผ์ด์ผ ํ๋ค. (๊ฐ์ ํ๋ณํ ์ด์ฉ)
* */
long result = (long) firstNum * secondNum;
System.out.println("result : " + result); // ์ ์์ ์ผ๋ก 7์ฒ์ต์ด ์ถ๋ ฅ๋ ๊ฒ์ด๋ค.
๐ ํ๋ณํ
โญ ํ๋ณํ ๊ฐ์
โ ํ๋ณํ์ด๋?
์๋ฐ ํ๋ณํ(casting)์ด๋ ๋ณ์ ๋๋ ๋ฆฌํฐ๋ด์ ๋ค๋ฅธ ํ์ ์ผ๋ก ๋ณํํ๋ ๊ฒ์ ๋งํ๋ค.
ํ๋ณํ์ ํ๋ ์ด์ ๋ ํ๋ก๊ทธ๋จ์์ ๋ณ์์ ๊ฐ์ ๋ฃ๊ฑฐ๋ ์ฐ์ฐ์ ์ํํ ๋๋ ๊ฐ์ ํ์ ๋ผ๋ฆฌ๋ง ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ด๋ค.
โ ํ๋ณํ์ ์ข ๋ฅ ๋ฐ ๊ท์น
1. ์๋ ํ๋ณํ (๋ฌต์์ ํ๋ณํ)
์ปดํ์ผ๋ฌ๊ฐ ์๋์ผ๋ก ์ํํด ์ฃผ๋ ํ์ ๋ณํ์ด๋ค.
๋ฐ์ดํฐ ์์ค ๊ฐ๋ฅ์ฑ์ด ์๋ ๊ฒฝ์ฐ ์๋์ผ๋ก ํ์ ์ ๋ง์ถฐ์ค๋ค.

/* ========== ์์ ์๋ฃํ์์ ํฐ ์๋ฃํ์ผ๋ก๋ ์๋ ํ๋ณํ ๋๋ค. ========== */
/* 1. ์ ์๋ผ๋ฆฌ์ ์๋ ํ๋ณํ */
/* ์ ์ ๋ ํฐ ์๋ฃํ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฎ๊ฒจ๋ ๋ฌธ์ ์์ด ์๋ ํ๋ณํ ์ฒ๋ฆฌ๋๋ค. */
byte bNum = 1;
short sNum = bNum;
int iNum = sNum;
long lNum = iNum;
/* ์ฐ์ฐ ์์๋ ์๋์ผ๋ก ํฐ ์ชฝ ์๋ฃํ์ ๋ง์ถฐ์ ๊ณ์ฐํ๋ค. */
int num1 = 10;
long num2 = 20;
//int result1 = num1 + num2; // ์๋์ผ๋ก ํฐ ์ชฝ ์๋ฃํ์ธ long์ผ๋ก ๋ณ๊ฒฝ ํ ๊ณ์ฐํ๊ธฐ ๋๋ฌธ์ intํ ๋ณ์์ ๊ฐ์ ๋ด์ ์ ์๋ค.
long result1 = num1 + num2; // int + long์ ์๋ก ๋ค๋ฅธ ์๋ฃํ์ด๋ผ ๋ฐ์ดํฐ ์์ค์ด ๋ฐ์ํ์ง ์๋ int-> long ๋ณํ์ ์๋ ์ํ ํ ์ฐ์ฐํ๋ค.
System.out.println("result1 : " + result1);
/* 2. ์ค์ ๋ผ๋ฆฌ์ ์๋ ํ๋ณํ */
float fNum = 4.0f;
double dNum = fNum;
/* ์ฐ์ฐ ์์๋ ์๋์ผ๋ก ํฐ ์ชฝ ์๋ฃํ์ ๋ง์ถฐ์ ๊ณ์ฐ๋๋ค. */
double result2 = fNum + dNum;
System.out.println("result2 : " + result2);
/* ========== ์ ์๋ ์ค์๋ก ์๋ ํ๋ณํ ๋๋ค. ========== */
/* ์ ์๋ฅผ ์ค์๋ก ๋ณ๊ฒฝํ ๋ ์์์ ์๋ฆฌ์๊ฐ ์์ด๋ ์ค์ ํํ๋ก ํํ์ด ๊ฐ๋ฅํ๋ค.
* ์ด ๋ ๋ฐ์ดํฐ ์์ค์ด ์๊ธฐ ๋๋ฌธ์ ์๋ ํ๋ณํ์ด ๊ฐ๋ฅํ๋ค.
* ์ค์ ๊ฐ์ ์ ์ฅํ๋ ๋งค์ปค๋์ฆ์ ๊ฐ์ง ๊ฒ๊ณผ ๋ฌ๋ฆฌ ์ค์ํ์ ์ง์๋ถ์ ๊ฐ์๋ถ๋ฅผ ๋ฐ๋ก ๋๋ ์ ์์ฑํ๊ธฐ ๋๋ฌธ์
* ๋ฐ์ดํธ ํฌ๊ธฐ ๋ณด๋ค ํจ์ฌ ๋ ๋ง์ ๊ฐ์ ํํํ ์ ์๋ค.
* */
//long eight = 888888888888888888888; // ์ด๊ฒ๋ ์ง๋์ผ๋ก ํ๋ณํ ๋ ๊ฒ์ด๋ค. (int ๋ฒ์ ๋ฒ์ด๋๋ฉด ์๋ฌ ๋ฐ์)
long eight = 8;
float four = eight;
System.out.println("four : " + four);
/* ๋ฐ๋ผ์ ์ค์์ ์ ์์ ์ฐ์ฐ์ ์ค์๋ก ์ฐ์ฐ ๊ฒฐ๊ณผ๊ฐ ๋ฐํ๋๋ค. */
float result3 = eight + four;
System.out.println("result3 : " + result3);
/* ========== ๋ฌธ์ํ์ intํ์ผ๋ก ์๋ ํ๋ณํ ๋๋ค. ========== */
char ch1 = 'a';
int charNumber = ch1;
System.out.println("charNumber : " + charNumber);
/* int๋ก type์ด ์ ํด์ง์ง ์์ ๋ฆฌํฐ๋ด ํํ์ ์ ์๋ char ํ ๋ณ์์ ๊ธฐ๋ก ๊ฐ๋ฅํ๋ค. */
char ch2 = 65;
System.out.println("ch2 : " + ch2);
/* ========== ๋
ผ๋ฆฌํ์ ํ๋ณํ ๊ท์น์์ ์ ์ธ๋๋ค. ========== */
/* ์ด๋ ์๋ฃํ์ด๋ boolean์ ํ๋ณํ ํด์ ๋ด์ ์ ์๋ค. */
boolean isTrue = true;
//byte b = isTrue;
//short s = isTrue;
//int i = isTrue;
//long l = isTrue;
//char c = isTrue;
//float f = isTrue;
//double d = isTrue;
2. ๊ฐ์ ํ๋ณํ (์์์ ํ๋ณํ)
ํ๋ณํ(casting) ์ฐ์ฐ์๋ฅผ ์ด์ฉํ ๊ฐ์ ์ ์ผ๋ก ์ํํ๋ ํ๋ณํ์ด๋ค.
์๋ ํ๋ณํ์ ์กฐ๊ฑด๊ณผ ์ ๋ฐ๋์ธ ๊ฒฝ์ฐ ๊ฐ์ ํ๋ณํ์ ์ฌ์ฉํ๋ค.
/* ====== ํฐ ์๋ฃํ์์ ์์ ์๋ฃํ์ผ๋ก ๋ณ๊ฒฝ ์ ๊ฐ์ ํ๋ณํ์ด ํ์ํ๋ค. ====== */
/* 1. ์ ์ ๋ผ๋ฆฌ์ ๊ฐ์ ํ๋ณํ */
long lNum = 8;
//int iNum = lNum; // ๋ฐ์ดํฐ ์์ค ๊ฐ๋ฅ์ฑ์ ์ปดํ์ผ๋ฌ๊ฐ ์๋ ค์ค๋ค. (์๋ฌ๋จ)
int iNum = (int) lNum; // ๋ณ๊ฒฝํ๋ ค๋ ์๋ฃํ์ ๋ช
์ํ์ฌ ๊ฐ์ ํ๋ณํ์ ํด์ผ ํจ
short sNum = (short) iNum;
byte bNum = (byte) sNum;
/* 2. ์ค์ ๋ผ๋ฆฌ์ ๊ฐ์ ํ๋ณํ */
double dNum = 8.0;
//float fNum = dNum; // ๋ฐ์ดํฐ ์์ค ๊ฐ๋ฅ์ฑ์ ์ปดํ์ผ๋ฌ๊ฐ ์๋ ค์ค๋ค. (์๋ฌ๋จ)
float fNum = (float) dNum;
System.out.println(fNum);
/* ====== ์ค์๋ฅผ ์ ์๋ก ๋ณ๊ฒฝ ์ ๊ฐ์ ํ๋ณํ์ด ํ์ํ๋ค. ====== */
float fNum2 = 4.0f;
//long lNum2 = fNum2; // float๋ 4byte, long์ 8byte์์๋ ์๋ ํ๋ณํ ๋ถ๊ฐ๋ฅ (์์์ ์๋ฆฌ ์ดํ ๋ฐ์ดํฐ ์์ค ๊ฐ๋ฅ์ฑ)
long lNum2 = (long) fNum2; // ๊ฐ์ ํ๋ณํ์ ์๋ฏธ๋ '๋ด๊ฐ ๋ฐ์ดํฐ ์์ค์ ๊ฐ์ํ ํ
๋ ํ๋ณํ ํด์ค~' ๋ผ๋ ์๋ฏธ์ด๋ค.
/* ====== ๋ฌธ์ํ์ int๋ฏธ๋ง ํฌ๊ธฐ์ ๋ณ์์ ์ ์ฅํ ๋ ๊ฐ์ ํ๋ณํ์ด ํ์ํ๋ค. ====== */
char ch = 'a';
byte bNum2 = (byte) ch; // ๋น์ฐํ char ์๋ฃํ๋ณด๋ค ์์ ํฌ๊ธฐ์ด๋ ๊ฐ์ ํ๋ณํ์ ํด์ผํ๋ค.
short sNum2 = (short) ch; // ๊ฐ์ 2byte์ด์ง๋ง ๋ถํธ๋นํธ(sign bit)๋ก ์ธํ ๊ฐ์ ๋ฒ์๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๊ฐ์ ํ๋ณํ์ ํด ์ฃผ์ด์ผ ํ๋ค.
/* ์ถ๊ฐ์ ์ผ๋ก ์ ์๋ฅผ char ์๋ฃํ์ ๊ฐ์ ํ๋ณํํด์ ๋์
ํ๊ธฐ ํ
์คํธ */
int num1 = 97;
int num2 = -97;
char ch2 = (char) num1;
char ch3 = (char) num2; // ์์๋ ๊ฐ์ ํ๋ณํ ํ๋ฉด ๋์
ํ ์ ์๋ค.
System.out.println("ch2 : " + ch2);
System.out.println("ch3 : " + ch3);
/* ====== ๋
ผ๋ฆฌํ์ ๊ฐ์ ํ๋ณํ ๊ท์น์์๋ ์ ์ธ๋๋ค. ====== */
boolean isTrue = true;
// byte b = (byte) isTrue;
// short s = (short) isTrue;
// int i = (int) isTrue;
// float f = (float) isTrue;
// double d = (double) isTrue;
// char c = (char) isTrue;
โ ์๋ ํ๋ณํ๊ณผ ๊ฐ์ ํ๋ณํ์ ์ด์ฉํ ์ฐ์ฐ
1. ์๋ก ๋ค๋ฅธ ์๋ฃํ๋ผ๋ฆฌ์ ์ฐ์ฐ
/* ๋ค๋ฅธ ์๋ฃํ ๋ผ๋ฆฌ ์ฐ์ฐ์ ํฐ ์๋ฃํ์ผ๋ก ์๋ ํ๋ณํ ํ ์ฐ์ฐ ์ฒ๋ฆฌ ๋๋ค. */
int iNum = 10;
long lNum = 100;
/* ์๋ฐ์์๋ ๊ฐ์ ์๋ฃํ๋ผ๋ฆฌ๋ง ์ฐ์ฐ์ด ๊ฐ๋ฅํ๋ค.
* ๋ฐ๋ผ์ ์๋ก ์๋ฃํ์ด ๋ค๋ฅธ ๋ ์๋ฃ๋ฅผ ์ฐ์ฐํ ๋ ์๋ฃํ์ด ๊ฐ์์ง๋๋ก ํ๋ณํ์ ํด ์ฃผ์ด์ผ ํ๋ค.
*/
/* ๋ฐฉ๋ฒ1. ๋ ์์ ์ฐ์ฐ ๊ฒฐ๊ณผ๋ฅผ int ํ์ผ๋ก ๋ณํ ํ int ์๋ฃํ ๋ณ์์ ๋ฆฌํด๋ฐ๋๋ค. */
//int iSum = iNum + lNum; // ๊ทธ๋ฅ์ ์๋๋ค. ๋ ์๋ฃํ์ ์ฐ์ฐ ๊ฒฐ๊ณผ๋ ํฐ ์ชฝ ์๋ฃํ์ธ long์ด ๋๊ณ , longํ ๊ฐ์ intํ ๋ณ์์ ๋ด๊ธธ ์ ์๋ค.
int iSum = (int) (iNum + lNum);
System.out.println("iSum : " + iSum);
/* ๋ฐฉ๋ฒ2. long ํ ๊ฐ์ int๋ก ๊ฐ์ ํ๋ณํ ํ๋ค. */
int iSum2 = iNum + (int) lNum;
System.out.println("iSum2 : " + iSum2);
/* ๋ฐฉ๋ฒ3. ๊ฒฐ๊ณผ ๊ฐ์ longํ ์๋ฃํ์ผ๋ก ๋ฐ๋๋ค(์๋ ํ๋ณํ ์ด์ฉ) */
long lSum = iNum + lNum;
System.out.println("lSum : " + lSum);
2. ํ๋ณํ์ ์ด์ฉํ ์ฐ์ฐ ์ ์ฃผ์์ฌํญ
/* ์ฃผ์! int ๋ฏธ๋ง์ ์ฐ์ฐ์ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ intํ ์ด๋ค. */
byte byteNum1 = 1;
byte byteNum2 = 2;
short shortNum1 = 3;
short shortNum2 = 4;
int result1 = byteNum1 + byteNum2;
int result2 = byteNum1 + shortNum1;
int result3 = shortNum1 + byteNum1;
int result4 = shortNum1 + shortNum2;
System.out.println("result1 : " + result1);
System.out.println("result2 : " + result2);
System.out.println("result3 : " + result3);
System.out.println("result4 : " + result4);
3. ์๋ํ์ง ์์ ๋ฐ์ดํฐ ์์ค

int iNum = 290;
byte bNum = (byte) inum;
System.out.println("iNum : " + iNum);
System.out.println("bNum : " + bNum); // ๋นํธ ์๋ถ๋ถ ์์ค๋ก ์์ธก ์ด๋ ค์
4. ์๋ํ ๋ฐ์ดํฐ ์์ค
double height = 175.5;
int floorHeight = (int) height;
System.out.println("height : " + height);
System.out.println("floorHeight : " + floorHeight); // ์์์ ์ ์ญ์ ์ด์ฉํ ์ ์๋ค.