[Java] μžλ°”μ˜ 데이터 νƒ€μž…(primitive type, reference type)

2022. 11. 22. 14:31Β·Algorithm/Data Structure

μžλ°”μ˜ λ³€μˆ˜μ˜ 데이터 νƒ€μž…μ€ primitive typeκ³Ό reference type으둜 λ‚˜λ‰˜λŠ”λ°,

primitive type(μ›μ‹œ νƒ€μž…)κ³Ό reference type(μ°Έμ‘° νƒ€μž…)에 λŒ€ν•΄ μ•Œμ•„λ³΄μž.


μ›μ‹œ νƒ€μž…(primitive type)

primitive type(μ›μ‹œ νƒ€μž…μ€) μ–Έμ–΄μ—μ„œ 사전 μ •μ˜ λ˜μ–΄ μžˆλŠ” 데이터 νƒ€μž…μœΌλ‘œ,

μ‰½κ²Œ 말해, μ •μˆ˜, μ‹€μˆ˜, 문자, 논리 λ¦¬ν„°λŸ΄λ“±μ˜ μ‹€μ œ 데이터 값을 μ €μž₯ν•˜λŠ” νƒ€μž…μ΄λ‹€.


μ°Έμ‘° νƒ€μž…(reference type)

reference type(μ°Έμ‘° νƒ€μž…)은 객체(Object)의 λ²ˆμ§€λ₯Ό μ°Έμ‘°(μ£Όμ†Œλ₯Ό μ €μž₯!!)ν•˜λŠ” νƒ€μž…μœΌλ‘œ λ©”λͺ¨λ¦¬ λ²ˆμ§€ 값을 톡해 객체λ₯Ό μ°Έμ‘°ν•˜λŠ” νƒ€μž…μ΄λ‹€. (call by reference)

 

μ›μ‹œ νƒ€μž…μ„ μ œμ™Έν•œ νƒ€μž…λ“€(λ¬Έμžμ—΄, λ°°μ—΄, μ—΄κ±°, 클래슀, μΈν„°νŽ˜μ΄μŠ€)을 λ§ν•œλ‹€.

 

Javaμ—μ„œ μ‹€μ œ κ°μ²΄λŠ” νž™ μ˜μ—­μ— μ €μž₯되며 μ°Έμ‘° νƒ€μž… λ³€μˆ˜λŠ” μŠ€νƒ μ˜μ—­μ— μ‹€μ œ κ°μ²΄λ“€μ˜ μ£Όμ†Œλ₯Ό μ €μž₯ν•˜μ—¬, 객체λ₯Ό μ‚¬μš©ν• λ•Œ λ§ˆλ‹€ μ°Έμ‘° λ³€μˆ˜μ— μ €μž₯된 객체의 μ£Όμ†Œλ₯Ό λΆˆλŸ¬μ™€ μ‚¬μš©ν•˜λŠ” 방식이닀.

 

 

  • 정적 λ©”λͺ¨λ¦¬ μŠ€νƒ(Stack) μ˜μ—­

μŠ€νƒ μ˜μ—­μ—λŠ” κΈ°λ³Ένƒ€μž… λ³€μˆ˜κ°€ ν• λ‹Ήλ˜κ³  λ³€μˆ˜μ˜ μ‹€μ œ 값듀이 μ €μž₯λœλ‹€.

μ°Έμ‘° νƒ€μž…μ˜ λ³€μˆ˜λ“€μ€ 이 μŠ€νƒ μ˜μ—­μ—μ„œ νž™ μ˜μ—­μ— μƒμ„±λœ κ°μ²΄λ“€μ˜ μ£Όμ†Œ 값을 μ €μž₯ν•˜κ³  μžˆλŠ”λ‹€.

객체 μ•ˆμ˜ λ©”μ†Œλ“œμ˜ μž‘μ—…μ΄ μ’…λ£Œλ˜λ©΄ ν• λ‹Ήλ˜μ—ˆλ˜ λ©”λͺ¨λ¦¬ 곡간은 λ°˜ν™˜λ˜μ–΄ λΉ„μ›Œμ§„λ‹€.

  • 동적 λ©”λͺ¨λ¦¬ νž™(Heap) μ˜μ—­

νž™ μ˜μ—­μ—λŠ” 객체와 배열이 μƒμ„±λœλ‹€.

그리고 μ°Έμ‘°νƒ€μž…(λ°°μ—΄, 클래슀, μΈν„°νŽ˜μ΄μŠ€ λ“±)듀이 μ΄ κ°μ²΄λ“€μ˜ μ£Όμ†Œλ₯Ό μŠ€νƒ μ˜μ—­μ— μ €μž₯ν•œλ‹€.

