[JAVA] static에 λŒ€ν•΄ μžμ„Ένžˆ λ°°μ›Œλ³΄μž

κ³΅μœ μ™€ μ†Œμœ μ˜ μ˜ˆμ‹œ


 

이 μ„Έμƒμ˜ λͺ¨λ“  μ‚¬λžŒλ“€μ€ 폐λ₯Ό μ†Œμœ ν•˜κ³  νƒœμ–΄λ‚˜κΈ° λ•Œλ¬Έμ— ν˜Έν‘μ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 폐만 μžˆλ‹€κ³  호흑이 κ°€λŠ₯ν• κΉŒμš”? μ ˆλŒ€ μ•„λ‹™λ‹ˆλ‹€. μ•Œλ§žλŠ” ν™˜κ²½κ³Ό μ—¬λŸ¬ 가지 κΈ°κ΄€κ³Ό μ‚¬λžŒμ˜ λͺΈμ˜ νŠΉμ„± 덕뢄에 ν˜Έν‘μ„ ν•  수 있죠. κ·Έ 쀑 κ°€μž₯ μ€‘μš”ν•œ 것쀑 ν•˜λ‚˜λŠ” κ³΅κΈ°μž…λ‹ˆλ‹€. ν•˜μ§€λ§Œ 폐와 λ‹€λ₯΄κ²Œ μ‚¬λžŒλ“€μ€ ν˜Έν‘μ„ μœ„ν•΄ 곡기λ₯Ό μ†Œμœ ν•˜μ§€λ§Œ μ „ μ„Έκ³„μ˜ μ‚¬λžŒλ“€κ³Ό ν•¨κ»˜ κ³΅μœ ν•©λ‹ˆλ‹€. λ˜ν•œ μ‚¬λžŒμ΄ μ£½λŠ”λ‹€λ©΄ κ·Έ μ‚¬λžŒμ˜ νλŠ” μ‚¬λΌμ§€κ² μ§€λ§Œ κ³΅κΈ°λŠ” μ‚¬λžŒμ΄ 있기 μ „λΆ€ν„° μ‘΄μž¬ν–ˆκ³  μ‚¬λžŒλ“€μ΄ λͺ¨λ‘ μ£½λŠ”λ‹€ν•΄λ„ κ³΅κΈ°λŠ” 사라지지 μ•ŠμŠ΅λ‹ˆλ‹€. 이 μ˜ˆμ‹œλŠ” λ°”λ‘œ non-static 멀버와 static λ©€λ²„μ˜ 이해λ₯Ό μœ„ν•œ μ˜ˆμ‹œμž…λ‹ˆλ‹€.  

μœ„μ˜ μ˜ˆμ‹œμ—μ„œ νλŠ” μ‚¬λžŒμ΄λΌλŠ” 객체의 non-static 멀버이며 κ³΅κΈ°λŠ” static λ©€λ²„μž…λ‹ˆλ‹€. 

 

non-static 멀버와 static 멀버


static 멀버? 

static λ©€λ²„λŠ” 객체λ₯Ό μƒμ„±ν•˜μ§€ μ•Šκ³ λ„ μ‚¬μš©ν•  수 μžˆλŠ” λ©€λ²„μž…λ‹ˆλ‹€. μ™œλƒν•˜λ©΄ 클래슀 λ‘œλ”©μ‹œμ— 이미 static 멀버듀은 μƒμ„±λ˜μžˆκΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. μ΄λŸ¬ν•œ νŠΉμ„± λ•Œλ¬Έμ— κ°œλ°œμžλŠ” 객체λ₯Ό μƒμ„±ν•˜μ§€ μ•Šκ³ λ„ 클래슀λ₯Ό ν†΅ν•΄μ„œ static 멀버에 μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.

