[JAVA] λ³€μˆ˜

min 🎸·2025λ…„ 1μ›” 22일

πŸ€” λ³€μˆ˜λž€ ?

λ³€μˆ˜(variable)μ΄λž€ 데이터λ₯Ό μ €μž₯ν•˜κΈ° μœ„ν•΄ ν• λ‹Ή 받은 λ©”λͺ¨λ¦¬ 곡간을 μ˜λ―Έν•œλ‹€.
λ³€μˆ˜μ˜ μ’…λ₯˜λŠ” μ—¬λŸ¬ κ°€μ§€κ°€ μžˆμ§€λ§Œ, μ—¬κΈ°μ„œ λ‹€λ£¨λŠ” λ³€μˆ˜λŠ” μ§€μ—­ λ³€μˆ˜(local variable)이라고 ν•œλ‹€.

λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 이유?

  • 가독성을 높인닀
  • μž¬μ‚¬μš©μ„ ν†΅ν•œ μœ μ§€λ³΄μˆ˜μ„± ν–₯상

λ³€μˆ˜ μ‚¬μš© 방법

λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜κ³ , λ³€μˆ˜μ— 값을 λŒ€μž…ν•˜μ—¬ μ‚¬μš©ν•œλ‹€.
이 λ•Œ μ„ μ–Έν•œ λ³€μˆ˜μ— 졜초 값을 λŒ€μž…ν•˜λŠ” 것을 μ΄ˆκΈ°ν™”λΌκ³  ν•œλ‹€.
μ΄λŸ¬ν•œ μ„ μ–Έκ³Ό μ΄ˆκΈ°ν™”λŠ” λ”°λ‘œ μž‘μ„±ν•  수 도 있고, λ™μ‹œμ— μž‘μ„±ν•  수 μžˆλ‹€.
λ™μ‹œμ— μž‘μ„±ν•˜λŠ” 것을 μ„ μ–Έκ³Ό λ™μ‹œμ— μ΄ˆκΈ°ν™” 라고 ν•œλ‹€.

// λ³€μˆ˜μ˜ μ„ μ–Έ μ˜ˆμ‹œ
int age;

// μ„ μ–Έν•œ λ³€μˆ˜μ— κ°’ λŒ€μž… μ˜ˆμ‹œ
age = 20;
age = age;

// μ„ μ–Έκ³Ό λ™μ‹œμ— μ΄ˆκΈ°ν™” μ˜ˆμ‹œ
int point = 100;

λ³€μˆ˜μ˜ μ„ μ–Έ

λ³€μˆ˜λ₯Ό μ„ μ–Έν•œλ‹€λŠ” μ˜λ―ΈλŠ” λ©”λͺ¨λ¦¬μ— 곡간을 μƒμ„±ν•˜κ³  κ·Έ 곡간을 μ°Έμ‘°(reference)ν•  수 μžˆλ„λ‘ 이름을 λΆ€μ—¬ν•˜λŠ” 것이닀.
선언을 ν•˜κΈ° μœ„ν•΄μ„œλŠ”
μžλ£Œν˜• λ³€μˆ˜λͺ…;
μœ„μ™€ 같은 ν˜•νƒœλ‘œ μ•žμ— μ–΄λ– ν•œ 데이터λ₯Ό μ €μž₯ν•˜λŠ” 곡간 인지λ₯Ό μ•Œλ €μ£ΌλŠ” ν‚€μ›Œλ“œλ₯Ό μž‘μ„±ν•˜κ²Œ λœλ‹€. μ΄λ ‡κ²Œ μ˜ˆμ•½λœ ν‚€μ›Œλ“œλ₯Ό μžλ£Œν˜•μ΄λΌκ³  ν•œλ‹€.


πŸ€” μžλ£Œν˜•μ΄λž€ ?

