# Primitive type & Reference type



# Goal


  • Primitive type์— ๋Œ€ํ•ด ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Reference type์— ๋Œ€ํ•ด ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค.

# Abstract


์ž๋ฐ”์—๋Š” ๊ธฐ๋ณธํ˜•(Primitive type)๊ณผ ์ฐธ์กฐํ˜•(Reference type)์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ๋ถ„๋ฅ˜๋Š” ๋‹ค์Œ์ฒ˜๋Ÿผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.


Java Data Type 
ใ„ด Primitive Type
    ใ„ด Boolean Type(boolean)
    ใ„ด Numeric Type
        ใ„ด Integral Type
            ใ„ด Integer Type(short, int, long)
            ใ„ด Floating Point Type(float, double)
        ใ„ด Character Type(char)
ใ„ด Reference Type
    ใ„ด Class Type
    ใ„ด Interface Type
    ใ„ด Array Type
    ใ„ด Enum Type
    ใ„ด etc.

# Primitive type (๊ธฐ๋ณธํ˜• ํƒ€์ž…)


  • JAVA์—์„œ๋Š” ์ด 8๊ฐ€์ง€์˜ Primitive type์„ ๋ฏธ๋ฆฌ ์ •์˜ํ•˜๊ณ  ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • ์ž๋ฐ”์—์„œ ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•์€ ๋ฐ˜๋“œ์‹œ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ์„ ์–ธ(Declared)๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • OS์— ๋”ฐ๋ผ ์ž๋ฃŒํ˜•์˜ ๊ธธ์ด๊ฐ€ ๋ณ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ๋น„๊ฐ์ฒด ํƒ€์ž…์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ null ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ Primitive type์— Null์„ ๋„ฃ๊ณ  ์‹ถ๋‹ค๋ฉด Wrapper Class๋ฅผ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ์Šคํƒ(Stack) ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.



  • # boolean

    • ๋…ผ๋ฆฌํ˜•์ธ boolean์˜ ๊ธฐ๋ณธ๊ฐ’์€ false์ด๋ฉฐ ์ฐธ๊ณผ ๊ฑฐ์ง“์„ ์ €์žฅํ•˜๋Š” ํƒ€์ž…์ž…๋‹ˆ๋‹ค. ์ฃผ๋กœ yes/no, on/off ๋“ฑ์˜ ๋…ผ๋ฆฌ ๊ตฌํ˜„์— ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ ๋‘๊ฐ€์ง€ ๊ฐ’๋งŒ ํ‘œํ˜„ํ•˜๋ฏ€๋กœ ๊ฐ€์žฅ ํฌ๊ธฐ๊ฐ€ ์ž‘์Šต๋‹ˆ๋‹ค.

    • boolean์€ ์‹ค์ œ๋กœ 1bit๋ฉด ์ถฉ๋ถ„ํ•˜์ง€๋งŒ, ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ์ตœ์†Œ ๋‹จ์œ„๊ฐ€ 1byte์ด๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๊ฐ€ 1byte์ž…๋‹ˆ๋‹ค.


  • # byte

    • byte๋Š” ์ฃผ๋กœ ์ด์ง„๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํƒ€์ž…์ž…๋‹ˆ๋‹ค.

  • # short

    • short๋Š” C์–ธ์–ด์™€์˜ ํ˜ธํ™˜์„ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ํƒ€์ž…์œผ๋กœ ์ž˜ ์‚ฌ์šฉ๋˜์ง€๋Š” ์•Š๋Š” ํƒ€์ž…์ž…๋‹ˆ๋‹ค.

  • # int

    • int ํ˜•์€ ์ž๋ฐ”์—์„œ ์ •์ˆ˜ ์—ฐ์‚ฐ์„ ํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ณธ ํƒ€์ž…์ž…๋‹ˆ๋‹ค. ์ฆ‰, byte ํ˜น์€ short ์˜ ๋ณ€์ˆ˜๊ฐ€ ์—ฐ์‚ฐ์„ ํ•˜๋ฉด ์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ๋Š” intํ˜•์ด ๋ฉ๋‹ˆ๋‹ค.

  • # long

    • ์ˆ˜์น˜๊ฐ€ ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ํ”„๋กœ๊ทธ๋žจ(์€ํ–‰ ๋ฐ ์šฐ์ฃผ์™€ ๊ด€๋ จ๋œ ํ”„๋กœ๊ทธ๋žจ)์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • long ํƒ€์ž…์˜ ๋ณ€์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™” ํ•  ๋–„์—๋Š” ์ •์ˆ˜๊ฐ’ ๋’ค์— ์•ŒํŒŒ๋ฒณ L์„ ๋ถ™์—ฌ์„œ long ํƒ€์ž…(์ฆ‰, 8byte)์˜ ์ •์ˆ˜ ๋ฐ์ดํ„ฐ์ž„์„ ์•Œ๋ ค์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์ผ ์ •์ˆ˜๊ฐ’์ด int์˜ ๊ฐ’์˜ ์ €์žฅ ๋ฒ”์œ„๋ฅผ ๋„˜๋Š” ์ •์ˆ˜์—์„œ L์„ ๋ถ™์ด์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ปดํŒŒ์ผ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
    long l = 2147483648; // ์ปดํŒŒ์ผ ์—๋Ÿฌ ๋ฐœ์ƒ
    long l = 2147483648L;
    

  • # float, double

    • ์‹ค์ˆ˜๋ฅผ ๊ฐ€์ˆ˜์™€ ์ง€์ˆ˜ ํ˜•์‹์œผ๋กœ ์ €์žฅํ•˜๋Š” ๋ถ€๋™์†Œ์ˆ˜์  ๋ฐฉ์‹์œผ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

    • ๊ฐ€์ˆ˜๋ฅผ ํ‘œํ˜„ํ•˜๋Š”๋ฐ ์žˆ์–ด doubleํ˜•์ด floatํ˜•๋ณด๋‹ค ํ‘œํ˜„ ๊ฐ€๋Šฅ ๋ฒ”์œ„๊ฐ€ ๋” ํฌ๋ฏ€๋กœ doubleํ˜•์ด ๋ณด๋‹ค ์ •๋ฐ€ํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • ์ž๋ฐ”์—์„œ ์‹ค์ˆ˜์˜ ๊ธฐ๋ณธ ํƒ€์ž…์€ doubleํ˜•์ด๋ฏ€๋กœ floatํ˜•์—๋Š” ์•ŒํŒŒ๋ฒณ F๋ฅผ ๋ถ™์—ฌ์„œ float ํ˜•์ž„์„ ๋ช…์‹œํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

      float f = 1234.567;  // ๋ฌด์กฐ๊ฑด double ํƒ€์ž…์œผ๋กœ ์ดํ•ดํ•˜๋ ค๊ณ  ํ•˜๋ฏ€๋กœ ์ปดํŒŒ์ผ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
      float f = 1234.567F; // float type์ด๋ผ๋Š” ๊ฒƒ์„ ํ‘œ์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
      