κΈ°λ³Ένƒ€μž… λ³€μˆ˜λ“€κ³ΌλŠ” λ‹€λ₯΄κ²Œ 크기가 μ •ν•΄μ Έ μžˆμ§€ μ•Šλ‹€.

ν”„λ‘œκ·Έλž¨ μ‹€ν–‰μ‹œ λ©”λͺ¨λ¦¬μ— λ™μ μœΌλ‘œ ν• λ‹Ήλœλ‹€.

μ°Έμ‘°ν•˜λŠ” λ³€μˆ˜κ°€ μ—†μœΌλ©΄ μžλ°”μ˜ κ°€λΉ„μ§€ 컬렉터가 μ œκ±°ν•œλ‹€.

 

κ°€λΉ„μ§€ 컬렉터(Garbage collector) : λ©”λͺ¨λ¦¬μ˜ νž™ μ˜μ—­μ— ν• λ‹Ήλœ 더 이상 μ‚¬μš©λ˜μ§€ μ•ŠλŠ” 객체λ₯Ό 제거 ν•˜λŠ” μ—­ν• 

μ΄λ ‡κ²Œ 객체λ₯Ό μ œκ±°ν•˜λ©° λ©”λͺ¨λ¦¬κ°€ κ΄€λ¦¬λœλ‹€.


Boxing, Unboxing

Boxing(λ°•μ‹±)은 μ›μ‹œ νƒ€μž…μ„ μ°Έμ‘° νƒ€μž…μœΌλ‘œ λ³€ν™˜ μ‹œν‚€λŠ” 것을 λ§ν•˜κ³ , Unboxing(μ–Έλ°•μ‹±)은 μ°Έμ‘° νƒ€μž…μ„ μ›μ‹œ νƒ€μž…μœΌλ‘œ λ³€ν™˜ μ‹œν‚€λŠ” 것을 λ§ν•œλ‹€.


μ›μ‹œ νƒ€μž…κ³Ό μ°Έμ‘° νƒ€μž… 차이

κΈ°λŠ₯적으둜 μ›μ‹œ νƒ€μž…κ³Ό μ°Έμ‘° νƒ€μž…μ€ 크게 2κ°€μ§€ 차이가 μžˆλ‹€.

 

1. Null 포함 κ°€λŠ₯ μ—¬λΆ€

μ›μ‹œνƒ€μž…μ€ null을 담을 수 μ—†μ§€λ§Œ, μ°Έμ‘° νƒ€μž…μ€ κ°€λŠ₯ν•˜λ‹€.

// λΆˆκ°€λŠ₯
int i = null;

// κ°€λŠ₯
Integer integer = null; 

 

2. μ œλ„ˆλ¦­ νƒ€μž…μ—μ„œ μ‚¬μš© κ°€λŠ₯ μ—¬λΆ€

μ›μ‹œνƒ€μž…μ€ μ œλ„ˆλ¦­ νƒ€μž…μ—μ„œ μ‚¬μš©ν•  수 μ—†μ§€λ§Œ, μ°Έμ‘° νƒ€μž…μ€ κ°€λŠ₯ν•˜λ‹€.

// λΆˆκ°€λŠ₯
List<i> list;

// κ°€λŠ₯
List<Integer> list;

μ›μ‹œ νƒ€μž…μ˜ μž₯점

μ›μ‹œ νƒ€μž…μ€ μ„±λŠ₯ μƒμ˜ 이점이 μžˆλ‹€.

1. 접근속도

μ›μ‹œνƒ€μž…μ€ 'μŠ€νƒ' λ©”λͺ¨λ¦¬μ— 값이 μ‘΄μž¬ν•œλ‹€.

λ°˜λ©΄μ— μ°Έμ‘°νƒ€μž…은 ν•˜λ‚˜μ˜ μΈμŠ€ν„΄μŠ€μ΄κΈ° λ•Œλ¬Έμ— 'μŠ€νƒ' λ©”λͺ¨λ¦¬μ—λŠ” μ°Έμ‘°κ°’λ§Œ μžˆκ³ , μ‹€μ œ 값은 νž™ λ©”λͺ¨λ¦¬μ— μ‘΄μž¬ν•œλ‹€.