λ‹€μ–‘ν•œ κ°’μ˜ ν˜•νƒœλ³„λ‘œ μ–΄λŠ μ •λ„μ˜ 크기λ₯Ό ν•˜λ‚˜μ˜ κ°’μœΌλ‘œ μ·¨κΈ‰ν•  것인지 미리 Compiler와 μ•½μ†ν•œ ν‚€μ›Œλ“œμ΄λ‹€.
예) int μžλ£Œν˜•μ€ μ •μˆ˜λ₯Ό 4byteλ§ŒνΌμ„ μ½μ–΄μ„œ ν•˜λ‚˜μ˜ κ°’μœΌλ‘œ μ·¨κΈ‰ν•˜κ² λ‹€λŠ” 약속이닀.
μ΄λŸ¬ν•œ μžλ£Œν˜•μ€ κΈ°λ³Έμžλ£Œν˜•(Primary type)κ³Ό μ°Έμ‘°μžλ£Œν˜•(Reference type)으둜 λ‚˜λˆ„μ–΄μ§„λ‹€.


✏️ κΈ°λ³Έμžλ£Œν˜• (Primitive Type)

1. μ •μˆ˜ν˜•

intλ₯Ό λŒ€ν‘œμžλ£Œν˜•μœΌλ‘œ μ—¬κΈ°λ©°, νŠΉμˆ˜ν•œ κ²½μš°κ°€ μ•„λ‹Œ 이상 byte와 short은 잘 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€.

νƒ€μž…ν• λ‹Ήλ˜λŠ” λ©”λͺ¨λ¦¬ 크기데이터 ν‘œν˜„ λ²”μœ„
byte1 λ°”μ΄νŠΈβˆ’128-128 ~ 127127
short2 λ°”μ΄νŠΈβˆ’215-2^{15} ~ (215βˆ’1)(2^{15} -1)
int4 λ°”μ΄νŠΈβˆ’231-2^{31} ~ (231βˆ’1)(2^{31} -1)
long8 λ°”μ΄νŠΈβˆ’263-2^{63} ~ (263βˆ’1)(2^{63} -1)

2. μ‹€μˆ˜ν˜•

double을 λŒ€ν‘œμžλ£Œν˜•μœΌλ‘œ μ‚¬μš©ν•˜κ³  floatλŠ” νŠΉμˆ˜ν•œ λͺ©μ μ΄ μžˆλŠ” κ²½μš°μ—λ§Œ μ‚¬μš©ν•˜κ²Œ λœλ‹€.

νƒ€μž…ν• λ‹Ήλ˜λŠ” λ©”λͺ¨λ¦¬ 크기데이터 ν‘œν˜„ λ²”μœ„
float4 λ°”μ΄νŠΈ(3.4βˆ—10βˆ’38)(3.4 * 10^{-38}) ~ (3.4βˆ—1038)(3.4 * 10^{38})
double8 λ°”μ΄νŠΈ(1.7βˆ—10βˆ’308)(1.7 * 10^{-308}) ~ (1.7βˆ—10308)(1.7 * 10^{308})

3. λ¬Έμžν˜•

νƒ€μž…ν• λ‹Ήλ˜λŠ” λ©”λͺ¨λ¦¬ 크기데이터 ν‘œν˜„ λ²”μœ„
char2 λ°”μ΄νŠΈ00 ~ 2162^{16}

4. λ…Όλ¦¬ν˜•

νƒ€μž…ν• λ‹Ήλ˜λŠ” λ©”λͺ¨λ¦¬ 크기데이터 ν‘œν˜„ λ²”μœ„
boolean1 λ°”μ΄νŠΈtrue ν˜Ήμ€ false

✏️ μ°Έμ‘° μžλ£Œν˜• (Reference Type)

1. λ¬Έμžμ—΄

λ¬Έμžμ—΄μ„ μ €μž₯ν•˜κΈ° μœ„ν•œ μžλ£Œν˜•

String str;			//4byte (μ—„λ°€νžˆ 이야기 ν•˜λ©΄ μ£Όμ†Œκ°’μ€ 4byte μ •μˆ˜ν˜•μ΄λ‹€.)


