λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

Lang/β˜• Java

β˜• Java * μžλ£Œν˜•μ„ μ•Œμ•„λ³΄μž

Hi πŸ€—! ... 

 

κ³΅λΆ€ν•˜μž.

λ§Œμ•½ μ•„λž˜ λ‚΄μš© 쀑 μ°Έμ‘° μžλ£Œν˜•μ— λŒ€ν•΄ 아직 μ•„λ¦¬μ†‘ν•˜λ‹€λ©΄ μ •μƒμ΄λ‹€πŸŽ‰.

처음 κ³΅λΆ€ν•˜λŠ” μ‚¬λžŒλ“€μ΄λΌλ©΄ 아직 λͺ¨λ₯΄λŠ” λ‚΄μš©μ΄λ‹ˆκΉŒ κ·Έλƒ₯ μ €λŸ° 게 μžˆκ΅¬λ‚˜ ν•˜λ©΄μ„œ λ„˜μ–΄κ°€λ„λ‘ ν•˜μž.

λ‚˜μ€‘μ—” 'μ•„~ κ·Έκ±°' ν•˜κ²Œ 될 κ±°λ‹€.

 

μžλ£Œν˜•(Data type)μ΄λž€?

  • λ³€μˆ˜μ— μ €μž₯λ˜λŠ” λ°μ΄ν„°μ˜ νƒ€μž…μ„ μ˜λ―Έν•œλ‹€.
  • μžλ£Œν˜•μ€ λ³€μˆ˜μ— μ €μž₯이 λ˜λŠ” κ°’λ“€μ˜ ν˜•νƒœμ™€ ν˜€μš© μ—°μ‚° 등을 κ²°μ •ν•œλ‹€.
  • JavaλŠ” type을 κ°•λ ₯ν•˜κ²Œ κ·œμ œν•˜λŠ” μ–Έμ–΄! Javaμ—μ„œλŠ” λ°˜λ“œμ‹œ type을 μ§€μ •ν•˜μ—¬μ•Ό ν•˜κ³  type이 λ‹€λ₯Έ λ°μ΄ν„°λŠ” λ³€μˆ˜μ— μ €μž₯ν•  수 μ—†λ‹€.
  • 크게 λ‚˜λˆ„μ–΄ κΈ°μ΄ˆν˜•(primitive type)κ³Ό μ°Έμ‘°ν˜•(reference type)의 두 가지 type으둜 λ‚˜λ‰œλ‹€.
  • κΈ°μ΄ˆν˜• λ³€μˆ˜μ—λŠ” λ³€μˆ˜μ˜ 값이 μ €μž₯λ˜μ–΄ μžˆμœΌλ‚˜ μ°Έμ‘°ν˜• λ³€μˆ˜μ—λŠ” 객체의 μœ„μΉ˜(μ°Έμ‘° λ˜λŠ” μ£Όμ†Œ)κ°€ λ“€μ–΄ μžˆλ‹€.

                Cμ–Έμ–΄μ˜ 포인터와 λΉ„μŠ·ν•˜κ²Œ μƒκ°ν•˜λ©΄ νŽΈν•  λ“―ν•˜λ‹€.

 

 

이 μ€‘μ—μ„œ λ¨Όμ € κΈ°λ³Έ μžλ£Œν˜•!
  • μžλ°”μ—μ„œ κΈ°λ³Έ μžλ£Œν˜•μ€ λ°˜λ“œμ‹œ μ‚¬μš©ν•˜κΈ° 전에 μ„ μ–Έ(Declared)λ˜μ–΄μ•Ό ν•œλ‹€.
  • OS에 따라 μžλ£Œν˜•μ˜ 크기가 λ³€ν•˜μ§€ μ•ŠλŠ”λ‹€! ( C/C++의 경우 μš΄μ˜μ²΄μ œμ— 따라 μ •μˆ˜ μžλ£Œν˜•μ˜ 크기가 달라진닀. )
  • μžλ°”μ—μ„œλŠ” λͺ¨λ“  것이 객체둜 λ˜μ–΄ μžˆμœΌλ‚˜ κΈ°μ΄ˆν˜•μ€ 자주 μ‚¬μš©λ˜κΈ° λ•Œλ¬Έμ— μ„±λŠ₯ μ €ν•˜λ₯Ό 막기 μœ„ν•΄ 객체둜 λ˜μ–΄ μžˆμ§€ μ•Šλ‹€.
  • 비객체 νƒ€μž…μ΄κΈ°μ—, null 값을 κ°€μ§ˆ μˆ˜κ°€ μ—†λ‹€.

 

 

