ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • λ³€μˆ˜ 이야기(2) - μžλ°”μ˜ νƒ€μž…(μžλ£Œν˜•)
    개발/Java 2022. 3. 17. 20:16

    봄을 λ§žμ•„ λ°”κΏ”λ΄€μŠ΅λ‹ˆλ‹€ :)

     

    μ•ˆλ…•ν•˜μ„Έμš”,

    이번 μ‹œκ°„μ—λŠ” μžλ°”μ˜ 두가지 μžλ£Œν˜•μ— λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

     

    ν•΄λ‹Ή λ‚΄μš©μ€ 'μžλ°”μ˜ μ‹ ' chapter4λ₯Ό 기초둜 μž‘μ„±ν–ˆμœΌλ©°,

    이λ₯Ό 기반으둜 제 λ‚˜λ¦„μ˜ μš”μ•½ 정리λ₯Ό ν•œ κΈ€μž…λ‹ˆλ‹€.

     

    μžμ„Έν•œ 곡뢀λ₯Ό μœ„ν•΄μ„œλŠ”

    λ¨Όμ € 책을 읽고, μ •λ¦¬μš©μœΌλ‘œ μ°Έκ³ ν•˜μ‹œλ©΄ 베슀트일 것 κ°™μŠ΅λ‹ˆλ‹€!

     

    λ³€μˆ˜μ˜ μ’…λ₯˜μ™€ 이름 μ •μ˜ κ·œμΉ™μ— λŒ€ν•œ λ‚΄μš©μ€ 이전 κ²Œμ‹œκΈ€μ„ ν™•μΈν•˜μ‹œλ©΄ λ©λ‹ˆλ‹€ :)

     

     

    https://mong-dev.tistory.com/10
     

    λ³€μˆ˜ 이야기(1) - μžλ°”μ˜ 4가지 λ³€μˆ˜

    μ•ˆλ…•ν•˜μ„Έμš”, λͺ½λ°λΈŒμž…λ‹ˆλ‹€. μ˜€λŠ˜μ€ μžλ°”μ˜ λ³€μˆ˜μ— λŒ€ν•΄ 이야기 ν•΄λ³ΌκΉŒν•©λ‹ˆλ‹€. ν•΄λ‹Ή λ‚΄μš©μ€ 'μžλ°”μ˜ μ‹ ' chapter4λ₯Ό 기초둜 μž‘μ„±ν–ˆμœΌλ©°, 이λ₯Ό 기반으둜 제 λ‚˜λ¦„μ˜ μš”μ•½ 정리λ₯Ό ν•œ κΈ€μž…λ‹ˆλ‹€. μžμ„Έν•œ

    mong-dev.tistory.com

     

     

     

    μžλ°”μ˜ 두 가지 μžλ£Œν˜•


    - κΈ°λ³Έ μžλ£Œν˜•(Primitive data type)
    - μ°Έμ‘° μžλ£Œν˜•(Reference data type)

     

     

    μžλ°”μ—λŠ” μœ„μ™€ 같이 두가지 μžλ£Œν˜•μ΄ μžˆμŠ΅λ‹ˆλ‹€. 이 λ‘κ°€μ§€μ˜ μ°¨μ΄λŠ” λ¬΄μ—‡μΌκΉŒμš”?

     

    int a = 10; //κΈ°λ³Έ μžλ£Œν˜•
    
    Calculator calc = new Calculator(); //μ°Έμ‘° μžλ£Œν˜•

     

    κΈ°λ³Έ μžλ£Œν˜•μ€ intλ₯Ό μ΄ˆκΈ°ν™”ν•  λ•Œμ— κ·Έλƒ₯ 값을 λ°”λ‘œ 적어 μ£Όμ—ˆκ³ , Calculatorλ₯Ό μ΄ˆκΈ°ν™”ν•  λ•Œμ—λŠ” newλΌλŠ” μ˜ˆμ•½μ–΄λ‘œ 생성을 ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 

     

    - new둜 μ΄ˆκΈ°ν™” ν•΄μ•Όλ§Œ ν•˜λŠ” 것, μΆ”κ°€λ‘œ λ§Œλ“€ 수 μžˆλ‹€. : μ°Έμ‘° μžλ£Œν˜•
    - λ°”λ‘œ μ΄ˆκΈ°ν™”κ°€ κ°€λŠ₯ν•œ 것, μΆ”κ°€λ‘œ λ§Œλ“€ 수 μ—†λ‹€. : κΈ°λ³Έ μžλ£Œν˜•

    *  λ‹€λ§Œ, String의 κ²½μš°λŠ” μ°Έμ‘° μžλ£Œν˜•μ΄μ§€λ§Œ,  μ˜ˆμ™Έμ μœΌλ‘œ newλ₯Ό μ‚¬μš©ν•΄μ„œ 객체λ₯Ό μƒμ„±ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€.
    ex)
    String bookName1 = "God Of Java";
    String bookName1 = new String("God Of Java");

     

     

    κ·Έλ ‡λ‹€λ©΄, μžλ°”μ—μ„œ μ •ν•΄μ Έ μžˆλŠ” κΈ°λ³Έ μžλ£Œν˜•μ— λŒ€ν•΄ μ’€ 더 μ•Œμ•„λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

    ν•΄λ‹Ή λ‚΄μš©μ€ 정리 μš”μ•½λ³Έμ΄λ―€λ‘œ, ν’€μ–΄ μ„€λͺ…ν•˜κΈ°λ³΄λ‹€ 결둠을 ν•œ λˆˆμ— 보기 쉽도둝 ν‘œλ‘œ μ •λ¦¬ν–ˆμŠ΅λ‹ˆλ‹€.

     

     

    κΈ°λ³Έ μžλ£Œν˜•


    ν˜•νƒœ μ’…λ₯˜ λ²”μœ„ νŠΉμ§• κΈ°λ³Έκ°’
    μ •μˆ˜ν˜• byte -128 ~ 127
    (-2⁷ ~ 2⁷-1)
    - 적은 곡간에 보닀 λ§Žμ€ λ‚΄μš©μ„ μ €μž₯ν•˜κΈ° μœ„ν•¨ 0
    short -32,768 ~ 32,767
    (-2¹β΅ ~ 2¹β΅-1)
    - byte둜 ν‘œν˜„ν•˜κΈ°λŠ” λΆ€μ‘±ν•˜κ³ , int둜 ν‘œν˜„ν•˜κΈ°μ—λŠ” λ„ˆλ¬΄ 곡간 λ‚­λΉ„κ°€ μ‹¬ν•˜λ‹€κ³  생각 ν•  λ•Œ μ‚¬μš©ν•œλ‹€. 0
    int -2,147,483,648 ~ 2,147,483,647
    (-2³¹ ~ 2³¹-1)
    - 주둜 많이 μ‚¬μš©ν•˜λŠ” μ •μˆ˜ν˜• 0
    long -9,223,372,036,854,775,808
    ~ 9,223,372,036,854,775,807
    (-2⁢³ ~ 2⁢³-1)
    - int만으둜 λΆ€μ‘±ν•  λ•Œ μ‚¬μš©
    - μ„ μ–Έν•  λ•Œ λ˜λ„λ‘ L을 λΆ™μ—¬μ£ΌλŠ” 것이 μ’‹λ‹€. 그렇지 μ•ŠμœΌλ©΄ κ·Έλƒ₯ int둜 μΈμ‹λœλ‹€.
    0
    char (캐릭터) 0('\u0000') ~ 65,535('\uffff')
    (0 ~ 2¹βΆ-1)
    - μœ μΌν•œ unsigned(λΆ€ν˜Έκ°€ μ—†λŠ”)
    - μ •μ˜λ₯Ό ν•  λ•Œ '(ν™‘λ”°μ˜΄ν‘œ)λ₯Ό μ‚¬μš©ν•œλ‹€.
    ex) char - 'a';
    '\u0000'
    μ†Œμˆ˜ν˜• float - μ†Œμˆ˜μ μ„ μ²˜λ¦¬ν•˜κ³  싢을 λ•Œ
    - λŒ€λŸ‰μœΌλ‘œ μ†Œμˆ˜μ  μžλ¦¬μˆ˜κ°€ 적은 데이터λ₯Ό μ €μž₯ν•  경우
    - λΆ€ν˜Έ(1자리) + μ§€μˆ˜(8자리) + κ°€μˆ˜(23자리) = 32λΉ„νŠΈ
    0.0
    double - - μ†Œμˆ˜μ μ„ μ²˜λ¦¬ν•˜κ³  싢을 λ•Œ
    - 일반적으둜 많이 μ‚¬μš©
    - λΆ€ν˜Έ(1자리) + μ§€μˆ˜(11자리) + κ°€μˆ˜(52자리) = 64λΉ„νŠΈ
    0.0
    기타 boolean true, false   false

     

    λ²”μœ„μ— λ‚˜μ˜€λŠ” μˆ«μžλ“€μ΄ λ³΅μž‘ν•΄ 보일 수 μžˆμ§€λ§Œ, 0κ³Ό 1둜 λ‚˜νƒ€λ‚΄λŠ” 2진법이 μ»΄ν“¨ν„°μ—μ„œ 숫자λ₯Ό ν‘œν˜„ν•  λ•Œ κ°€μž₯ μ μ ˆν•˜λ‹€λŠ” 사싀을 κ³ λ €ν•΄λ³Έλ‹€λ©΄ μ‰½κ²Œ 이해λ₯Ό ν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ λͺ¨λ“  μžλ°”μ˜ 숫자 νƒ€μž…λ“€μ΄ 2의 배수둜 λ²”μœ„κ°€ μ •ν•΄μ§€λŠ” κ²ƒμž…λ‹ˆλ‹€. 

     

    char ν˜•νƒœλ₯Ό μ œμ™Έν•œ λ‚˜λ¨Έμ§€ μ§€μˆ˜ λΆ€λΆ„μ˜ 숫자만 λ³Έλ‹€λ©΄, 7, 15, 31, 63을 λ³Ό 수 μžˆλŠ”λ°, μ΄λŠ” 2의 n제곱 - 1 둜 ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 그리고 n은 3λΆ€ν„° μ‹œμž‘ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 즉, 7(8-1), 15(=16-1), 31(=32-1), 63(64-1)μž…λ‹ˆλ‹€. "각 νƒ€μž…μ΄ λ‚˜νƒ€λ‚Ό 수 μžˆλŠ” 숫자의 λ²”μœ„κ°€ 2λ°°μ”© μ¦κ°€λœλ‹€."κ³  κΈ°μ–΅ν•˜λ©΄ λ˜κ² μŠ΅λ‹ˆλ‹€.

     

    byteλŠ” 8λΉ„νŠΈμ˜ λΆ€ν˜Έκ°€ μžˆλŠ”(signed) νƒ€μž…μž…λ‹ˆλ‹€. 8λΉ„νŠΈλΌλŠ” 것은 0κ³Ό 1둜 ν‘œν˜„ν•  수 μžˆλŠ” 곡간이 8κ°œκ°€ μžˆλ‹€λŠ” 말이고, 1λ°”μ΄νŠΈλΌκ³  λΆ€λ₯΄κΈ°λ„ν•©λ‹ˆλ‹€.

     

    μž μ‹œ byte의 λ²”μœ„λ₯Ό 보자면, -128 ~ 127라고 λ‚˜μ™€μžˆλŠ”κ²ƒμ„ λ³Ό 수 μžˆλŠ”λ° μ—¬κΈ°μ„œ ν•œκ°€μ§€ μ˜λ¬Έμ μ„ κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.

    그림을 톡해 확인해 λ³΄κ² μŠ΅λ‹ˆλ‹€.

     

    2⁷ 2⁢ 2⁡ 2⁴ 2³ 2² 2¹ 2⁰
    1 1 1 1 1 1 1 1

    각 곡간이 λͺ¨λ‘ 1둜 μ±„μ›Œμ§€κ²Œ λœλ‹€λ©΄, 2⁷X1 + 2⁢X1 + 2⁡X1 + 2⁴X1 + 2³X1 + 2²X1 + 2¹X1 + 2⁰X0 = 255 λΌλŠ” μˆ«μžκ°€ λ‚˜μ˜€λŠ”λ°, byte의 λ²”μœ„λŠ” λ°˜ν† λ§‰μ΄ λ‚˜ μžˆλŠ” 것을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. λ‹€μ‹œ μ•„κΉŒ ν•˜λ˜ μ΄μ•ΌκΈ°λ‘œ λŒμ•„κ°€μžλ©΄, μžλ°”μ˜ κΈ°λ³Έ μžλ£Œν˜•μ— ν¬ν•¨λœ μˆ«μžλ“€μ€ charλ₯Ό μ œμ™Έν•˜κ³ λŠ” λͺ¨λ‘ λΆ€ν˜Έκ°€ μžˆλŠ” signed νƒ€μž…λ‹ˆλ‹€. byte의 곡간은 8개인데, μŒμˆ˜μ™€ μ–‘μˆ˜λ₯Ό μ–΄λ–»κ²Œ ν‘œν˜„μ„ ν•΄μ•Όν•˜λŠ”μ§€μ— λŒ€ν•œ 고민의 닡이 μ—¬κΈ° μžˆμŠ΅λ‹ˆλ‹€. "맨 μ•žμ— μžˆλŠ” 값이 0이면 μ–‘μˆ˜, 1이면 음수"둜 μ •ν•œ κ²ƒμž…λ‹ˆλ‹€. 즉, κ°€μž₯ μ™Όμͺ½μ˜ 곡간은 2⁷이 μ•„λ‹ˆλΌ κ·Έλƒ₯, μŒμˆ˜μ™€ μ–‘μˆ˜λ₯Ό κ΅¬λΆ„ν•˜κΈ° μœ„ν•œ κ³΅κ°„μž…λ‹ˆλ‹€.

     

    λ‹€μ‹œ λ§ν•΄μ„œ, 2⁢X1 + 2⁡X1 + 2⁴X1 + 2³X1 + 2²X1 + 2¹X1 + 2⁰X0 = 127 이 λ˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

     

    그런데 μ™œ μŒμˆ˜λŠ” -128κΉŒμ§€μΈκ°€? λΌλŠ” 의문이 μžμ—°μŠ€λŸ½κ²Œ λ“€κ²Œ λ©λ‹ˆλ‹€. 

     

      2⁢ 2⁡ 2⁴ 2³ 2² 2¹ 2⁰
    0 0 0 0 0 0 0 0
    1 0 0 0 0 0 0 0

     

    μ§€κΈˆκΉŒμ§€ μ‚΄νŽ΄λ³Έ 바에 μ˜ν•˜λ©΄, λ‘˜ λ‹€ 값이 0이라고 생각할 κ²ƒμž…λ‹ˆλ‹€. ν•˜μ§€λ§Œ 밑에 μžˆλŠ” 맨 μ•žμ—λ§Œ 1인 byte의 값은 0이 μ•„λ‹ˆλΌ -128μž…λ‹ˆλ‹€. λ‹€μ‹œ λ§ν•΄μ„œ byte, short, int, long νƒ€μž…μ˜ κ°€μž₯ μ•žμ˜ κ°’λ§Œ 1인 것은 ν•΄λ‹Ή νƒ€μž…μ˜ μ΅œμ†Œκ°’μ΄κ³ , 두 번째 κ°’λΆ€ν„° 1둜 μ±„μ›Œμ Έ μžˆλŠ” 것은 ν•΄λ‹Ή νƒ€μž…μ˜ μ΅œλŒ€κ°’μ΄ λ©λ‹ˆλ‹€. 그리고, μ ˆλŒ€κ°’λ§ŒμœΌλ‘œ 따지면, μ΅œμ†Œκ°’μ˜ μ ˆλŒ€κ°’μ΄ μ΅œλŒ€κ°’μ˜ μ ˆλŒ€κ°’λ³΄λ‹€ λ”± 1이 더 ν½λ‹ˆλ‹€. (μ΄λŸ¬ν•œ μ΄μœ λŠ” λ’€μ—μ„œ λΉ„νŠΈ μ—°μ‚°μžλ₯Ό 배울 λ•Œ λ‹€μ‹œ 보도둝 ν•˜κ² μŠ΅λ‹ˆλ‹€.)

     

    float와 double의 λ²”μœ„λ₯Ό μ•ŒκΈ° μœ„ν•΄μ„œλŠ” λ³΅μž‘ν•œ μˆ˜ν•™ 곡식을 μ•Œμ•„μ•Όν•˜λŠ”λ°, μ΄λŠ” μƒλž΅ν•˜λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€. 

    λ‹€λ§Œ floatλ‚˜ double 같은 κ²½μš°λŠ”, 돈 계산과 같이 정확성을 μš”κ΅¬ν•˜λŠ” μƒν™©μ—μ„œ μ‚¬μš©ν•˜λ©΄ μ•ˆλ©λ‹ˆλ‹€. μ΄λŠ” 각각 32λΉ„νŠΈμ™€ 64λΉ„νŠΈλ‘œ μ œκ³΅ν•  수 μžˆλŠ” λ²”μœ„λ₯Ό λ„˜μ–΄μ„€ 경우, κ·Έ κ°’μ˜ 정확성을 보μž₯ν•˜μ§€ λͺ»ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. 이런 κ²½μš°μ—λŠ” java.math.BigDecimalμ΄λΌλŠ” 클래슀λ₯Ό μ‚¬μš©ν•΄μ•Όλ§Œ ν•©λ‹ˆλ‹€. (λ‚˜μ€‘μ— λ‹€λ£° κΈ°νšŒκ°€ 있으면 λ‹€λ€„λ³΄κ² μŠ΅λ‹ˆλ‹€ :) )

     

    λ§ˆμ§€λ§‰μœΌλ‘œ, char에 λŒ€ν•΄ λͺ‡κ°€μ§€λ§Œ 이야기 ν•˜κ³  λ§ˆλ¬΄λ¦¬ν•˜κ³ μž ν•©λ‹ˆλ‹€.

     

    char의 값을 μ§€μ •ν•˜λŠ” 방법은 λ‹€μŒκ³Ό 같이 3κ°€μ§€μž…λ‹ˆλ‹€.

     

    - ν™‘λ”°μ˜΄ν‘œ μ•ˆμ— 직접 'a'와 같이 κ·Έ 값을 λ„£λŠ”λ‹€.
    - '\u0000'κ³Ό 같이 ν™‘λ”°μ˜΄ν‘œ μ•ˆμ— \u와 16μ§„μˆ˜ 값을 λ„£λŠ”λ‹€.
    - ν•΄λ‹Ή κ°’μ˜ μœ λ‹ˆμ½”λ“œ 번호λ₯Ό μ§€μ •ν•œλ‹€.(단, κ·Έ λ²ˆν˜ΈλŠ” char λ²”μœ„ λ‚΄μ˜ 숫자, 즉 0!65,636 사이여야 ν•œλ‹€.)

     

     

     

    Quiz


    λ‹€μŒ 쀑, 잘λͺ» μ •μ˜ν•œ charλ₯Ό μ°Ύμ•„λ³΄μ„Έμš”.

     

    1. char a = 'a';
    2. char b = 'ab';
    3. char c = 'κ°€';
    4. char d = '\u97';
    5. char e = ''\u1188;
    6. char f = -1;
    7. char g = 999;

     

     

    Answer


    1. char a = 'a'; O
    2. char b = 'ab'; X char의 ν™‘λ”°μ˜΄ν‘œ μ•ˆμ— \u둜 μ‹œμž‘ν•˜μ§€ μ•ŠλŠ” 이상 두 개의 λ¬ΈμžλŠ” 올 수 μ—†λ‹€.
    3. char c = 'κ°€'; O ν•œκΈ€μ€ λŒ€λΆ€λΆ„ 2λ°”μ΄νŠΈλ‘œ ν‘œν˜„ν•˜λ©°, μœ λ‹ˆμ½”λ“œμ— ν¬ν•¨λ˜μ–΄ μžˆλ‹€. μ‚¬μš©ν•  수 μžˆλ‹€. ('κ°€' -> 44032)
    4. char d = '\u97'; X \u λ’€μ—λŠ” λ°˜λ“œμ‹œ 4개의 16μ§„μˆ˜ 값이 μ™€μ•Όλ§Œ ν•œλ‹€. 
    5. char e = ''\u1188; O
    6. char f = -1; X charλŠ” μžλ°”μ˜ μ •μˆ˜ν˜• 쀑 μœ μΌν•œ λΆ€ν˜Έκ°€ μ—†λŠ”(unsigned) 값이닀.
    7. char g = 999; O

     

     

    κ°μ‚¬ν•©λ‹ˆλ‹€ :)

     

     

     

     

    λŒ“κΈ€

Designed by Tistory.