λ³€μˆ˜μ˜ λͺ…λͺ…κ·œμΉ™

  1. 컴파일 μ—λŸ¬λ₯Ό λ°œμƒμ‹œν‚¬ 수 μžˆλŠ” κ·œμΉ™
    1. λ™μΌν•œ λ²”μœ„ λ‚΄μ—μ„œ λ™μΌν•œ λ³€μˆ˜λͺ…을 κ°€μ§ˆ 수 μ—†λ‹€.
    2. λ³€μˆ˜μ˜ μ΄λ¦„μ—λŠ” μžλ°”μ—μ„œ μ‚¬μš©μ€‘μΈ ν‚€μ›Œλ“œ(keyword)λ₯Ό μ‚¬μš©ν•  수 μ—†λ‹€.
      ex) int, float, while, continue, λ“±λ“±
    3. λ³€μˆ˜μ˜ 이름은 영문자 λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λΆ„ν•œλ‹€.
      ex)** age와 AgeλŠ” λ‹€λ₯΄λ‹€.
    4. λ³€μˆ˜μ˜ 이름은 숫자둜 μ‹œμž‘ν•  수 μ—†λ‹€.
      ex) 123abc - μ‚¬μš©λΆˆκ°€
    5. νŠΉμˆ˜κΈ°ν˜ΈλŠ” '_'와 '$'만 μ‚¬μš© κ°€λŠ₯ν•˜λ‹€.
      ex) abc_zxc, abc$123, _abc123, λ“±λ“±


μ •μˆ˜λ₯Ό μ·¨κΈ‰ν•˜λŠ” λ³€μˆ˜μ— κ°’ λŒ€μž…

byte bnum = 1;
short snum = 2;
int inum = 4;
//long lnum = 8;			//아무 문제 μ—†λŠ” 것 κ°™μ§€λ§Œ 사싀 뒀에 λŒ€λ¬Έμž L을 λΆ™μ—¬μ•Ό ν•œλ‹€. κ·Έ μ΄μœ λŠ” 뒀에 ν˜•λ³€ν™˜μ—μ„œ λ‹€λ£¨κ²Œ 될 것이닀.
long lnum = 8L;			  //μ†Œλ¬Έμžλ‘œ 'l'을 써도 λ˜μ§€λ§Œ 글꼴에 따라 숫자 1κ³Ό ν˜Όμ„ μ΄ λΉšμ–΄μ§ˆ 수 μžˆμ–΄μ„œ λŒ€λ¬Έμžλ‘œ ν•˜λŠ” 것이 ꢌμž₯이닀.

System.out.println("bnum의 κ°’ : " + bnum);
System.out.println("snum의 κ°’ : " + snum);
System.out.println("inum의 κ°’ : " + inum);
System.out.println("lnum의 κ°’ : " + lnum);

μ‹€μˆ˜λ₯Ό μ·¨κΈ‰ν•˜λŠ” λ³€μˆ˜μ— κ°’ λŒ€μž…

//float fnum = 4.0;		  //μ‹€μˆ˜ ν˜•νƒœμ˜ 값을 fnum에 μ‚¬μš©ν•˜λŠ” 것은 λΆˆκ°€λŠ₯ν•˜λ‹€.
float fnum = 4.0f;		  //μ‹€μˆ˜ 뒀에 'f'λ₯Ό λΆ™μ—¬μ•Ό ν•œλ‹€. λŒ€λ¬Έμž 'F'도 κ°€λŠ₯ν•˜μ§€λ§Œ μ†Œλ¬Έμžλ₯Ό μ‚¬μš©ν•˜λŠ” 것이 μΌλ°˜μ μ΄λ‹€.
double dnum = 8.0;

System.out.println("fnum의 κ°’ : " + fnum);
System.out.println("dnum의 κ°’ : " + dnum);

0개의 λŒ“κΈ€