π™ΉπšŠπšŸπšŠ

[Java] μ˜€λ²„λ‘œλ”©(overloading)

ν•΄λ²„λ‹ˆ 2024. 4. 18. 16:59
λ°˜μ‘ν˜•

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

ν•œ 클래슀 내에 같은 μ΄λ¦„μ˜ λ©”μ„œλ“œλ₯Ό μ—¬λŸ¬κ°œ μ •μ˜ν•˜λŠ” 것을 ‘λ©”μ„œλ“œ μ˜€λ²„λ‘œλ”©(method overloading)’ λ˜λŠ” κ°„λ‹¨νžˆ ‘μ˜€λ²„λ‘œλ”©(overloading)’이라 ν•œλ‹€.

overloading의 사전적 의미 → κ³Όμ ν•˜λ‹€. 즉, 많이 μ‹£λŠ” 것을 λœ»ν•œλ‹€. 




μ˜€λ²„λ‘œλ”©μ˜ 쑰건

1️⃣ λ©”μ„œλ“œ 이름이 κ°™μ•„μ•Ό ν•œλ‹€.
2️⃣ λ§€κ°œλ³€μˆ˜μ˜ 개수 λ˜λŠ” νƒ€μž…μ΄ 달라야 ν•œλ‹€.






μ˜€λ²„λ‘œλ”© μ„±λ¦½βŒ

int add(int a, int b) { return a + b; }
int add(int x, int y) { return x + y; }

λ§€κ°œλ³€μˆ˜μ˜ μ΄λ¦„λ§Œ λ‹€λ₯Ό 뿐 λ§€κ°œλ³€μˆ˜μ˜ νƒ€μž…μ΄ κ°™κΈ° λ•Œλ¬Έμ— μ˜€λ²„λ‘œλ”©μ΄ μ„±λ¦½ν•˜μ§€ μ•ŠλŠ”λ‹€.



 

μ˜€λ²„λ‘œλ”© μ„±λ¦½βŒ

int add(int a, int b) { return a + b; }
long add(int a, int b) { return (long)(a + b); }

add(3,3) κ³Ό 같이 ν˜ΈμΆœν•΄λ„ 뭘 ν˜ΈμΆœν•œ 건지 μ•Œ 수 μ—†κΈ° λ•Œλ¬Έμ— 성립이 μ•ˆλœλ‹€.

μ»΄νŒŒμΌμ„ ν•˜λ©΄

add(int, int) is already defined(이미 같은 λ©”μ„œλ“œκ°€ μ •μ˜λ˜μ–΄ μžˆλ‹€.)

λΌλŠ” μ—λŸ¬ 메세지가 λœ¬λ‹€.



 

μ˜€λ²„λ‘œλ”© 성립⭕

int add(int a, int b) { return a + b; }
long add(long a, long b) { return (long)(a + b); }

add(3, 3L) → 첫 번째 λ©”μ„œλ“œ 호좜

add(3L, 3) → 두 번째 λ©”μ„œλ“œ 호좜

add(3,3)은 λΆˆκ°€λŠ₯ν•˜λ‹€.

→ μ–΄λ–€ κ±Έ ν˜ΈμΆœν–ˆλŠ”μ§€ μ•Œ 수 μ—†κΈ° λ•Œλ¬Έμ— ν˜ΈμΆœν•˜μ§€ λͺ»ν•œλ‹€.






 

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

μ˜€λ²„λ‘œλ”©μ΄ μ—†λ‹€λ©΄ 이름을 짓기 μ–΄λ ΅κ³ , λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜λŠ” μͺ½μ—μ„œλŠ” 이름을 일일이 κ΅¬λΆ„ν•΄μ„œ κΈ°μ–΅ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— 뢀담이 λœλ‹€. (λ³€μˆ˜λͺ…, λ©”μ„œλ“œλͺ… μ§“λŠ”κ²Œ 세상 어렀움 T.T)

→ κΈ°μ–΅ν•˜κΈ° 쉽고, 이름도 짧게 ν•  수 μžˆλ‹€.

그리고 λ©”μ„œλ“œμ˜ 이름을 μ ˆμ•½ν•  수 μžˆλ‹€.






 

 

 

 

 

κ°€λ³€μΈμž(varargs)와 μ˜€λ²„λ‘œλ”©

κ°€λ³€μΈμž(variable argument) : ν•¨μˆ˜λ‚˜ λ©”μ†Œλ“œκ°€ 호좜될 λ•Œ μ „λ‹¬λ˜λŠ” 인자의 κ°œμˆ˜κ°€ μΌμ •ν•˜μ§€ μ•Šμ€ 경우λ₯Ό λ§ν•œλ‹€.

κ°€λ³€μΈμžλŠ” ‘νƒ€μž… … λ³€μˆ˜λͺ…’κ³Ό 같은 ν˜•μ‹μœΌλ‘œ μ„ μ–Έν•˜λ©°, PrintStream클래슀의 printf()κ°€ λŒ€ν‘œμ μΈ μ˜ˆμ΄λ‹€.

 

public PrintStream printf(String format, Object... args) { ... }