Q 01. μ•„λ‹ˆ 잠깐 μš°λ¦¬κ°€ 자주 μ‚¬μš©ν•˜λ˜ String은 μ–΄λ”” κ°”λ‚˜μš”πŸ€”?

- μš°λ¦¬κ°€ μ‚¬μš©ν•˜λ˜ String은 사싀 κΈ°λ³Έ μžλ£Œν˜•μ΄ μ•„λ‹Œ μ°Έμ‘° μžλ£Œν˜•μ΄λ‹€!

 

Q 02. κ·Έλ ‡λ‹€λ©΄ String은 null 값을 κ°€μ§ˆ 수 μžˆκ² λ„€μš”?

- μ²œμž¬λ‹€! κ°€λŠ₯ν•˜λ‹€!

 

Q 03. μ§„μ§ κ°€μš” πŸ‘Ώ?

public class Test2 {

    public static void main(String[] args) {
        String a = null;
        // int b = null;
    }
}

- μœ„ μ½”λ“œλ₯Ό μ‹€ν–‰ν•΄λ³΄μž! 주석을 μ§€μš°κ³  μ‹€ν–‰ν•˜λ©΄ λ°”λ‘œ errκ°€ 생길 것이닀!

λ‚˜λŠ” err μ‹«μœΌλ‹ˆκΉŒ 주석..β™‘

 

Q 04. null이 λ­”κ°€μš”?

- ! γ…‚... λΉ„μ—ˆλ‹€λŠ” λœ»μ΄λ‹€! empty! 0이 μ•„λ‹ˆλ‹€(0 ≠ null), μ •λ§λ‘œ λΉ„.μ—ˆ.λ‹€.λŠ” λœ»μ΄λ‹€.

μ»΄ν“¨ν„°λŠ” 데이터λ₯Ό μ €μž₯μž₯치의 일뢀 곡간을 ν• λ‹Ήν•˜μ—¬ μ €μž₯μ‹œν‚€λŠ”λ°, 컴퓨터가 ν• λ‹Ήν•œ 곡간에 μ•„~무 것도 μ €μž₯λ˜μ–΄ μžˆμ§€ μ•Šλ‹€λŠ” μ–˜κΈ°λ‹€. 자리만 λ°°μ •λ˜κ³  ν……ν…… 빈 μƒνƒœ!

더보기

이μͺ½κ³Ό μ™„μ „ μƒκ΄€μ—†λŠ” μΉœκ΅¬μ—κ²Œ λ³΄μ—¬μ€¬λ”λ‹ˆ 'μ–΄? 이게 λŒ€μ²΄ 무슨 말이야?' ν–ˆλ‹€.. μΉœκ΅¬μ—κ²Œ μΆ”κ°€ μ„€λͺ…을 ν–ˆκ³  μΉœκ΅¬κ°€ 이해λ₯Ό μ œλŒ€λ‘œ ν–ˆλ‹€. ν˜Ήμ‹œλ‚˜ μ‹Άμ–΄μ„œ μΉœκ΅¬μ—κ²Œ μ„€λͺ…ν•œ κΈ€κ³Ό λ™λ£ŒλΆ„μ΄ μ£Όμ‹  그림을 같이 μ²¨λΆ€ν•œλ‹€ 😡.

 

λ„ˆκ°€ μ»΄ν“¨ν„°ν•œν…Œ λ­˜ μ €μž₯μ‹œν‚€λ©΄μ€,
μ»΄ν“¨ν„°λŠ” κ·Έκ±Έ λ³ΈμΈμ΄ μ‚¬μš©ν•  μˆ˜ μžˆλŠ” λΆ€λΆ„ 쀑에 μΌλΆ€λΆ„을 μ§€μ •ν•΄μ„œ,
거기에 λ„ˆκ°€ μ €μž₯μ‹œν‚€λ €κ³  ν•˜λŠ” κ±Έ μ €μž₯μ‹œν‚¨λ‹¨ λ§μ΄μ•Ό

