
์๋ฐ ๋ฐ์ดํฐ ํ์ : ๊ธฐ๋ณธํ๊ณผ ์ฐธ์กฐํ์ ํต์ฌ ์ดํด!
์๋ฐ(Java) ์ธ์ด์ ๋ชจ๋ ๋ฐ์ดํฐ๋ ๊ทธ ์ฑ๊ฒฉ๊ณผ ํฌ๊ธฐ์ ๋ฐ๋ผ ์ ํด์ง ๋ฐ์ดํฐ ํ์ ์ ๊ฐ์ง๋๋ค. ์ด ๋ฐ์ดํฐ ํ์ ์ ์ ํํ ์ดํด๋ ํจ์จ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ๋ฒ๊ทธ ์๋ ์ฝ๋ ์์ฑ์ ์ํ ์ฒซ๊ฑธ์์ ๋๋ค. ์๋ฐ์ ๋ฐ์ดํฐ ํ์ ์ ํฌ๊ฒ ๊ธฐ๋ณธ ํ์ ๊ณผ ์ฐธ์กฐํ ํ์ ์ผ๋ก ๋๋ฉ๋๋ค.

๊ธฐ๋ณธ ํ์ (Primary Type)
๊ธฐ๋ณธ ํ์ ์ ์ค์ ๋ฐ์ดํฐ ๊ฐ ์์ฒด๋ฅผ ์คํ(Stack) ๋ฉ๋ชจ๋ฆฌ์ ์ง์ ์ ์ฅํ๋ ๋ฐฉ์์ผ๋ก, ์๋ฐ์์ ์ ๊ณตํ๋ 8๊ฐ์ง ํ์ ์ ์๋ฏธํฉ๋๋ค. ์ด๋ค์ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๊ฐ ๊ณ ์ ๋์ด ์์ด ์ฒ๋ฆฌ ์๋๊ฐ ๋น ๋ฆ ๋๋ค.
1. ์ ์ํ(Integer Type)
์ ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก int ํ์ ์ด๊ณ ๊ฐ์ ๋ฒ์์ ๋ฐ๋ผ byte, short, long์ ์ฌ์ฉํฉ๋๋ค. ์ ์ ๋ฆฌํฐ๋ด์ ๋ค์๊ณผ ๊ฐ์ด ๋ค์ํ ์ง๋ฒ์ผ๋ก ํํํ ์ ์๊ณ , ๋ชจ๋ ์ ์ ํ์ ๋ณ์์ ๋์ ํ ์ ์๋ค. 2์ง์๋ฉด ๊ฐ ์์ '0b', '0B'๋ก ํํํ๊ณ 8์ง์๋ฉด ๊ฐ ์์ '0'์ผ๋ก ํํํ๊ณ 16์ง์๋ฉด ๊ฐ ์์ '0x', '0X'๋ผ๋ ์ ๋์ฌ๋ฅผ ๋์ด ์์ฑํ ์ ์์ต๋๋ค. long ํ์ ์ ์ ์ ๋ฆฌํฐ๋ด์ 'L'์ด๋ l(์๋ฌธ์ L) ์ ๋ฏธ์ฌ๋ฅผ ๋ถ์ฌ ํํํ๋ค.
| ํ์ | ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ | ๊ฐ์ ๋ฒ์ | ๊ธฐ๋ณธ๊ฐ | |
| byte | 1byte | 8bit | -128 ~ 127 | 0 |
| short | 2byte | 16bit | -32,768 ~ 32,767 | 0 |
| int | 4byte | 32bit | -2,147,483,648 ~ 2,147,483,647 | 0 |
| long | 8byte | 64bit | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | 0L |
int totalScore = 95;
byte memory = 64;
long world = 80000000000L;
int num1 = 15; // 10์ง์
byte num2 = 0b1111; // 2์ง์ 15
short num3 = 017; // 8์ง์ 15
int num4 = 0xF; // 16์ง์ 15
long num5 = 300000L; // L์ long ํ์
๋ช
์
์ ์ํ ํ์ ์ ๊ฐ๊ฐ ํ์ ๋ง๋ค ์ฌ์ฉํ ์ ์๋ ์ ๋์ฌ, ์ ๋ฏธ์ฌ๋ฅผ ๋ถ์ฌ ํ์ฉํ ์ ์๋ค.
๐ฉ ์ฌ๊ธฐ์ ์ ๊น ::: ์ง์๋ณ ํน์ง
2์ง์ : '0b' ๋๋ '0B'๋ก ์์ํ๊ณ 0๊ณผ 1๋ก ๊ตฌ์ฑ
์) 0b1011 → 1x2³ + 0x2² + 1x2¹ + 1x2โฐ → 11
8์ง์ : 0์ผ๋ก ์์ํ๊ณ 0~7 ์ซ์๋ก ๊ตฌ์ฑ
์) 013 → 1x8¹ + 3x8โฐ → 11
10์ง์ : ์์์ ์ด ์๋ 0~9 ์ซ์๋ก ๊ตฌ์ฑ
์) 12
16์ง์ : 0x ๋๋ 0X๋ก ์์ํ๊ณ 0~9 ์ซ์์ A, B, C, D, E, F ๋๋ a, b, c, d, e, f๋ก ๊ตฌ์ฑ
์) 0xB3 → 11x16¹ + 3x16โฐ → 179
2. ์ค์ํ(Floating-Point Type)
์ค์๋ ๊ธฐ๋ณธ์ ์ผ๋ก double ํ์ ์ด๊ณ ๊ฐ์ ๋ฒ์์ ๋ฐ๋ผ float ํ์ ์ ์ฌ์ฉํฉ๋๋ค. ์๋ฐ๋ ์ค์ ๋ฆฌํฐ๋ด์ ๊ธฐ๋ณธ์ ์ผ๋ก double ํ์ ์ผ๋ก ํด์ํ๊ธฐ ๋๋ฌธ์ double ํ์ ๋ณ์์ ์ ์ฅํด์ผ ํฉ๋๋ค. ์ค์ ๋ฆฌํฐ๋ด์ float ํ์ ์ผ๋ก ์ ์ฅํ๊ณ ์ถ๋ค๋ฉด ๋ฆฌํฐ๋ด ๋ค์ ์๋ฌธ์ 'f' ๋ 'F'๋ฅผ ๋ถ์ฌ์ผ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ float ํ์ ์์์ ์ผ๊ณฑ ์๋ฆฌ๊น์ง ์ ๋ฐ๋๋ฅผ ์ ์งํ๊ณ , double ํ์ ์์์ ์๋ ์ด๋ค์ฏ ์๋ฆฌ๊น์ง์ ์ ๋ฐ๋๋ฅผ ๊ฐ์ต๋๋ค.
| ํ์ | ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ | ๊ฐ์ ๋ฒ์ | ๊ธฐ๋ณธ๊ฐ | |
| float | 4byte | 32bit | ์ฝ 3.4 x 10³โธ(์์ ์ต๋๊ฐ), ์ฝ 1.4 x 10-โดโต(์์ ์ต์๊ฐ) | 0.0f |
| double | 8byte | 64bit | ์ฝ 1.7 x 10³โฐโธ(์์ ์ต๋๊ฐ), ์ฝ 4.9 x 10-³²โด(์์ ์ต์๊ฐ) | 0.0d |
float temp = 36.5F;
double pi = 3.1415926535;
์ค์ํ ํ์ ๋ ๊ฐ ํ์ ์ ๋ฐ๋ผ ์ ๋ฏธ์ฌ๋ฅผ ๋ถ์ฌ ํ์ฉํ ์ ์๋ค.
์ค์ํ ์ ๋ฐ๋ ์ฐจ์ด
์์คํ ์ ์ค์๋ฅผ ์ ์ฅํ ๋ ์ค์ฐจ๊ฐ ์๋ ๋ถ๋์์์ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉฐ, ์ ๋ฐ๋๊ฐ ๋ฎ์์๋ก ์ค์ฐจ๊ฐ ๋นจ๋ฆฌ ๋์ ๋๊ฑฐ๋ ๋ํ๋ฉ๋๋ค. ์๋ ์์ ๋ฅผ ํตํด์ ํ์ธํด ๋ณด๊ฒ ์ต๋๋ค.
public class FloatingType{
public static void main(String[] args){
// ์ด๊ธฐ๊ฐ ์ค์
float fValue = 0.1f; // 0.1f๋ float์ ๋ฆฌํฐ๋ด
double dValue = 0.1; // 0.1์ double์ ๋ฆฌํฐ๋ด
// 1000๋ฒ ๋ฐ๋ณต ํ, 0.1์ฉ ๋ํจ
int count = 1000;
float fSum = 0.0F;
double dSum = 0.0;
// ๋ฐ๋ณต ์งํ
for(int i = 0; i < count; i++){
fSum += fValue;
dSum += dValue;
}
// ๊ฒฐ๊ณผ ์ถ๋ ฅ ๋ฐ ๋น๊ต (๊ธฐ๋๊ฐ์ 100.0)
System.out.println("โโโ 1000๋ฒ ๋ฐ๋ณต ๊ฒฐ๊ณผ โโโ");
System.out.printf("float ํฉ๊ณ : %.10f\n", fSum);
System.out.printf("double ํฉ๊ณ : %.10f\n", dSum);
System.out.println("โโโ ์ค์ฐจ ๋ฒ์ ๋ถ์ โโโ");
// ์์ ๊ธฐ๋๊ฐ
double expected = 100.0;
System.out.printf("double ์ค์ฐจ : %.15f\n", dSum - expected);
System.out.printf("float ์ค์ฐจ : %.15f\n", fSum - expected);
}
}
[ ์ถ๋ ฅ ๊ฒฐ๊ณผ ]
โโโ 1000๋ฒ ๋ฐ๋ณต ๊ฒฐ๊ณผ โโโ
float ํฉ๊ณ :ใใ 99.9999850988
double ํฉ๊ณ :ใ100.0000000000
โโโ ์ค์ฐจ ๋ฒ์ ๋ถ์ โโโ
float ํฉ๊ณ :ใใ 0.000000000000000
double ํฉ๊ณ :ใ -0.000014901161194
'0.1 x 1000 = 100.0' ์ด๋ฏ๋ก, ํฉ๊ณ๋ 100.0์ด ๋์์ผ ํฉ๋๋ค. ํ์ง๋ง, ๊ฒฐ๊ณผ๋ฅผ ํ์ธํด ๋ณด๋ฉด double ํ์ ์ ๊ฒฐ๊ณผ๋ 100.0์ ๋งค์ฐ ๊ฐ๊น๊ฑฐ๋ ์ ํํ ์ผ์นํ๋ ๊ฐ์ด ๋์ต๋๋ค. ๊ทธ๋ ์ง๋ง float ํ์ ์ ๊ฒฐ๊ณผ๋ 100.0 ๋ณด๋ค ์์ 99.99998.. ๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋ ๊ฑธ ํ์ธํ ์ ์์ต๋๋ค. ์ด๋ ๊ฐ ํ์ ์ ์ ๋ฐ๋๊ฐ ๊ฐ์ง๋ ๋ถ๋์์์ ์ค์ฐจ์ ์ฐจ์ด๊ฐ ์๋ค๋ ๊ฑธ ๋งํด์ค๋๋ค. float์ ๋ฎ์ ์ ๋ฐ๋(6-7์๋ฆฌ), double์ ๋์ ์ ๋ฐ๋(15-16์๋ฆฌ)๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์, ๊ธ์ต ๊ณ์ฐ, ์ ๋ฐ ๊ณผํ ๊ณ์ฐ ๋ฑ์์๋ double ํ์ ์ฌ์ฉํ์ฌ ์ ๋ฐ๋๋ฅผ ๋์ ๋๋ค.
๋ถ๋ ์์์ (Floating-Point)์ด๋?
๋ถ๋์์์ ์ ์ปดํจํฐ์์ ์ค์๋ฅผ ํํํ๋ ๋ฐฉ์์ ๋๋ค. '๋ถ๋'์ด๋ผ๋ ๋จ์ด๋ '๋ ์ ์์ง์ธ๋ค'๋ผ๋ ๋ป์ผ๋ก ์์์ ์ ์์น๊ฐ ๊ณ ์ ๋์ง ์๊ณ ์์ง์ด๋ฉด์ ๋งค์ฐ ํฌ๊ฑฐ๋ ๋งค์ฐ ์์ ์๋ฅผ ํจ์จ์ ์ผ๋ก ํํํ ์ ์๋๋ก ์ค๊ณ๋์์ต๋๋ค.
| ๊ตฌ์ฑ ์์ | ์ญํ | ๋นํธ ์(float, 32bit) | ๋นํธ ์(double, 64bit) |
| ๋ถํธ(Sign) | ์ซ์์ ๋ถํธ ๊ฒฐ์ (0:์์, 1:์์) | 1bit | 1bit |
| ์ง์(Exponent) | ์์์ ์ ์์น๋ฅผ ๊ฒฐ์ (์๋ฆฟ์) | 8bit | 11bit |
| ๊ฐ์(Mantissa/Fraction) | ์ค์ ์ซ์์ ์ ํจ ์๋ฆฟ์๋ฅผ ์ ์ฅ | 23bit | 52bit |
๋ถ๋์์์ ๋ฐฉ์์์ ์ค์ฐจ๊ฐ ๋ฐ์ํ๋ ๊ทผ๋ณธ์ ์ธ ์ด์ ๋ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ 10์ง์์์ 'โ '์ด ์ํ์์(0.3333....)๊ฐ ๋๋ฏ์ด, 10์ง์์ '0.1'๋ 2์ง์๋ก ๋ณํํ๋ฉด ๋ฌดํํ ์ํ์์๊ฐ ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.(์๋ ์ฐธ๊ณ )
์) 10์ง์์ 0.1์ 2์ง์๋ก ๋ณํํ๋ฉด 0.00011001100110011... (๋ฌดํ ๋ฐ๋ณต)
float์ ์๋ฆฟ์๋ฅผ ์ ์ฅํ ์ ์๋ bit๊ฐ 32bit์ด๊ณ , double์ ์๋ฆฌ์๋ฅผ ์ ์ฅํ ์ ์๋ bit๊ฐ 52bit์ด๋ฏ๋ก 2์ง ์์๋ฅผ ์ค๊ฐ์์ ์๋ผ ์ ์ฅํ ์๋ฐ์ ์์ต๋๋ค. ์๋ฆฐ ๋ถ๋ถ์ผ๋ก ์ธํด ์๋์ 0.1์ด ์๋ 0.1์ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ทผ์ฌ์น๋ก ์ ์ฅ๋๋ฉฐ, ์ด ๊ทผ์ฌ์น์ ์ค์ ๊ฐ ์ฌ์ด์ ์ฐจ์ด๊ฐ ๋ฐ๋ก ์ค์ฐจ์ธ ๊ฒ์ด์ฃ .
์ด๋ฐ ์ค์ฐจ๋ ๊ฐ์(Mantissa)์ ๋นํธ ์๊ฐ ๋์ด๋ ์๋ก ์ค์ด๋ญ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๊ฐ์๊ฐ ๋น๊ต์ ์งง์ float ํ์์ ์ค์ฐจ๊ฐ ๋นจ๋ฆฌ ๋ํ๋๊ณ ๋์ ๋ฉ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ค์ฐจ๊ฐ ์๋นํ ์ค์ doubleํ์ด ๋ชจ๋ ๊ฑธ ์ปค๋ฒํ ์ ์์๊น์? ๊ทธ๋ ์ง ์์ต๋๋ค. ๋ ์ ํํ ๊ธ์ต ๊ณ์ฐ์๋ ์ค์ฐจ๋ฅผ ํผํ๊ธฐ ์ํด์ ๋ถ๋์์์ ๋ฐฉ์์ด ์๋ BigDecimal ํด๋์ค๋ฅผ ํ์ฉํ์ฌ ์ค์ฐจ๋ฅผ ์์จ ์ ์์ต๋๋ค.
๐ฉ ์ฌ๊ธฐ์ ์ ๊น :::
- ์์์ ์ด ์๋ ์ซ์ ๋ฆฌํฐ๋ด์ 10์ง์ ์ค์๋ก ์ธ์ํฉ๋๋ค.
- ์ํ๋ฒณ ์๋ฌธ์ 'e' ๋๋ ๋๋ฌธ์ 'E'๊ฐ ํฌํจ๋์ด ์๋ ์ซ์ ๋ฆฌํฐ๋ด์ ์ง์์ ๊ฐ์๋ก ํํ๋ ์์์ ์ด ์๋ 10์ง์ ์ค์๋ก ์ธ์ํฉ๋๋ค.
์) 5e2 → 5.0 x 10² → 500.0
๐ ์ ๋ฐ๋๋?
์์์ ์ดํ ๋ช์งธ ์๋ฆฌ๊น์ง ์ค์ฐจ ์์ด ํํํ ์ ์๋๊ฐ๋ฅผ ์๋ฏธํฉ๋๋ค.
float์ ์์์ 6์๋ฆฌ๊น์ง, double์ ์์์ 15์๋ฆฌ๊น์ง๋ฅผ ๋ณด์ฅํฉ๋๋ค.
3. ๋ฌธ์ํ ํ์ (Character Type)
๋ฌธ์ํ์ char ํ์ ์ ์ฌ์ฉํ๋ฉฐ, ๋จ ํ๋์ ๋ฌธ์๋ฅผ ์ ์ฅํ๋ ๋ฐ ์ฌ์ฉํฉ๋๋ค. ๋จ์ํ ๋ฌธ์๋ฅผ ์ ์ฅํ๋ ๊ฒ์ ๋์ด, ์ ๋์ฝ๋ ์ ์๋ก์์ ๋ ํนํ ํน์ฑ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ํ๋์ ๋ฌธ์๋ฅผ ์์๋ฐ์ดํ(')๋ก ๊ฐ์ผ ๋ฌธ์ ๋ฆฌํฐ๋ด์ ์ฌ์ฉํ๋๋ฐ, ๋ฌธ์ ๋ฆฌํฐ๋ด์ ์ ๋์ฝ๋(Unicode)๋ก ๋ณํ๋์ด ์ ์ฅ๋ฉ๋๋ค. ์ ๋์ฝ๋๋ ๋น์์ด๊ถ ์ธ์ด๊น์ง ์ต๋ 6๋ง 5,000์ฌ ๊ฐ์ ๋ฌธ์๋ฅผ ์ฒ๋ฆฌํ ์ ์๋๋ก 2byte ๋ฌธ์ ์ฒ๋ฆฌ ๋ฐฉ์์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
| ํ์ | ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ | ๊ฐ์ ๋ฒ์ | ๊ธฐ๋ณธ๊ฐ | |
| char | 2byte | 16bit | 0 ~ 65535 (์ ๋์ฝ๋) | \u0000 (null) |
char var1 = 'A';
char var2 = 'B';
char var3 = '๊ฐ';
char c1 = 65; // 'A'์ ์ ๋์ฝ๋ ๊ฐ์ธ 65๋ฅผ ํ ๋น
char c2 = '\u0041'; // ์ ๋์ฝ๋ 16์ง์ ๊ฐ์ ํ ๋น
char c3 = '\n'; // ์ค ๋ฐ๊ฟ(๊ฐํ) ๋ฌธ์ ํ ๋น
๋ฌธ์ํ์ ๋ถํธ๊ฐ ์๋ ์ ์ ํํ๋ก ์ค์ง ์์๋ง ํํํ๊ณ ์ ๋์ฝ๋๋ฅผ ํ์ฉํ์ฌ ๋ฌธ์ ํ๋๋ฅผ ํํํ ์ ์์ต๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ ๋์ฝ๋๋ ๋ฌด์์ผ๊น์?
์ ๋์ฝ๋(Unicode)๋?
์ ๋์ฝ๋๋ ์ ์ธ๊ณ์ ๋ชจ๋ ๋ฌธ์, ๊ธฐํธ, ์ด๋ชจํฐ์ฝ์ ๊ณ ์ ํ ๋ฒํธ๋ฅผ ๋ถ์ฌํ ๊ตญ์ ํ์ค ์ธ์ฝ๋ฉ ๋ฐฉ์์ ๋๋ค. ์ด์ ์๋ ๊ตญ๊ฐ๋ ์ธ์ด๋ณ๋ก ๋ฌธ์๋ฅผ ํํํ๋ ๋ฐฉ์(์ธ์ฝ๋ฉ)์ด ๋ฌ๋ผ์ ํธํ์ฑ ๋ฌธ์ ๊ฐ ์์ฃผ ๋ฐ์ํ๋๋ฐ ์ ๋์ฝ๋๋ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ๋ชจ๋ ๋ฌธ์๋ฅผ ๋์ผํ ๋ฐฉ์์ผ๋ก ๋ค๋ฃจ๊ธฐ ์ํด ๋ง๋ค์ด์ก์ต๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ ๋์ฝ๋๋ ํน์ ๋ฌธ์์ ํ๋์ ์ ์ ๊ฐ์ 1:1๋ก ๋์์ํต๋๋ค. (์ด๋ฐ ์ ์ ๊ฐ์ ์ฝ๋ ํฌ์ธํธ๋ผ๊ณ ํจ)

๋ฌธ์ํ์ ํ์ฉ์ ๋จ์ํ ๋ฌธ์๋ฅผ ์ ์ฅํ๋ ๊ฒ ์ธ์, ์ ์ํ์ผ๋ก์์ ํน์ง์ ์ด์ฉํ ์ฐ์ฐ์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๐พ ๋ฌธ์๋ฅผ ์ ์๋ก, ์ ์๋ฅผ ๋ฌธ์๋ก ๋ณํ
public class CharExam{
public static void main(String[] args){
char c = 'C';
// char -> int๋ก ๋ณํ
int charToInt = c;
System.out.println("๋ฌธ์ 'C'์ ์ ๋์ฝ๋ ๊ฐ : " + charToInt);
// int -> char
int code = charToInt + 1; // 67 + 1 = 68
char nextChar = (char)code;
System.out.println("๋ค์ ๋ฌธ์ : " + nextChar); // D
}
}
[ ์ถ๋ ฅ ๊ฒฐ๊ณผ ]
๋ฌธ์ 'C'์ ์ ๋์ฝ๋ ๊ฐ : 67
๋ค์ ๋ฌธ์ : D
๐พ ์ํ๋ฒณ ์ํ
public class CharExam2 {
public static void main(String[] args) {
// ์ํ๋ฒณ 'A'๋ถํฐ 'Z'๊น์ง ์ถ๋ ฅ
for (char letter = 'A'; letter <= 'Z'; letter++) {
System.out.print(letter + " ");
}
}
}
[ ์ถ๋ ฅ ๊ฒฐ๊ณผ ]
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
4. ๋ ผ๋ฆฌํ ํ์ (Logical Type)
๋ ผ๋ฆฌํ์ boolean ํ์ ์ ์ฌ์ฉํ๋ฉฐ, ํ๋ก๊ทธ๋จ์ ๋ ผ๋ฆฌ์ ์ธ ํ๋ฆ ์ ์ด๋ฅผ ๋ด๋นํฉ๋๋ค. ์ด๋ค ์กฐ๊ฑด์ด ์ฐธ์ธ์ง ๊ฑฐ์ง์ธ์ง๋ฅผ ํ๋จํ๊ณ , ํ๋ก๊ทธ๋จ์ด ๋์๊ฐ์ผ ํ ๋ฐฉํฅ์ ๊ฒฐ์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ํ์ ์ ๋๋ค. ๋ ผ๋ฆฌ ๋ฆฌํฐ๋ด๋ก true, false๋ฅผ ์ฌ์ฉํฉ๋๋ค.
| ํ์ | ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ | ๊ฐ์ ๋ฒ์ | ๊ธฐ๋ณธ๊ฐ | |
| boolean | 1byte | 8bit | true, false | false |
boolean switchStatus = true;
boolean on = true;
boolean off = false;
int a = 10;
int b = 20;
boolean result = (a < b); // ์ฐ์ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋ํ๋จ
boolean ํ์ ์ ์ค์ง ๋ ๊ฐ์ง ๋ ผ๋ฆฌ ๊ฐ(true, false)๋ง์ ๊ฐ์ง๋ฉฐ, ๋ถํธ๋ ํด๋น ์ฌํญ์ด ์์ต๋๋ค.
public class LogicalExam {
public static void main(String[] args) {
int age = 20;
// ๋
ผ๋ฆฌ ์ฐ์ฐ์ ๊ฒฐ๊ณผ๊ฐ boolean ํ์
boolean isAdult = (age >= 19);
if (isAdult) {
System.out.println("์ฑ์ธ์
๋๋ค."); // isAdult๊ฐ true์ด๋ฏ๋ก ์คํ
} else {
System.out.println("๋ฏธ์ฑ๋
์์
๋๋ค.");
}
}
}
[ ์ถ๋ ฅ ๊ฒฐ๊ณผ ]
์ฑ์ธ์ ๋๋ค.
์ฐธ์กฐ ํ์ (Reference Type)
์ฐธ์กฐํ์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ ์ฃผ์๋ฅผ ์ ์ฅํ๋ ํ์ ์ผ๋ก ๋ฐฐ์ด, ์ด๊ฑฐ, ํด๋์ค, ์ธํฐํ์ด์ค ๋ฑ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค. ๊ธฐ๋ณธํ์ ๋ณ์์ ๊ฐ์ ์ ์ฅํ๋๋ฐ ์ฐธ์กฐํ์ ๋ณ์์ ๊ฐ์ด ๋ค์ด์๋ ์ฃผ์๊ฐ ์ฐธ์กฐ๋์ด ์์ต๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ๋๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ๋ ๋ฌ๋ผ์ง๋๋ค.
| ๊ตฌ๋ถ | ๊ธฐ๋ณธํ | ์ฐธ์กฐํ | |
| ์ ์ฅ ์์น | ์คํ(Stack) ๋ฉ๋ชจ๋ฆฌ | ์คํ(Stack)์ ์ฃผ์ ์ ์ฅ, ์ค์ ๊ฐ์ฒด๋ ํ(Heap) ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ | |
| ์ ์ฅ ๋ด์ฉ | ์ค์ ๋ฐ์ดํฐ ๊ฐ(Value) | ๊ฐ์ฒด๊ฐ ์ ์ฅ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ฃผ์(Reference) | |
| null ์ฌ๋ถ | ํ์ฉ ํ์ง ์์ | ํ์ฉํจ(null์ '์๋ฌด๊ฒ๋ ์ฐธ์กฐ ํ์ง ์์' ์ด๋ผ๋ ์๋ฏธ) | |
| ์ | int, short, char, boolean ๋ฑ | String, ๋ฐฐ์ด, ํด๋์ค, ์ธํฐํ์ด์ค ๋ฑ | |

์๋ฅผ ๋ค์ด, String ๋ฌธ์์ด ํ์ ์ str ๋ณ์๋ฅผ "Junesker" ๋ฌธ์์ด๋ก ์ด๊ธฐํ๋ฅผ ์งํํ๋ค๊ณ ๊ฐ์ ํ์ ๋, ์คํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์๋ ๋ณ์ str์ด ๋ง๋ค์ด์ง๊ณ , ํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์๋ "Junesker"๋ผ๋ ๊ฐ์ ๊ฐ์ฒด๊ฐ ๋ง๋ค์ด์ ธ ์ฃผ์๋ฅผ ๊ฐ์ต๋๋ค. ์ด๋ ํด๋น ์ฃผ์๋ฅผ ์คํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ง๋ค์ด์ง str ๋ณ์๊ฐ ์ฐธ์กฐํ๊ฒ ๋๋ ๊ฒ์ด์ฃ .
์ด์ฒ๋ผ ๋ฒ์ง๋ฅผ ํตํด ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๊ธฐ ๋๋ฌธ์ String ํ์ ์ผ๋ก ์ ์ธํ str ๋ณ์๋ฅผ ์ฐธ์กฐ ํ์ ๋ณ์๋ผ๊ณ ํฉ๋๋ค.
1. ๋ฌธ์์ด ํ์ (String Type)
๋ฌธ์์ด ํ์ ์ธ String์ ๊ฐ์ฅ ํํ๊ฒ ์ฌ์ฉ๋๋ ์ฐธ์กฐ ํ์ ์ผ๋ก, ๋ฌธ์๋ค์ ์ฐ์์ ์ ์ฅํ๋ ํด๋์ค์ ๋๋ค. ๋ฌธ์์ด ํ์ ์ ๊ธฐ๋ณธ ํ์ ์ฒ๋ผ ํฐ ๋ฐ์ดํ(")๋ฅผ ์ด์ฉํด ๊ฐ์ ํ ๋นํ ์ ์์ง๋ง, ์์ฐํ ๋งํ๋ฉด ํด๋์ค ๊ฐ์ฒด์ ๋๋ค.
String str = "Junesker";
String str2 = new String("tistory");
String s1 = "ABCDEF";
String s2 = "ABCDEF";
์ ์ ์ธ์ ๋ด์ฉ์ ๋ณด๋ฉด str ๋ณ์์ str2 ๋ณ์๋ ์๋ก ๋ค๋ฅธ ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ์์ฑ๋์ด ์์ต๋๋ค. new ์ฐ์ฐ์๋ ํ ์์ญ์ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ง๋ค ๋ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด ์์ฑ์ด๋ฏ๋ก ์๋ก์ด ์ฃผ์๊ฐ ๋ง๋ค์ด์ง๋๋ค.
์๋ s1 ๋ณ์์ s2 ๋ณ์๋ ์ต์ด์ s1 ๋ณ์๊ฐ ํ ์์ญ์ "ABCDEF"์ ๊ฐ์ ๊ฐ๊ณ ์๋ ์ฃผ์์ ๊ณต๊ฐ์ด ๋ง๋ค์ด์ง๋๋ค. ๊ทธ๋ฆฌ๊ณ , s2 ๋ณ์๊ฐ ๋ง๋ค์ด์ง ๋ ๊ฐ์ ๊ฐ์ "ABCDEF"๋ฅผ ํ ๋นํฉ๋๋ค. ์ฌ๊ธฐ์ "ABCDEF"์ ๊ฐ์ ๊ฐ๊ณ ์๋ ํ ์์ญ์ ์ฃผ์๋ฅผ ์ฐธ์กฐํ๊ฒ ๋ฉ๋๋ค. ์ด์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ์ฉํ ์ ์๋ ์ด์ ๋ ๋ฌธ์์ด ์์ ํ(String Constant Pool)๋ก ์ธํ ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ๊ณผ ์ฑ๋ฅ ์ต์ ํ์ ํต์ฌ ๋ฉ์ปค๋์ฆ ๋๋ฌธ์ ๋๋ค.
๋ฌธ์์ด ์์ ํ(String Constant Pool)
๋ฌธ์์ด ์์ ํ์ ์๋ฐ์ ํ(Heap) ๋ฉ๋ชจ๋ฆฌ ์์ญ ๋ด๋ถ์ ์กด์ฌํ๋ ํน๋ณํ ๊ณต๊ฐ์ผ๋ก, String ๊ฐ์ฒด๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ ์๋ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ๊ณผ ์ฑ๋ฅ ์ต์ ํ์ ํต์ฌ ๋งค์ปค๋์ฆ ์ค ํ๋์ ๋๋ค. ํ๋ก๊ทธ๋จ ๋ด์์ ๋์ผํ ๋ฌธ์์ด์ด ์ฌ๋ฌ ๋ฒ ์ฌ์ฉ๋ ๊ฒฝ์ฐ, ๋งค๋ฒ ์๋ก์ด String ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋์ , ํด๋น ํ์ ์ ์ฅ๋ ๊ธฐ์กด์ ๊ฐ์ฒด๋ฅผ ์ฌํ์ฉํ๋๋ก ํฉ๋๋ค. ํ์ ๋์ผํ ๋ด์ฉ์ ๋ฌธ์์ด ๊ฐ์ฒด๊ฐ ํ๋๋ง ์กด์ฌํ๋๋ก ๋ณด์ฅํ๋ฉฐ ๋ฉ๋ชจ๋ฆฌ ์ค๋ณต์ ๋ฐฉ์งํฉ๋๋ค.
| ์์ฑ ๋ฐฉ์ | ์ | ์ ์ฅ ์์น | ||
| ๋ฆฌํฐ๋ด ์ฌ์ฉ | String s1 = "Junesker"; | String Pool | ์ฌํ์ฉ๋จ | |
| new ์ฐ์ฐ์ ์ฌ์ฉ | String s1 = new String("Junesker"); | ์ผ๋ฐ Heap ์์ญ | ์ฌํ์ฉ ์๋จ | |
๋ฌธ์์ด ํ์ด ์์ ๊ฐ์ด ๋์ํ ์ ์๋ ์ด์ ๋ String ๊ฐ์ฒด๋ ๋ถ๋ณํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ชจ๋ ๋ณ์๊ฐ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ์์ ํ๊ฒ ๊ณต์ ํด๋ ๋๊ตฌ๋ ๊ทธ ๋ด์ฉ์ ๋ฐ๊ฟ ์ ์๊ธฐ ๋๋ฌธ์ ์ฌํ์ฉ์ด ๊ฐ๋ฅํด์ง๋๋ค.
@Junesker
'DEVELOPMENT > JAVA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| โ ์๋ฐ(Java) ์กฐ๊ฑด๋ฌธ ์ ๋ฆฌ! (0) | 2025.12.17 |
|---|---|
| โ ์๋ฐ(Java) ์ฐ์ฐ์ ์๋ฒฝ ์ ๋ฆฌ! (0) | 2025.10.30 |
| โ ์๋ฐ(Java) ๋ณ์๋? ์ด๋ณด์๋ฅผ ์ํ ์ ์ธ, ์ด๊ธฐํ 5๋ถ ์์ฑ (0) | 2025.10.28 |
| โ ์๋ฐ(JAVA) ๊ธฐ๋ณธ ์์ฑ ๋ฐ ์์ค ๋ถ์ (0) | 2025.05.27 |
| โ ์๋ฐ ํ๋ก์ ํธ ์์ฑ๋ถํฐ 'Hello World' ๋ช ๋ น ํ๋กฌํํธ๋ก ์ถ๋ ฅํ๊ธฐ (1) | 2025.05.20 |