JiYoung Dev πŸ–₯

기술 λ©΄μ ‘ μ€€λΉ„ 4. μžλ°” λ³€μˆ˜μ˜ 데이터 νƒ€μž… Primitive type & Reference type λ³Έλ¬Έ

Study/Java

기술 λ©΄μ ‘ μ€€λΉ„ 4. μžλ°” λ³€μˆ˜μ˜ 데이터 νƒ€μž… Primitive type & Reference type

Shinjio 2023. 11. 8. 12:28
μ˜ˆμƒ 질문 1.μžλ°” 데이터 νƒ€μž… 쀑 κΈ°λ³Έν˜•κ³Ό μ°Έμ‘°ν˜•μ˜ 차이에 λŒ€ν•΄ μ„€λͺ…ν•΄μ£Όμ„Έμš”.
μ˜ˆμƒ 질문 2. μžλ°”μ˜ μ›μ‹œνƒ€μž…λ“€μ€ 무엇이 있으며 각각 λͺ‡ λ°”μ΄νŠΈλ₯Ό μ°¨μ§€ν•˜λ‚˜μš”?

 

μ˜€λŠ˜μ€ μ•„μ£Ό 기본적인 λ‚΄μš©μ— λŒ€ν•΄ μ •λ¦¬ν•˜κ³ μž ν•œλ‹€. μžλ°”μ˜ μžλ£Œν˜•μ— λŒ€ν•œ 이야기인데 μ˜ˆμƒ 질문 2에 λŒ€ν•œ λ‚΄μš©μ€ μ•„λŠ” λ‚΄μš©μ΄λ‹ˆ μžλ°” 데이터 νƒ€μž…μ˜ κΈ°λ³Έν˜•κ³Ό μ°Έμ‘°ν˜•μ˜ 차이에 λŒ€ν•΄ μ’€ 더 μžμ„Ένžˆ μ•Œμ•„λ³΄κ³ μž ν•œλ‹€. 

 

λ³€μˆ˜(Variable)


λ³€μˆ˜λž€ 데이터(data)λ₯Ό μ €μž₯ν•˜κΈ° μœ„ν•΄ ν”„λ‘œκ·Έλž¨μ— μ˜ν•΄ 이름을 할당받은 λ©”λͺ¨λ¦¬ 곡간을 μ˜λ―Έν•œλ‹€. 

 

데이터 νƒ€μž…


μžλ°”μ—μ„œ 데이터 νƒ€μž…μ΄λž€ κ°’(data)의 μ’…λ₯˜(type)에 따라 값이 μ €μž₯될 κ³΅κ°„μ˜ 크기와 μ €μž₯ν˜•μ‹μ„ μ •μ˜ν•œ 것이닀. μžλ£Œν˜•μ—λŠ” λ¬Έμžν˜•(char), μ •μˆ˜ν˜•(byte, short, int, long), μ‹€μˆ˜ν˜•(float, double) 등이 있으며, λ³€μˆ˜λ₯Ό μ„ μ–Έν•  λ•ŒλŠ” μ €μž₯ν•˜λ €λŠ” κ°’μ˜ νŠΉμ„±μ„ κ³ λ €ν•˜μ—¬ κ°€μž₯ μ•Œλ§žλŠ” μžλ£Œν˜•μ„ λ³€μˆ˜μ˜ νƒ€μž…μœΌλ‘œ μ„ νƒν•˜λ©΄ λœλ‹€. 

 

κΈ°λ³Έν˜•(Primitive type)κ³Ό μ°Έμ‘°ν˜•(Reference type)


μžλ£Œν˜•μ€ 크게 κΈ°λ³Έν˜•κ³Ό μ°Έμ‘°ν˜•μœΌλ‘œ λ‚˜λˆŒ 수 μž‡λ‹€. κΈ°λ³Έν˜•μ€ μ‹€μ œ κ°’(data)λ₯Ό μ €μž₯ν•˜λŠ” 반면, μ°Έμ‘°ν˜• λ³€μˆ˜λŠ” μ–΄λ–€ 값이 μ €μž₯λ˜μ–΄ μžˆλŠ” μ£Όμ†Œ(memory address)λ₯Ό κ°’μœΌλ‘œ κ°–λŠ”λ‹€.

 