근데 nullμ΄λΌλŠ” κ±°λŠ”,
컴퓨터가 μ €μž₯ν•  κ³΅κ°„을 λ§Œλ“€κΈ΄ ν–ˆλŠ”데 κ±°κΈ° μ €μž₯λ˜μ–΄ μžˆλŠ” 게 μ•„무것도 μ—†λ‹€λŠ” λœ»!

 

 

 

 

  • μ •μˆ˜μ˜ κΈ°λ³Έν˜•μ€ intν˜•νƒœμž„μœΌλ‘œ, longν˜•μ˜ 경우 κ°’ 뒀에 L을 λΆ™μ—¬ Longν˜•μž„μ„ ν‘œμ‹œν•œλ‹€. ( ex. long x = 394L )

                μ†Œλ¬Έμž l을 적어도 λ¬΄λ°©ν•˜λ‚˜, μˆ«μžμ™€ ν—·κ°ˆλ¦΄ μˆ˜λ„ μžˆμœΌλ‹ˆ, λŒ€λ¬Έμžλ‘œ μ“°λŠ” 것을 μ΅ν˜€λ‘μž!

  • μ‹€μˆ˜μ˜ κΈ°λ³Έν˜•μ€ dobuleν˜•νƒœμž„μœΌλ‘œ, floatν˜•μ˜ 경우 값뒀에 fλ₯Ό λΆ™μ—¬ floatν˜•μž„μ„ ν‘œμ‹œν•œλ‹€. ( ex. float x = 1.92f )
  • μ‹€μˆ˜ν˜•μ˜ 경우 λŒ€λΆ€λΆ„μ˜ 경우 double을 μ‚¬μš©ν•˜λŠ” 것이 μ’‹λ‹€.

 

Q 01. μ™œμ£ ?

- float와 double은 각 정밀도(precision)λ₯Ό κ°€μ§€κ²Œ λ˜λŠ”λ° float의 μ •λ°€λ„λŠ” 7둜 λ¬Όλ¦¬ν•™μ΄λ‚˜ μ²œλ¬Έν•™ λΆ„μ•Όλ₯Ό λΉ„λ‘―ν•œ λŒ€λΆ€λΆ„μ˜ 계산에 μžˆμ–΄μ„œ μΆ©λΆ„ν•˜μ§€ μ•Šλ‹€. 반면 double은 μ•½ 15개 μ •λ„μ˜ 정밀도λ₯Ό 가진닀.

= 계산 μ‹œ double이 floatλ³΄λ‹€λŠ” μ‹ λ’°κ°€ λœλ‹€.

- μ΄λŠ” μ‹€μˆ˜κ°€ 근삿값을 μ‚¬μš©ν•˜μ—¬ κ³„μ‚°λ˜κΈ° λ•Œλ¬ΈμΈλ°, μžμ„Έν•œ λ‚΄μš©μ€ IEEE 754λ₯Ό μ°Έκ³ ν•˜μž.

 

+ Tip.

κΈˆμ•‘μ„ λ‚˜νƒ€λ‚΄λŠ” 데 λΆ€λ™μ†Œμˆ˜μ ν˜•μ„ μ‚¬μš©ν•˜λ©΄ μ•ˆ λœλ‹€. λΆ€λ™μ†Œμˆ˜μ ν˜•μ€ 근본적으둜 λΆ€μ •ν™•ν•œ ν‘œν˜„법이기 λ•Œλ¬Έμ— κΈˆμ•‘μ²˜λŸΌ μ •ν™•ν•˜μ—¬μ•Ό ν•˜λŠ” 것은 λ‚˜νƒ€λ‚΄λ©΄ μ•ˆ λœλ‹€.

λŒ€μ‹ μ— the java.math.BigDecimal 같은 클래슀λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 μ’‹λ‹€.

 

 

 