static λ©€λ²„λŠ” μˆ˜λ§Žμ€ κ°μ²΄μ—κ²Œ ν•˜λ‚˜μ˜ 값을 κ³΅μœ μ‹œν‚€κ³  싢을 λ•Œ μ‚¬μš©ν•˜κΈ°λ„ ν•©λ‹ˆλ‹€. static λ©€λ²„λŠ” 클래슀 ν•˜λ‚˜λ‹Ή ν•˜λ‚˜λ§Œ μƒμ„±λ˜κΈ° λ•Œλ¬Έμ΄μ£ . 아무리 객체λ₯Ό 많이 λ§Œλ“€κ³ , λ‹€μ–‘ν•œ 값을 가지고 μžˆλ„λ‘ λ…Έλ ₯해봐도 μ ˆλŒ€ κ°€λŠ₯ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 클래슀 ν•˜λ‚˜λ‹Ή ν•˜λ‚˜λ§Œ μƒμ„±λœλ‹€λŠ” μ˜λ―ΈλŠ” μ•žμ˜ μ˜ˆμ‹œμ—μ„œ μ‚¬λžŒλ“€μ΄ 곡기λ₯Ό κ³΅μœ ν•˜λŠ” κ²ƒμ²˜λŸΌ ν•΄λ‹Ή 클래슀의 λͺ¨λ“  객체듀이 ν•˜λ‚˜μ˜ static 멀버λ₯Ό κ³΅μœ ν•œλ‹€λŠ” μ˜λ―Έμž…λ‹ˆλ‹€. λ˜ν•œ μ‚¬λžŒμ΄ 죽어도 곡기가 사라지지 μ•ŠλŠ” κ²ƒμ²˜λŸΌ μˆ˜λ§Žμ€ 객체가 사라진닀해도 static λ©€λ²„λŠ” μ ˆλŒ€λ‘œ 사라지지 μ•ŠμŠ΅λ‹ˆλ‹€. λŒ€μ‹  ν”„λ‘œκ·Έλž¨μ΄ μ’…λ£Œλ˜λ©΄ λ‹Ήμ—°νžˆ 사라지겠죠. 클래슀 ν•˜λ‚˜λ‹Ή ν•˜λ‚˜λ§Œ μƒμ„±λœλ‹€λŠ” νŠΉμ„± λ•Œλ¬Έμ— static λ©€λ²„λŠ” 클래슀 멀버라고도 λΆ€λ₯Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

 

non-static 멀버? 

μ•žμ˜ μ˜ˆμ‹œμ—μ„œ μ‚¬λžŒμ˜ 폐가 μ‚¬λžŒλ§ˆλ‹€ μ‘΄μž¬ν•˜λŠ” 것과 같이 non-static λ©€λ²„λŠ” 객체가 생길 λ•Œ κ°μ²΄λ§ˆλ‹€ 생기며, λ‹€λ₯Έ 객체듀과 κ³΅μœ ν•  수 μ—†μŠ΅λ‹ˆλ‹€. λ˜ν•œ 객체가 사라지면 non-static 멀버도 ν•¨κ»˜ 사라지고 더 이상 μ ‘κ·Ό ν•  수 μ—†μŠ΅λ‹ˆλ‹€. non-static λ©€λ²„λŠ” static 멀버가 ν΄λž˜μŠ€μ— μ˜μ‘΄ν•˜λŠ” 것과 λ‹€λ₯΄κ²Œ 객체에 μ˜μ‘΄ν•˜λ―€λ‘œ μΈμŠ€ν„΄μŠ€ 멀버라고도 λΆ€λ¦…λ‹ˆλ‹€.

 

static의 ν™œμš©


μ „μ—­ λ³€μˆ˜μ™€ μ „μ—­ ν•¨μˆ˜λ₯Ό λ§Œλ“€ λ•Œ μ‚¬μš©ν•œλ‹€!