κΈ°λ³Έν˜•(Primitive type)
- λ…Όλ¦¬ν˜•(boolean), λ¬Έμžν˜•(char), μ •μˆ˜ν˜•(byte, short, int, long), μ‹€μˆ˜ν˜•(float, double) 계산을 μœ„ν•œ μ‹€μ œ 값을 μ €μž₯
μ°Έμ‘°ν˜•(Reference type)
- 객체의 μ£Όμ†Œλ₯Ό μ €μž₯

 

κΈ°λ³Έν˜• νƒ€μž…(Primitive type)


κΈ°λ³Έν˜• νƒ€μž…μ€ μ•„λž˜ ν‘œμ™€ 같이 총 8개의 νƒ€μž…λ“€μ΄ μ‘΄μž¬ν•˜λ©° 크게 λ…Όλ¦¬ν˜•, λ¬Έμžν˜•, μ •μˆ˜ν˜•, μ‹€μˆ˜ν˜•μœΌλ‘œ κ΅¬λΆ„λœλ‹€. 

 

λΆ„λ₯˜ 크기(byte) νƒ€μž…
λ…Όλ¦¬ν˜•(boolean) 1 true ν˜Ήμ€ false
λ¬Έμžν˜•(char) 2 문자λ₯Ό μ €μž₯ν•˜λŠ”λ° μ‚¬μš©, λ³€μˆ˜μ— ν•˜λ‚˜μ˜ 문자만 μ €μž₯ κ°€λŠ₯
- λ‚΄λΆ€μ μœΌλ‘œ μ •μˆ˜(μœ λ‹ˆμ½”λ“œ)둜 μ €μž₯ν•˜λ―€λ‘œ μ •μˆ˜ν˜•κ³Ό 크게 λ‹€λ₯΄μ§€ μ•ŠμœΌλ©°, μ •μˆ˜ν˜• λ˜λŠ” μ‹€μˆ˜ν˜•κ³Ό μ—°μ‚° κ°€λŠ₯
μ •μˆ˜ν˜•(byte, short, int, long) byte 1 μ •μˆ˜ μ €μž₯에 μ‚¬μš©λ˜λ©° 주둜 int μ‚¬μš©
byteλŠ” 이진 데이터λ₯Ό λ‹€λ£° λ•Œ μ‚¬μš©λ˜λ©°, shortλŠ” C언어와 ν˜Έν™˜μ„ μœ„ν•΄ μΆ”κ°€λ˜μ—ˆμŒ
- intν˜•μ˜ 경우 CPUκ°€ κ°€μž₯ 효율적으둜 μ²˜λ¦¬ν•  수 μžˆλŠ” νƒ€μž…
- 효율적인 싀행보닀 λ©”λͺ¨λ¦¬λ₯Ό μ ˆμ•½ν•˜λ €λ©΄ byteλ‚˜ short 선택
short 2
int 4
long 8
μ‹€μˆ˜ν˜•(float, double) float 4 μ‹€μˆ˜ μ €μž₯에 μ‚¬μš©λ˜λ©° 주둜 double μ‚¬μš©
double 8

 

κΈ°λ³Έν˜• νƒ€μž…μ˜ νŠΉμ§•μ€ μ•„λž˜μ™€ κ°™λ‹€. 

  • λͺ¨λ‘ μ†Œλ¬Έμžλ‘œ μ‹œμž‘ν•œλ‹€. 
  • 비객체 νƒ€μž…μ΄λ―€λ‘œ null 값을 κ°€μ§ˆ 수 μ—†λ‹€. (기본값이 μ •ν•΄μ Έ 있음)
  • λ³€μˆ˜μ˜ μ„ μ–Έκ³Ό λ™μ‹œμ— λ©”λͺ¨λ¦¬λ₯Ό μƒμ„±ν•œλ‹€. 
  • λͺ¨λ“  κ°’ νƒ€μž…μ€ λ©”λͺ¨λ¦¬μ˜ μŠ€νƒ(stack)에 μ €μž₯λœλ‹€. 
  • μ €μž₯곡간에 μ‹€μ œ 자료 값을 가진닀. 

μ°Έμ‘°ν˜• νƒ€μž…(Reference type)