그럼 λ‹€μŒμœΌλ‘œ μ°Έμ‘° μžλ£Œν˜•!
  • 기본적으둜 java.lang.Object λ₯Ό μƒμ†λ°›μœΌλ©΄ μ°Έμ‘°ν˜•μ΄ λœλ‹€.
  • ν΄λž˜μŠ€ν˜•(Class Type), μΈν„°νŽ˜μ΄μŠ€ν˜•(Interface Type), λ°°μ—΄ν˜•(Array type)이 μžˆλ‹€.
  • λ³€μˆ˜λ₯Ό μ„ μ–Έν•  λ•Œ, μžλ°” APIμ—μ„œ μ œκ³΅λ˜κ±°λ‚˜ ν”„λ‘œκ·Έλž˜λ¨Έμ— μ˜ν•΄μ„œ λ§Œλ“€μ–΄μ§„ 클래슀λ₯Ό μžλ£Œν˜•μœΌλ‘œ μ‚¬μš©ν•˜λŠ” 것.

              = λͺ¨λ“  ν΄λž˜μŠ€κ°€ 자료 ν˜•νƒœλ‘œ μ‚¬μš©λ  수 μžˆλ‹€.

 

μœ„ 3가지 μ°Έμ‘°ν˜• 쀑에 class type만 잠깐 μ†Œκ°œν•˜κ² λ‹€. μžμ„Έν•œ λ‚΄μš©μ„ λͺ¨λ‘ 보고 싢은 뢄듀은 νŽ˜μ΄μ§€ 제일 ν•˜λ‹¨μ˜ 링크λ₯Ό μ°Έκ³ ν•˜λ„λ‘ ν•˜μž!

Class Type

  1. String Class
    - μš°λ¦¬κ°€ 자주 μ‚¬μš©ν•˜λŠ” κ·Έ μžλ£Œν˜• λ§žλ‹€!
    - κΈ°λ³Έν˜•μ²˜λŸΌ μ‚¬μš©ν•˜λ©°, λΆˆλ³€ν•˜λŠ”(immutable) 객체이닀.

  2. Wrapper Class
    - κΈ°λ³Έ μžλ£Œν˜•λ“€μ—κ²Œ null을 λ„£κ³  싢을 λ•Œ μ‚¬μš©ν•  수 μžˆλ‹€.
    - κΈ°λ³Έν˜•μ€ 비객체 ν˜•νƒœλΌ null을 μ‚¬μš©ν•  수 μ—†μ§€λ§Œ 래퍼 ν΄λž˜μŠ€λŠ” κΈ°λ³Έν˜•μ„ class둜 감싼 ν˜•νƒœμ΄κΈ°μ— 객체 ν˜•νƒœλ‘œμ¨ null을 μ‚¬μš©ν•  수 있게 λœλ‹€.

 

 

 


Thanks for πŸ™ˆ

               κΉ¨μ•Œ 상식! 사싀 javaμ—μ„œλŠ” undefined(μ΄ˆκΈ°ν™”κ°€ μ•ˆλ¨)ν•˜λ©΄ errλ₯Ό μΌμœΌμΌœμ„œ ν•„μš” 없을지도 λͺ¨λ₯΄μ§€λ§Œ, μ•Œμ•„λ‘λ©΄ 쒋은 그런!
               μΉœκ΅¬κ»˜μ„œ 포슀트 읽닀가 ν˜ΈκΈ°μ‹¬μ΄ μƒκ²¨μ„œ 이것저것 λˆŒλŸ¬λ³΄λ‹€ μ°Ύμ•˜λ‹€λ©° μ£Όμ…¨λŠ”λ°, 생각보닀 정리가 μž˜λ˜μ–΄ μžˆμ–΄μ„œ 첨뢀함!

               λ§Œμ•½ C/C++을 μ•Œκ³  μžˆλ‹€λ©΄ μœ„μ˜ 링크가 도움이 될지도 λͺ¨λ₯΄κ² λ‹€! λΉ„κ΅ν•˜λ©° κ³΅λΆ€ν•˜μž!