# Reference type (์ฐธ์กฐํ˜• ํƒ€์ž…)


  • JAVA์—์„œ Primitive type์„ ์ œ์™ธํ•œ ํƒ€์ž…๋“ค์ด ๋ชจ๋‘ Reference type ์ž…๋‹ˆ๋‹ค.

  • Reference type์€ JAVA์—์„œ ์ตœ์ƒ์ธ java.lang.Objectํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•˜๋Š” ๋ชจ๋“  ํด๋ž˜์Šค๋“ค์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  new๋กœ ์ธํ•˜์—ฌ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ๋“ค์€ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ธ Heap ์˜์—ญ์— ์ƒ์„ฑ์„ ํ•˜๊ฒŒ๋˜๊ณ , Garbage Collector๊ฐ€ ๋Œ๋ฉด์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.

  • ํด๋ž˜์Šค ํƒ€์ž…(class type) , ์ธํ„ฐํŽ˜์ด์Šค ํƒ€์ž…(interface type) , ๋ฐฐ์—ด ํƒ€์ž…(array type) , ์—ด๊ฑฐ ํƒ€์ž…(enum type) ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋นˆ ๊ฐ์ฒด๋ฅผ ์˜๋ฏธํ•˜๋Š” Null์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

  • ๋ฌธ๋ฒ•์ƒ์œผ๋กœ๋Š” ์—๋Ÿฌ๊ฐ€ ์—†์ง€๋งŒ ์‹คํ–‰์‹œ์ผฐ์„ ๋•Œ ์—๋Ÿฌ๊ฐ€ ๋‚˜๋Š” ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ฐ์ฒด๋‚˜ ๋ฐฐ์—ด์„ Null ๊ฐ’์œผ๋กœ ๋ฐ›์œผ๋ฉด NullPointException์ด ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ๋ณ€์ˆ˜ ๊ฐ’์„ ๋„ฃ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • Heap ๋ฉ”๋ชจ๋ฆฌ์— ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค๋Š” ๋ฉ”์†Œ๋“œ๋‚˜ ๊ฐ์ข… ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด JVM์˜ Stack ์˜์—ญ์— ์กด์žฌํ•˜๋Š” Frame์— ์ผ์ข…์˜ ํฌ์ธํ„ฐ(C์˜ ํฌ์ธํ„ฐ์™€๋Š” ๋‹ค๋ฆ…๋‹ˆ๋‹ค.)์ธ ์ฐธ์กฐ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด ์ด๋ฅผ ํ†ตํ•ด ์ธ์Šคํ„ด์Šค๋ฅผ ํ•ธ๋“ค๋งํ•ฉ๋‹ˆ๋‹ค.



# String Class


ํด๋ž˜์Šคํ˜•์—์„œ๋„ String ํด๋ž˜์Šค๋Š” ์กฐ๊ธˆ ํŠน๋ณ„ํ•ฉ๋‹ˆ๋‹ค. ์ด ํด๋ž˜์Šค๋Š” ์ฐธ์กฐํ˜•์— ์†ํ•˜์ง€๋งŒ ๊ธฐ๋ณธ์ ์ธ ์‚ฌ์šฉ์€ ๊ธฐ๋ณธํ˜• ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ถˆ๋ณ€(immutable)ํ•˜๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. String ํด๋ž˜์Šค์—๋Š” ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์ฃผ๋Š” ๋ฉ”์†Œ๋“œ๋“ค์ด ์กด์žฌํ•˜์ง€๋งŒ ํ•ด๋‹น ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”๊พผ๋‹ค ํ•ด๋„ ์ƒˆ๋กœ์šด String ํด๋ž˜์Šค ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๊ธฐ๋ณธํ˜• ๋น„๊ต๋Š” == ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ String ๊ฐ์ฒด๊ฐ„์˜ ๋น„๊ต๋Š” .equals() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.



# [์ฐธ๊ณ  ์ž๋ฃŒ]

์ตœ์ข… ์ˆ˜์ • : 4/19/2022, 2:09:00 PM