Programming/Java

[20211214 TIL] [μ‹œνμ–΄μ½”λ”©] 널(Null)포인터 μ—­μ°Έμ‘° (NULL Pointer Dereference)

seulye 2021. 12. 14. 15:28

μ •λ³΄μ²˜λ¦¬κΈ°μ‚¬μ—μ„œ μ°Έ μ™Έμš°κΈ° νž˜λ“€μ—ˆλ˜, μ‹œνμ–΄μ½”λ”©. μ‹€λ¬΄μ—μ„œ λ³΄λ‹ˆκΉŒ 정말 λ°˜κ°€μ› λ‹€. μ‹œνμ–΄μ½”λ”©μ΄ μ΄λ ‡κ²Œ μ“°μ΄λŠ” κ΅¬λ‚˜ μ‹Άμ—ˆλ‹€. λ¬Όλ‘  μ²˜μŒλΆ€ν„° μ‹œνμ–΄μ½”λ”© κ°€μ΄λ“œμ— 맞게 μ½”λ”©ν•˜λ©΄ μ’‹κ² μ§€λ§Œ, κ·Έλ ‡μ§€ λͺ»ν•œ κ²½μš°λ“€λ„ μžˆλ‹€. ν˜„νšŒμ‚¬μ—μ„œλŠ” νŒ¨ν‚€μ§€ 개발이 λͺ¨λ‘ λλ‚œ 후에 μ‹œνμ–΄μ½”λ”©μ„ ν•΄μ£ΌλŠ” νšŒμ‚¬μ—μ„œ μ‹œνμ–΄μ½”λ”© 점검을 λ°›μ•˜λ‹€. μ—…μ²΄μΈ‘μ—μ„œ λ³΄κ³ μ„œκ°€ 날라왔고 κ·Έ λ³΄κ³ μ„œμ—λŠ” μ‹œνμ–΄μ½”λ”©μ„ μ§€ν‚€μ§€ λͺ»ν•œ λ³΄μ•ˆμ•½μ λ“€μ— λŒ€ν•œ λ‚΄μš©μ΄ μ ν˜€μžˆμ—ˆλ‹€. λ‚˜λ„ κ·Έ λ³΄μ•ˆμ•½μ μ„ μˆ˜μ •ν•˜λŠ” 역할을 λ§‘μ•˜λ‹€. λ‚΄κ°€ 맑은 뢀뢄은 널 포인터 μ—­ 참쑰에 λŒ€ν•œ λ³΄μ•ˆμ•½μ μ΄μ—ˆλ‹€.

 

Q. 널(Null)포인터 μ—­μ°Έμ‘°λž€?

'일반적으둜 κ·Έ 객체가 Null이 될 수 μ—†λ‹€'라고 ν•˜λŠ” 가정을 μœ„λ°˜ν–ˆμ„ λ•Œ λ°œμƒν•œλ‹€. κ³΅κ²©μžκ°€ μ˜λ„μ μœΌλ‘œ Null 포인터 μ—­μ°Έμ‘°λ₯Ό μ‹€ν–‰ν•˜λŠ” 경우, κ·Έ κ²°κ³Ό λ°œμƒν•˜λŠ” μ˜ˆμ™Έ 사항을 μΆ”ν›„μ˜ 곡격을 κ³„νšν•˜λŠ” 데 μ‚¬μš©λ  수 μžˆλ‹€.

 

... 라고 μ •μ˜κ°€ μ¨μžˆμ§€λ§Œ μ†”μ§νžˆ 무슨 말인지 잘 λͺ¨λ₯΄κ² λ‹€.

λ‚΄ λ‚˜λ¦„ μ •μ˜λ₯Ό λ‚΄λ €λ³΄μžλ©΄, '널(Null)일 μˆ˜λ„ μžˆλŠ” 값을 널체크λ₯Ό ν•˜μ§€ μ•Šκ³  μ°Έμ‘°ν•˜λ €κ³  ν•˜λ©΄ λ°œμƒν•œλ‹€' 이정도 λ‰˜μ•™μŠ€κ°€ μ•„λ‹κΉŒ ? '이번 ν¬λ¦¬μŠ€λ§ˆμŠ€μ— μ—¬μžμΉœκ΅¬λž‘ λ­ν•˜μ„Έμš”?' 라고 묻기 전에 'μ—¬μžμΉœκ΅¬ μžˆμœΌμ„Έμš” ?' 라고 물어봐야 ν•˜λŠ” 것 처럼,, 

 

 

- μ˜ˆμ‹œ

-- 널 체크 전에 size ν•¨μˆ˜ μ‚¬μš©

 

* 잘λͺ»λœ μ½”λ“œ

if(tempVO.size() > 0){
 	(μƒλž΅)
}

 

* μ•ˆμ „ν•œ μ½”λ“œ

if(tempVO!=null && tempVO.size() > 0){
 	(μƒλž΅)
}

 

같은 λ§₯락으둜, 널체크λ₯Ό ν•˜μ§€ μ•Šκ³  length ν•¨μˆ˜λ₯Ό μ“΄λ‹€λ“ μ§€ equals ν•¨μˆ˜λ₯Ό μ“°λŠ” 것도 잘λͺ»λœ μ½”λ“œμ΄λ‹€.