그리고 κ°’을 ν•„μš”λ‘œ ν•  λ•Œλ§ˆλ‹€ μ–Έλ°•μ‹± 과정을 거쳐야 ν•˜λ‹ˆ μ›μ‹œνƒ€μž…κ³Ό λΉ„κ΅ν•΄μ„œ μ ‘κ·Ό 속도가 λŠλ €μ§€κ²Œ λœλ‹€.
μ˜ˆμ™Έμ μœΌλ‘œ μ—„μ²­ 큰 숫자λ₯Ό 볡사해야 ν•œλ‹€λ©΄, μ°Έμ‘°κ°’λ§Œ λ„˜κΈΈ 수 μžˆλŠ” μ°Έμ‘°νƒ€μž…μ΄ 쒋을 수 도 μžˆλ‹€.

2. λ©”λͺ¨λ¦¬ μ–‘

μ›μ‹œνƒ€μž…μ΄ μ‚¬μš©ν•˜λŠ” λ©”λͺ¨λ¦¬μ°Έμ‘°νƒ€μž…이 μ‚¬μš©ν•˜λŠ” λ©”λͺ¨λ¦¬

boolean - 1bit Boolean – 128 bits
byte - 8bits Byte - 128bits
short, cagr - 16bits Short, Charater - 128bits
int, float - 32bits Integer, Float - 128bits
long, double - 64bits Long, Double - 196bits

μ›μ‹œ νƒ€μž…λ³΄λ‹€ μ°Έμ‘° νƒ€μž…μ΄ μ‚¬μš©ν•˜λŠ” λ©”λͺ¨λ¦¬μ–‘이 μ••λ„μ μœΌλ‘œ λ†’λ‹€.

λ”°λΌμ„œ λ©”λͺ¨λ¦¬ μ‚¬μš©μ μœΌλ‘œλ„ μ›μ‹œ νƒ€μž…μ΄ μ°Έμ‘° νƒ€μž…λ³΄λ‹€ 효율적으둜 μ‚¬μš©ν•  수 μžˆλ‹€.

 

 

 

μ°Έκ³ μ‚¬μ΄νŠΈ

μ›μ‹œνƒ€μž…, μ°Έμ‘°νƒ€μž…(Primitive Type, Reference Type)

 

'Algorithm > Data Structure' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[자료ꡬ쑰] μš°μ„ μˆœμœ„ 큐 remove, poll λ©”μ„œλ“œμ— λŒ€ν•΄  (0) 2022.12.16
[Java] int ν˜•(Primitive type)배열을 List둜 + λ‚΄λ¦Όμ°¨μˆœ( Stream μ‚¬μš©)  (0) 2022.11.22
[Python] νž™ 자료ꡬ쑰 / νž™ν(heapq)  (0) 2022.09.19
Python Deque(Double-Ended Queue) + Stack, Queue κ°„λ‹¨κ°œλ…  (0) 2021.12.23
Arrays.sort ( μ‚¬μ „μˆœμ„œλŒ€λ‘œ μ •λ ¬ν•΄μ£ΌλŠ” λ©”μ†Œλ“œ)  (0) 2021.10.25
'Algorithm/Data Structure' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [자료ꡬ쑰] μš°μ„ μˆœμœ„ 큐 remove, poll λ©”μ„œλ“œμ— λŒ€ν•΄
  • [Java] int ν˜•(Primitive type)배열을 List둜 + λ‚΄λ¦Όμ°¨μˆœ( Stream μ‚¬μš©)
  • [Python] νž™ 자료ꡬ쑰 / νž™ν(heapq)
  • Python Deque(Double-Ended Queue) + Stack, Queue κ°„λ‹¨κ°œλ…
_κ±°λˆ„
_κ±°λˆ„
λΈ”λ‘œκ·Έ μ΄μ‚¬ν–ˆμŠ΅λ‹ˆλ‹€! https://velog.io/@pigonhair/posts
  • _κ±°λˆ„
    κ±°λˆ„λ„€λ£ΈπŸ”‘
    _κ±°λˆ„
  • 전체
    였늘
    μ–΄μ œ
    • κ±°λˆ„λ„€λ£Έ (83)
      • Languages | Frameworks (41)
        • Java (10)
        • Spring (23)
        • Docker (8)
      • Git | Github (1)
      • DBMS (4)
        • SQL (4)
      • DevOps | Server (3)
      • OS (6)
        • Linux (6)
      • Algorithm (26)
        • Theory (1)
        • Data Structure (7)
        • BaekJoon (5)
        • Programmers (1)
        • KBro Study (12)
  • λΈ”λ‘œκ·Έ 메뉴

    • Github
    • BaekJoon
    • solved class
    • λ°©λͺ…둝
  • 인기 κΈ€

  • 졜근 λŒ“κΈ€

  • 졜근 κΈ€

  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.3
_κ±°λˆ„
[Java] μžλ°”μ˜ 데이터 νƒ€μž…(primitive type, reference type)
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”