λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

λͺ©λ‘μ΄ μ—†μŠ΅λ‹ˆλ‹€.

[JAVA] μ˜€λ²„λ‘œλ”© κ°œλ… (feat.μ˜€λ²„λΌμ΄λ”©)

πŸ—£ Language/JAVA

    JAVA μ˜€λ²„λ‘œλ”©


    μžλ°”μ—μ„œλŠ” ν•œ 클래슀 내에 이미 μ‚¬μš©ν•˜λ €λŠ” 이름과 같은 이름을 가진 λ©”μ„œλ“œκ°€ μžˆλ”λΌλ„ λ§€κ°œλ³€μˆ˜μ˜ 개수 λ˜λŠ” νƒ€μž…μ΄ λ‹€λ₯΄λ©΄, 같은 이름을 μ‚¬μš©ν•΄μ„œ λ©”μ„œλ“œλ₯Ό μ •μ˜ν•  수 μžˆλ‹€.



    같은 μ΄λ¦„μ˜ λ©”μ„œλ“œλ₯Ό μ •μ˜ν•œλ‹€κ³  ν•΄μ„œ 무쑰건 μ˜€λ²„λ‘œλ”©μ€ μ•„λ‹ˆκ³  λ‹€μŒκ³Ό 같은 쑰건을 λ§Œμ‘±ν•΄μ•Ό μ˜€λ²„λ‘œλ”©μ΄ μ„±λ¦½ν•œλ‹€.


    1. λ©”μ„œλ“œμ˜ 이름이 κ°™μ•„μ•Ό ν•œλ‹€.

    2.* λ§€κ°œλ³€μˆ˜μ˜ 개수 λ˜λŠ” νƒ€μž…μ΄ 달라야 ν•œλ‹€.


    μ—­μ§€μ‚¬μ§€λ‘œ 컴파일러의 μž…μž₯이 λ˜μ—ˆμ„ λ•Œ 이름이 같은 λ©”μ„œλ“œμ— λ§€κ°œλ³€μˆ˜μ˜ κ°œμˆ˜λ‚˜ νƒ€μž…μ΄ κ°™λ‹€λ©΄ μ„œλ‘œ ꡬ별이 λ˜μ§€ μ•Šμ„ 것이닀. 즉, 쀑볡 μ •μ˜κ°€ λ˜μ–΄ 버린닀.


    κ·Έλ ‡κΈ° λ•Œλ¬Έμ— μœ„μ˜ 쑰건을 λ§Œμ‘±ν•΄μ•Ό μ˜€λ²„λ‘œλ”©λœ λ©”μ„œλ“œλ“€μ΄ λ§€κ°œλ³€μˆ˜μ— μ˜ν•΄μ„œ ꡬ별이 될 수 μžˆλ‹€.

    * λ°˜ν™˜ νƒ€μž…μ€ μ˜€λ²„λ‘œλ”©μ„ κ΅¬ν˜„ν•˜λŠ”λ° μ•„λ¬΄λŸ° 영ν–₯을 주지 μ•ŠλŠ”λ‹€.


    μ˜€λ²„λ‘œλ”©μ˜ μ˜ˆλ‘œλŠ” κ°€μž₯ λŒ€ν‘œμ μΈ println λ©”μ„œλ“œκ°€ μžˆλ‹€.


    PrintStream ν΄λž˜μŠ€μ—λŠ” μ–΄λ–€ μ’…λ₯˜μ˜ λ§€κ°œλ³€μˆ˜λ₯Ό 지정해도 좜λ ₯ν•  수 μžˆλ„λ‘ μ•„λž˜μ™€ 같이 10개의 μ˜€λ²„λ‘œλ”©λœ println λ©”μ„œλ“œλ₯Ό μ •μ˜ν•΄λ†“κ³  μžˆλ‹€.


    void println()

    void println(boolean x)

    void println(char x)

    void println(char[] x)

    void println(double x)

    void println(float x)

    void println(int x)

    void println(long x)

    void println(Object x)

    void println(String x)


    printlnλ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•  λ•Œ λ§€κ°œλ³€μˆ˜λ‘œ λ„˜κ²¨μ£ΌλŠ” κ°’μ˜ νƒ€μž…μ— λ”°λΌμ„œ μœ„μ˜ μ˜€λ²„λ‘œλ”©λœ λ©”μ„œλ“œλ“€ μ€‘μ˜ ν•˜λ‚˜κ°€ μ„ νƒλ˜μ–΄ μ‹€ν–‰λœλ‹€.


    또 λ‹€λ₯Έ μ’…λ₯˜λ‘œλŠ” μƒμ„±μžκ°€ μžˆλ‹€. μƒμ„±μžλŠ” ν•œ 클래슀 내에 ν•œ 개 이상 μ‘΄μž¬ν•˜λŠ”λ° μΈμŠ€ν„΄μŠ€λ₯Ό 생성할 λ•Œ 단 ν•œ 번 μˆ˜ν–‰λ˜λŠ” λ©”μ„œλ“œλ‘œ μΈμŠ€ν„΄μŠ€κ°€ 생성될 λ•Œ ν•„μš”ν•œ μž‘μ—…μ„ ν•˜λŠ” νŠΉλ³„ν•œ λ©”μ„œλ“œμ΄λ‹€. μƒμ„±μž λ©”μ„œλ“œμ˜ 이름은 ν΄λž˜μŠ€μ™€ 이름이 κ°™μ•„μ•Ό ν•˜κ³  λ°˜ν™˜ν˜•μ΄ μ—†μ–΄μ•Ό ν•˜λ©° μ ‘κ·Ό μ§€μ •μžλŠ” publicμ΄μ–΄μ•Όλ§Œ ν•œλ‹€.


    (* μƒμ„±μž μ˜€λ²„λ‘œλ”©κ³Ό λ©”μ„œλ“œ μ˜€λ²„λ‘œλ”©μ˜ 차이 - μƒμ„±μž μ˜€λ²„λ‘œλ”©μ€ κ°œμˆ˜μ™€ νƒ€μž…μ˜ μˆœμ„œκ°€ λ‹¬λΌμ•Όν•˜κ³  λ©”μ„œλ“œ μ˜€λ²„λ‘œλ”©μ€ κ°œμˆ˜λ‚˜ νƒ€μž…μ˜ μˆœμ„œκ°€ 달라야 ν•œλ‹€.)

    μ˜ˆμ œκ°€ ν•„μš”ν•  것 κ°™λ‹€..


    μ˜€λ²„λ‘œλ”©μ˜ μž₯점


    μ§€κΈˆκΉŒμ§€ μ˜€λ²„λ‘œλ”©μ˜ μ •μ˜μ™€ μ„±λ¦½ν•˜κΈ° μœ„ν•œ 쑰건을 μ•Œμ•„λ΄€λŠ”λ° μ˜€λ²„λ‘œλ”©μ„ κ΅¬ν˜„ν•¨μœΌλ‘œμ¨ μ–»λŠ” 이득을 ν•œλ²ˆ μ•Œμ•„λ³΄μž.


    λ§Œμ•½, μ˜€λ²„λ‘œλ”©μ΄ μ‘΄μž¬ν•˜μ§€ μ•Šκ³  단지 λ³€μˆ˜μ²˜λŸΌ λ©”μ„œλ“œλ„ μ΄λ¦„λ§ŒμœΌλ‘œ κ΅¬λ³„λœλ‹€λ©΄, ν•œ 클래슀 λ‚΄μ˜ λͺ¨λ“  λ©”μ„œλ“œλ“€μ€ 이름이 λ‹¬λΌμ•Όν•œλ‹€. κ·Έλ ‡λ‹€λ©΄ μœ„μ—μ˜ˆμ‹œλ‘œ λ“€μ—ˆλ˜ println λ©”μ„œλ“œλ“€μ€ 각 λ©”μ„œλ“œλ“€μ΄ λ‹€μŒκ³Ό 같이 λ‹€λ₯Έ 이름을 κ°€μ Έμ•Όν•œλ‹€.


    void println()

    void printlnBoolean(boolean x)

    void printlnChar(char x)

    void printlnDouble(double x)

    void printlnString(String x)


    근본적으둜 같은 κΈ°λŠ₯을 ν•˜λŠ” λ©”μ„œλ“œμ΄μ§€λ§Œ μ„œλ‘œ λ‹€λ₯Έ 이름을 κ°€μ Έμ•Ό ν•˜κΈ° λ•Œλ¬Έμ— λ©”μ„œλ“œ 이름을 짓기도 μ–΄λ ΅κ³  μ‚¬μš©ν•˜λŠ” μž…μž₯μ—μ„œλ„ κ΅¬λΆ„ν•΄μ„œ κΈ°μ–΅ν•΄μ•Όν•˜κΈ° λ•Œλ¬Έμ— 뢀담이 λœλ‹€. μ˜€λ²„λ‘œλ”©μ„ ν†΅ν•΄μ„œ κΈ°μ–΅ν•˜κΈ°λ„ 쉽기 λ•Œλ¬Έμ— 였λ₯˜λ₯Ό 쀄일 수 있고 λ©”μ„œλ“œ μ΄λ¦„λ§Œ 보고도 같은 κΈ°λŠ₯을 ν•˜λŠ” 것을 μ•Œ 수 μžˆμ„ 것이닀.

    (또 λ‹€λ₯Έ μž₯점은 λ©”μ„œλ“œμ˜ 이름을 μ ˆμ•½ν•  수 μžˆλ‹€.)



    μ˜€λ²„λΌμ΄λ”©


    μ˜€λ²„λ‘œλ”©κ³ΌλŠ” λΉ„μŠ·ν•˜μ§€λ§Œ λ‹€λ₯Έ κ°œλ…μœΌλ‘œ μ˜€λ²„λΌμ΄λ”©μ΄ μžˆλ‹€. μ˜€λ²„λ‘œλ”©κ³ΌλŠ” λ‹€λ₯΄κ²Œ μ˜€λ²„λΌμ΄λ”©μ€ μƒμ†μ΄λΌλŠ” κ°œλ…μ„ λ°”νƒ•μœΌλ‘œ μ •μ˜λœλ‹€. 


    μƒμ†μ΄λž€ extends ν‚€μ›Œλ“œλ₯Ό 톡해 ν•  수 있고, λΆ€λͺ¨ ν΄λž˜μŠ€λ‘œλΆ€ν„° λ³€μˆ˜, λ©”μ„œλ“œλ₯Ό λͺ¨λ‘ μžμ‹ν΄λž˜μŠ€κ°€ λ¬Όλ € λ°›λŠ”κ²ƒμ„ μ˜λ―Έν•œλ‹€. 

    (같은 νŒ¨ν‚€μ§€μ—μ„œλŠ” private μ œμ™Έ, λ‹€λ₯Έ νŒ¨ν‚€μ§€μ—μ„œλŠ” private, default μ œμ™Έ)


    μ˜€λ²„λ‘œλ”©μ€ λ©”μ„œλ“œμ— μ „λ‹¬λ˜λŠ” λ§€κ°œλ³€μˆ˜μ˜ μ’…λ₯˜λ₯Ό λ‹€μ–‘ν•˜κ²Œ ν•œλ‹€λ©΄ μ˜€λ²„λΌμ΄λ”©μ€ 상속받은 λ©”μ„œλ“œλ₯Ό λ‹€μ‹œ μ •μ˜ν•˜λŠ” 것을 λ§ν•œλ‹€. μ΄λŠ” μƒμ†κ΄€κ³„μ—μ„œ λΆ€λͺ¨ ν΄λž˜μŠ€κ°€ 가진 λ©”μ„œλ“œλ₯Ό μžμ‹ ν΄λž˜μŠ€μ—μ„œ λ‹€μ‹œ μ •μ˜ν•˜λŠ” 것을 λ§ν•œλ‹€.


    κ°€μž₯ 큰 차이점은 μ˜€λ²„λΌμ΄λ”©μ€ 이름 말고도 λ°˜ν™˜ν˜• 그리고 νŒŒλΌλ―Έν„°μ˜ νƒ€μž…μ΄λ‚˜ κ°œμˆ˜κΉŒμ§€ μ „λΆ€ κ°™μ•„μ•Όν•˜κ³  μ ‘κ·Όμ œν•œ λ˜ν•œ λΆ€λͺ¨ λ©”μ„œλ“œμ˜ μ ‘κ·Ό μ œν•œμžλ³΄λ‹€ μžμ‹ λ©”μ„œλ“œμ˜ μ ‘κ·Ό μ œν•œμžκ°€ 더 λ„“κ±°λ‚˜ κ°™μ•„μ•Όν•œλ‹€.


    μ ‘κ·Ό μ œμ–΄μžλž€ ν˜‘μ—…ν•  λ•Œ μ„œλ‘œμ˜ 간섭을 μ œν•œν•˜κ±°λ‚˜ λ³΄μ•ˆμ˜ 이유둜 νŠΉμ • λ³€μˆ˜λ‚˜ λ©”μ„œλ“œλ‘œμ˜ 접근을 μ œμ–΄ν•˜λŠ” 것을 λ§ν•œλ‹€.


    μ ‘κ·Ό μ œμ–΄μž

    같은 클래슀 

    같은 νŒ¨ν‚€μ§€ 

    μžμ† 클래슀 

    λ‹€λ₯Έ νŒ¨ν‚€μ§€ (전체)

    Private

     

     

     

     

    Default

     

     

     

     

    Protected 

     

     

     

     

    Public 

     

     

     

     




    μ˜€λ²„λ‘œλ”© vs μ˜€λ²„λΌμ΄λ”©


    μ˜€λ²„λ‘œλ”©κ³Ό μ˜€λ²„λΌμ΄λ”©μ˜ 차이 μš”μ•½ ν‘œ


     

    μ˜€λ²„λ‘œλ”© 

    μ˜€λ²„λΌμ΄λ”© 

     μ μš©λ²”μœ„

     νŠΉμ • 클래슀

    상속 관계 

     μ ‘κ·Ό μ œν•œ

    μƒκ΄€μ—†μŒ 

    λΆ€λͺ¨ λ©”μ„œλ“œμ˜ μ ‘κ·Ό μ œν•œμž 보닀

    μžμ‹ λ©”μ„œλ“œμ˜ μ ‘κ·Ό μ œν•œμžκ°€ 더 λ„“κ±°λ‚˜ κ°™μ•„μ•Ό 함

     λ°˜ν™˜ν˜• (returnν˜•)

    μƒκ΄€μ—†μŒ 

    κ°™μ•„μ•Ό 함 

    λ©”μ„œλ“œ 이름 

    무쑰건 κ°™μ•„μ•Ό 함

    무쑰건 κ°™μ•„μ•Ό 함 

    νŒŒλΌλ―Έν„°(λ§€κ°œλ³€μˆ˜)의 νƒ€μž…, 개수 

    λ°˜λ“œμ‹œ 달라야 함 

    λ°˜λ“œμ‹œ κ°™μ•„μ•Ό 함 



    μ°Έκ³ μ„œμ  : Java의 정석 3rd Edition

    참고자료 : https://steady-snail.tistory.com/3?category=780927