μžλ°”μ™€ 같은 객체지ν–₯ μ–Έμ–΄μ—μ„œλŠ” μΊ‘μŠν™” 원칙 λ•Œλ¬Έμ— μ–΄λ– ν•œ ν•¨μˆ˜λ‚˜ λ³€μˆ˜λ„ 클래슀 λ°”κΉ₯μ—μ„œ μ‘΄μž¬ν•  수 μ—†μŠ΅λ‹ˆλ‹€. 무쑰건 클래슀의 λ©€λ²„λ‘œ μ‘΄μž¬ν•΄μ•Ό ν•˜μ£ . ν•˜μ§€λ§Œ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λ‹€λ³΄λ©΄ 가끔 μ „μ—­ λ³€μˆ˜λ‚˜ μ „μ—­ ν•¨μˆ˜κ°€ ν•„μš”ν•œ κ²½μš°κ°€ λ°œμƒν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ μƒν™©μ—μ„œ 해결책이 λ°”λ‘œ staticμž…λ‹ˆλ‹€. 

 

곡유 멀버λ₯Ό λ§Œλ“€κ³ μž ν•  λ•Œ μ‚¬μš©ν•œλ‹€! 

static의 νŠΉμ„±μ„ 생각해보면 λ‹Ήμ—°ν•œ μ΄μΉ˜μž…λ‹ˆλ‹€. static λ©€λ²„λŠ” 객체듀 μ‚¬μ΄μ—μ„œ κ³΅μœ ν•  데이터가 μ‘΄μž¬ν•  λ•Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 

 

static λ©”μ†Œλ“œ


λ©”μ†Œλ“œ λ˜ν•œ static의 νŠΉμ„±μ„ ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ©”μ†Œλ“œ μ„ μ–Έ μ‹œμ— static을 뢙이면 static λ©”μ†Œλ“œλ‘œ ν™œμš©ν•  수 있죠. λ¬Όλ‘  이 static λ©”μ†Œλ“œμ—λŠ” 일반 λ©”μ†Œλ“œμ™€ λ‹€λ₯Έ 두 가지 μ œμ•½ 사항이 μ‘΄μž¬ν•©λ‹ˆλ‹€.

μ²«λ²ˆμ§ΈλŠ” static λ©”μ†Œλ“œλŠ” static λ©€λ²„μ—λ§Œ 접근을 ν•  수 μžˆλ‹€λŠ” μ μž…λ‹ˆλ‹€.  이건 정말 λ‹Ήμ—°ν•œ μ΄μΉ˜μž…λ‹ˆλ‹€. static λ©”μ†Œλ“œλŠ” static νŠΉμ„±μ— μ˜ν•΄μ„œ 객체 없이도 μ‘΄μž¬ν•©λ‹ˆλ‹€. 이 말은 μ¦‰μŠ¨, 객체와 ν•¨κ»˜ μƒμ„±λ˜λŠ” non-static 멀버듀을 μ‚¬μš©ν•  수 μ—†λ‹€λŠ” μ˜λ―Έμž…λ‹ˆλ‹€. κ²°κ΅­μ—” static λ©€λ²„λ“€λ§Œ μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ‹€λŠ” 의미이죠. ν•˜μ§€λ§Œ 이와 λ°˜λŒ€λ‘œ non-static λ©”μ†Œλ“œλŠ” static 멀버듀을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ‹Ήμ—°νžˆ static 멀버듀은 ν΄λž˜μŠ€μ™€ ν•¨κ»˜ μƒμ„±λ˜κΈ° λ•Œλ¬Έμ— 쑰금만 생각해보면 μ™œ μ‰½κ²Œ μœ μΆ”ν•΄λ‚Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

λ‘λ²ˆμ§ΈλŠ” static λ©”μ†Œλ“œλŠ” thisλ₯Ό μ‚¬μš©ν•  수 μ—†λ‹€λŠ” μ μž…λ‹ˆλ‹€. 이것 λ˜ν•œ 정말 λ‹Ήμ—°ν•œ ν˜„μƒμž…λ‹ˆλ‹€. thisλŠ” 객체 μžμ‹ μ˜ μΈμŠ€ν„΄μŠ€λ₯Ό ν˜ΈμΆœν•˜λŠ” ν‚€μ›Œλ“œμ΄κΈ° λ•Œλ¬Έμ— 객체 없이도 μ‘΄μž¬ν•  수 μžˆλŠ” static λ©”μ†Œλ“œλŠ” λ‹Ήμ—°ν•˜κ²Œλ„ thisλ₯Ό μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.