κ°€λ³€μΈμžλŠ” 제일 λ§ˆμ§€λ§‰μ— μ„ μ–Έν•΄μ•Ό ν•œλ‹€.



String concatenate (String s1) { ... }
String concatenate (String s1, String s2) { ... }
String concatenate (String s1, String s2, String s3) { ... }
String concatenate (String s1, String s2, String s3, String s4) { ... }

μœ„μ™€ 같은 λ©”μ„œλ“œλ₯Ό κ°€λ³€μΈμžλ₯Ό 톡해 κ°„λ‹¨νžˆ λ‚˜νƒ€λ‚Ό 수 μžˆλ‹€.



String concatemate(String... arr) { ... } // κ°€λ³€μΈμžλ₯Ό μ‚¬μš©ν•˜λ©΄ λ§€κ°œλ³€μˆ˜λ₯Ό μƒλž΅ν•  수 μ—†λ‹€. 

κ°€λ³€μΈμžλŠ” λ‚΄λΆ€μ μœΌλ‘œ 배열을 μ΄μš©ν•˜λŠ” 것이닀.

κ·Έλž˜μ„œ κ°€λ³€μΈμžκ°€ μ„ μ–Έλœ λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•  λ•Œλ§ˆλ‹€ 배열이 μƒˆλ‘œ μƒμ„±λœλ‹€.

κ°€λ³€μΈμžκ°€ νŽΈλ¦¬ν•˜μ§€λ§Œ, 이런 λΉ„νš¨μœ¨μ΄ μˆ¨μ–΄μžˆμœΌλ―€λ‘œ κΌ­ ν•„μš”ν•œ κ²½μš°μ—λ§Œ κ°€λ³€μΈμžλ₯Ό μ‚¬μš©ν•˜λŠ” 것이 μ’‹λ‹€.

그리고 κ°€λŠ₯ν•˜λ©΄ κ°€λ³€μΈμžλ₯Ό μ‚¬μš©ν•œ λ©”μ„œλ“œλŠ” μ˜€λ²„λ‘œλ”©ν•˜μ§€ μ•ŠλŠ” 것이 μ’‹λ‹€.

 

 

μ™œ?

 

1.μ˜€λ²„λ‘œλ”©μ˜ λͺ©μ κ³Ό 좩돌

 

2.μ„±λŠ₯ 문제

κ°€λ³€ 인자λ₯Ό μ‚¬μš©ν•œ λ©”μ„œλ“œλŠ” μ»΄νŒŒμΌλŸ¬κ°€ μžλ™μœΌλ‘œ 배열을 μƒμ„±ν•˜κ³ , ν•΄λ‹Ή 배열을 λ§€κ°œλ³€μˆ˜λ‘œ μ „λ‹¬ν•œλ‹€.

근데 이 κ³Όμ •μ—μ„œ 좔가적인 λ©”λͺ¨λ¦¬ ν• λ‹Ήκ³Ό 볡사가 λ°œμƒν•˜κΈ° λ•Œλ¬Έμ— μ„±λŠ₯이 μ €ν•˜λ  수 μžˆλ‹€.

 

3.μ½”λ“œμ˜ λ³΅μž‘μ„± 증가

κ°€λ³€ 인자λ₯Ό μ‚¬μš©ν•œ λ©”μ„œλ“œλ₯Ό μ˜€λ²„λ‘œλ”©ν•˜λ©΄, λ§€κ°œλ³€μˆ˜μ˜ κ°œμˆ˜μ™€ νƒ€μž…μ„ κ³ λ €ν•˜μ—¬ μ μ ˆν•œ λ©”μ„œλ“œλ₯Ό 선택해야 ν•˜κΈ° λ•Œλ¬Έμ— μ½”λ“œμ˜ λ³΅μž‘μ„±μ΄ 증가할 수 μžˆλ‹€.

 

4.μœ μ§€λ³΄μˆ˜μ˜ 어렀움

κ°€λ³€ 인자λ₯Ό μ‚¬μš©ν•œ λ©”μ„œλ“œλ₯Ό μ˜€λ²„λ‘œλ”©ν•˜λ©΄, λ§€κ°œλ³€μˆ˜μ˜ κ°œμˆ˜μ™€ νƒ€μž…μ΄ 변경될 λ•Œλ§ˆλ‹€ λͺ¨λ“  μ˜€λ²„λ‘œλ”©λœ λ©”μ„œλ“œλ₯Ό μˆ˜μ •ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— μœ μ§€λ³΄μˆ˜κ°€ μ–΄λ €μšΈ 수 μžˆλ‹€.

 

μ΄λŸ¬ν•œ 이유둜 κ°€λ³€ 인자λ₯Ό μ‚¬μš©ν•œ λ©”μ„œλ“œλŠ” μ˜€λ²„λ‘œλ”©ν•˜μ§€ μ•ŠλŠ” 것이 μ’‹λ‹€κ³  ν•˜λŠ”λ° 아직 100νΌμ„ΌνŠΈ 이해가 μ•ˆ 됐닀 γ…œγ…œ 



λ°˜μ‘ν˜•