μ°Έμ‘°ν˜• νƒ€μž…μ€ κΈ°λ³Έν˜• νƒ€μž…μ„ μ œμ™Έν•œ λͺ¨λ“  νƒ€μž…μ„ λ§ν•œλ‹€. μ°Έμ‘°ν˜• νƒ€μž…μ€ κΈ°λ³Έν˜• νƒ€μž…κ³Ό 달리 빈 객체λ₯Ό μ˜λ―Έν•˜λŠ” Null의 κ°œλ…μ΄ μ‘΄μž¬ν•œλ‹€. μ°Έμ‘°ν˜• νƒ€μž…μ€ 값이 μ €μž₯λ˜μ–΄ μžˆλŠ” 곳의 μ£Όμ†Œκ°’μ„ μ €μž₯ν•˜λŠ” κ³΅κ°„μœΌλ‘œ, νž™(Heap) λ©”λͺ¨λ¦¬μ— μ €μž₯λœλ‹€. 

 

μ°Έμ‘°ν˜• νƒ€μž…μ˜ νŠΉμ§•μ€ λ‹€μŒκ³Ό κ°™λ‹€. 

  • κΈ°λ³Έν˜•κ³Ό 달리 μ‹€μ œ 값이 μ €μž₯λ˜μ§€ μ•Šκ³ , μžλ£Œκ°€ μ €μž₯된 κ³΅κ°„μ˜ μ£Όμ†Œλ₯Ό μ €μž₯ν•œλ‹€. 
  • 즉, μ‹€μ œ 값은 λ‹€λ₯Έ 곳에 있으며 값이 μžˆλŠ” μ£Όμ†Œλ₯Ό 가지고 μžˆμ–΄ λ‚˜μ€‘μ— κ·Έ μ£Όμ†Œλ₯Ό μ°Έμ‘°ν•΄μ„œ 값을 κ°€μ Έμ˜¨λ‹€. 
  • λ©”λͺ¨λ¦¬μ˜ νž™(heap) μ˜μ—­μ— μ‹€μ œ 값을 μ €μž₯ν•˜κ³ , κ·Έ μ°Έμ‘°κ°’(μ£Όμ†Œκ°’)을 κ°–λŠ” λ³€μˆ˜λŠ” μŠ€νƒμ— μ €μž₯ν•œλ‹€. 
  • μ°Έμ‘°ν˜• λ³€μˆ˜λŠ” null둜 μ΄ˆκΈ°ν™” ν•  수 μžˆλ‹€. 

좜처 : https://goldenrabbit.co.kr/2021/11/03/%EC%9E%90%EB%B0%94-%EC%BD%94%EB%93%9C%EC%99%80-%EB%A9%94%EC%84%9C%EB%93%9C-%EC%8A%A4%ED%83%9C%ED%8B%B1-%EB%B3%80%EC%88%98-%EB%93%B1%EC%9D%80-%EB%A9%94%EB%AA%A8%EB%A6%AC%EC%9D%98-%EC%96%B4%EB%94%94/
https://stackoverflow.com/questions/41120129/java-stack-and-heap-memory-management

 

μ˜ˆμƒ 질문 λ‹΅ν•˜κΈ° 


Q. μ˜ˆμƒ 질문 1.μžλ°” 데이터 νƒ€μž… 쀑 κΈ°λ³Έν˜•κ³Ό μ°Έμ‘°ν˜•μ˜ 차이에 λŒ€ν•΄ μ„€λͺ…ν•΄μ£Όμ„Έμš”.


κΈ°λ³Έν˜• 데이터 νƒ€μž…μ€ λ¬Έμžν˜•, λ…Όλ¦¬ν˜•, μ •μˆ˜ν˜•, μ‹€μˆ˜ν˜•μœΌλ‘œ λ‚˜λˆŒ 수 있고, 값을 μŠ€νƒ μ˜μ—­μ— μ €μž₯ν•©λ‹ˆλ‹€. 반면, μ°Έμ‘°ν˜•μ€ κΈ°λ³Έν˜•μ„ μ œμ™Έν•œ λͺ¨λ“  데이터 νƒ€μž…μ„ λ§ν•˜λ©°, 값이 μ•„λ‹Œ μžλ£Œκ°€ μ €μž₯된 κ³΅κ°„μ˜ μ£Όμ†Œλ₯Ό μŠ€νƒ μ˜μ—­μ— μ €μž₯ν•˜κ³ , μ‹€μ œ 값은 νž™ μ˜μ—­μ— μ €μž₯ν•©λ‹ˆλ‹€. λ˜ν•œ κΈ°λ³Έν˜•μ€ 기본값이 μ •ν•΄μ Έ μžˆμ–΄ null을 κ°€μ§ˆ 수 μ—†μœΌλ‚˜, μ°Έμ‘°ν˜• null으둜 μ΄ˆκΈ°ν™”λ  수 μžˆμŠ΅λ‹ˆλ‹€. 

 
μ˜ˆμƒ 질문 2. μžλ°”μ˜ μ›μ‹œνƒ€μž…λ“€μ€ 무엇이 있으며 각각 λͺ‡ λ°”μ΄νŠΈλ₯Ό μ°¨μ§€ν•˜λ‚˜μš”?


μ›μ‹œνƒ€μž…μœΌλ‘œ 1λ°”μ΄νŠΈμ˜ booleanνƒ€μž…μ΄ μžˆμŠ΅λ‹ˆλ‹€. λ‘λ²ˆμ§ΈλŠ” 2byte의 λ¬Έμžν˜• νƒ€μž…μ΄ 있고, μ„Έ 번째둜 μ •μˆ˜ν˜• νƒ€μž…μ΄ μžˆμŠ΅λ‹ˆλ‹€. μ •μˆ˜ν˜• νƒ€μž… 1byte인 byte, 2byte인 short, 4byte인 int, 8byte인 longνƒ€μž…μœΌλ‘œ λ‚˜λˆ„μ–΄μ§‘λ‹ˆλ‹€. λ§ˆμ§€λ§‰μœΌλ‘œ μ‹€μˆ˜ν˜•μ„ λ‹€λ£¨λŠ” 4byte의 floatκ³Ό 8byte의 double νƒ€μž…μ΄ μžˆμŠ΅λ‹ˆλ‹€. 

 

 

μ°Έκ³ λ¬Έν—Œ


  • μžλ°”μ˜ 정석(남ꢁ성)
 

μžλ°”μ˜ 데이터 νƒ€μž…(Primitive type, Reference type)

μžλ°”μ—μ„œ '데이터 νƒ€μž…'은 λ¬΄μ—‡μΌκΉŒ? ν•΄λ‹Ή 데이터가 λ©”λͺ¨λ¦¬μ— μ–΄λ–»κ²Œ μ €μž₯되고 ν”„λ‘œκ·Έλž¨μ—μ„œ μ–΄λ–»κ²Œ μ²˜λ¦¬λ˜μ–΄μ•Ό ν•˜λŠ”μ§€λ₯Ό λͺ…μ‹œμ μœΌλ‘œ μ•Œλ €μ£ΌλŠ” 것이닀. 예λ₯Ό λ“€μ–΄ μ •μˆ˜ν˜• 데이터 νƒ€μž…μΈ 'intν˜•'

devpad.tistory.com

 

 

β˜• JAVA λ³€μˆ˜μ˜ κΈ°λ³Έν˜• & μ°Έμ‘°ν˜• νƒ€μž… 차이 μ΄ν•΄ν•˜κΈ°

λ³€μˆ˜μ˜ κΈ°λ³Έν˜• & μ°Έμ‘°ν˜• νƒ€μž… λ³€μˆ˜(variable)λž€ 데이터(data)λ₯Ό μ €μž₯ν•˜κΈ° μœ„ν•΄ ν”„λ‘œκ·Έλž¨μ— μ˜ν•΄ 이름을 할당받은 λ©”λͺ¨λ¦¬ 곡간을 μ˜λ―Έν•œλ‹€. 그리고 μžλ°”μ—μ„œ λ§ν•˜λŠ” 데이터 νƒ€μž…(μžλ£Œν˜•)μ΄λž€, λ³€μˆ˜μ—

inpa.tistory.com

 

 

μžλ°” μ½”λ“œμ™€ λ©”μ„œλ“œ, μŠ€νƒœν‹± λ³€μˆ˜ 등은 λ©”λͺ¨λ¦¬μ˜ 어디에 μœ„μΉ˜ν• κΉŒ? - κ³¨λ“ λž˜λΉ—

μžλ°”μ—μ„œ μ‚¬μš©ν•˜λŠ” λ©”λͺ¨λ¦¬ λͺ¨λΈμ˜ ꡬ쑰λ₯Ό μ΄ν•΄ν•˜λ©΄ μžλ°” ν”„λ‘œκ·Έλž˜λ°μ— 큰 도움이 λ©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λͺ¨λ“  것을 μžμ„Ένžˆ μ•Œ ν•„μš”λŠ” μ—†μŠ΅λ‹ˆλ‹€. μš°λ¦¬κ°€ κ³΅λΆ€ν•œ 것과 μ—°κ΄€ν•΄ μ„œ ν•„μš”ν•œ κ°œλ…λ§Œ 쑰금 이해

goldenrabbit.co.kr