Java

[Java] λ©”μ„œλ“œ μ˜€λ²„λ‘œλ”© vs μ˜€λ²„λΌμ΄λ”©

God Korea 2022. 9. 28. 00:31
728x90

πŸ€” λΉ„μŠ·ν•œ 이름, μ „ν˜€ λ‹€λ₯Έ μ‚¬μš©λ²•

 μ˜€λ²„λ‘œλ”©κ³Ό μ˜€λ²„λΌμ΄λ”©μ€ λͺ…μΉ­λ§Œ 보면 μƒλ‹Ήνžˆ λΉ„μŠ·ν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•  것 κ°™λ‹€. ν•˜μ§€λ§Œ λ‘˜μ€ μ „ν˜€ μ „ν˜€ μ „ν˜€ μ „ν˜€ λ‹€λ₯Έ μž‘μ—…μ„ μˆ˜ν–‰ν•œλ‹€. μ§€κΈˆλΆ€ν„° κ·Έ 차이λ₯Ό μ•Œμ•„λ³΄λ„λ‘ ν•˜μž.

πŸ“μ˜€λ²„λ‘œλ”© (overloading)

 λ©”μ„œλ“œλ₯Ό μ˜€λ²„λ‘œλ”©ν•œλ‹€λŠ” 것은 μ–Έμ–΄ κ·ΈλŒ€λ‘œ 보면 였히렀 μ–΄λ €μšΈ 수 μžˆλ‹€. κ°„λ‹¨νžˆ κ°œλ…λ§Œ 보자면, λ‹€λ₯Έ νŒŒλΌλ―Έν„°κ°€ ν•„μš”ν•œ 같은 μ΄λ¦„μ˜ λ©”μ„œλ“œλ₯Ό λ§Œλ“œλŠ” 것이라고 보면 λœλ‹€.

public class Overloading {
    String id;
    String name;
    int count;
    
    public Overloading(String id, String name) {
        this.id = id;
        this.name = name;
        this.count = 0;
    }
    
    public Overloading(String id, String name, int count) {
        this.id = id;
        this.name = name;
        this.count = count;
    }
    
    public void exam(String field) {
        System.out.println(field);
    }
    
    public void exam(Integer number) {
        System.out.println(number);
    }
}

 μ½”λ“œλ₯Ό 보면 이해가 쉽닀. Overloading λ©”μ„œλ“œλŠ” μƒμ„±μž λ©”μ„œλ“œμΈλ°, νŒŒλΌλ―Έν„°μ˜ μˆ«μžμ™€ νƒ€μž…λ“€μ΄ λ‹€λ₯΄κ²Œ μ„€μ •λ˜μ–΄ μžˆλ‹€. λ§Œμ•½ νŒŒλΌλ―Έν„°κ°€ μœ„λ‚˜ μ•„λž˜ 쀑 μ–΄λŠ ν•˜λ‚˜μ™€ κ°™μœΌλ©΄ μ—λŸ¬κ°€ λ°œμƒν•œλ‹€. λ˜ν•œ, examλ©”μ„œλ“œλ₯Ό 보면 같은 수의 νŒŒλΌλ―Έν„°λ₯Ό κ°–κ³  μžˆμ§€λ§Œ, νƒ€μž…μ΄ λ‹€λ₯Έ 것을 λ³Ό 수 μžˆλ‹€. 이 λ˜ν•œ νƒ€μž…μ΄ κ°™μœΌλ©΄ μ—λŸ¬κ°€ λ°œμƒν•œλ‹€.

 λ‹€λ§Œ, μ˜€λ²„λ‘œλ”© μ‹œ κ²€μ‚¬ν•˜λŠ” 것은 νŒŒλΌλ―Έν„°μ˜ κ°œμˆ˜μ™€ νƒ€μž…μ΄λ‹€. 즉, κ°œμˆ˜κ°€ κ°™μœΌλ©΄ νƒ€μž…μ΄ λ‹€λ₯Έ νŒŒλΌλ―Έν„°κ°€ μ‘΄μž¬ν•˜λ©΄ 되고, νƒ€μž…μ΄ λ‹€λ₯΄λ©΄ 이름은 같아도 λœλ‹€λŠ” 것이닀. κ·Έλž˜μ„œ exam λ©”μ„œλ“œμ˜ fieldλ‚˜ numberλŠ” 크게 영ν–₯을 λ―ΈμΉ˜μ§€ μ•ŠλŠ”λ‹€. (number -> field둜 λ°”λ€Œμ–΄λ„ 상관이 μ—†μŒ)

 κ·Έλ ‡λ‹€λ©΄ μžλ°”λŠ” μ™œ μ΄λŸ¬ν•œ 방식을 μ§€μ›ν• κΉŒ? λ°”λ‘œ λ‹€ν˜•μ„±μ„ ν‘œν˜„ν•˜λŠ” 방법 쀑 ν•œ 가지이기 λ•Œλ¬Έμ΄λ‹€.

public class Overloading {
    static int add(int i, int j) {
        return i + j;
    }
    
    static int add(int i, int j, int k) {
        return i + j + k;
    }

    public static void main(String[] args) {
        int i = add(1 ,2);
        int j = add(1, 2, 3);
        System.out.println(i + j);
    }
}

 μ΄λ ‡κ²Œ λ™μΌν•œ μ΄λ¦„μœΌλ‘œ 각각 λ‹€λ₯Έ 수λ₯Ό κ³„μ‚°ν•΄λ‚΄λŠ” λ©”μ„œλ“œλ₯Ό κ΅¬ν˜„ν•  수 μžˆλŠ” 것이닀. 보톡은 μƒμ„±μž λ©”μ„œλ“œμ—μ„œ μ–΄λ–€ 정보λ₯Ό λ„£κ³  μ–΄λ–€ 정보λ₯Ό 놔두고 생성할지 μ •ν•  λ•Œ 많이 μ‚¬μš©λ˜λŠ” νŽΈμ΄κΈ°λŠ” ν•˜λ‹€.

πŸ“ μ˜€λ²„λΌμ΄λ”© (Overriding)

  μ˜€λ²„λΌμ΄λ”©μ€ μ „ν˜€ λ‹€λ₯Έ κ°œλ…μœΌλ‘œ κ°„λ‹¨ν•˜κ²Œ 보면, λ‹€λ₯Έ ν΄λž˜μŠ€μ—μ„œ 같은 μ΄λ¦„μ˜ λ©”μ„œλ“œλ₯Ό μž¬μ •μ˜ν•˜λŠ” 것이닀.

@FunctionalInterface
public interface Comparator<T> {
    int compare(T o1, T o2);
    
    default Comparator<T> reversed() {
        return Collections.reverseOrder(this);
    }
}

 Java의 Comparator μΈν„°νŽ˜μ΄μŠ€μ˜ 일뢀 μ½”λ“œλ₯Ό κ°€μ Έμ™”λ‹€. 보면 compare λ©”μ„œλ“œλŠ” 좔상 λ©”μ„œλ“œλ‘œ 본문이 κ΅¬ν˜„λ˜μ–΄ μžˆμ§€ μ•Šκ³ , reversed λ©”μ„œλ“œλŠ” collection듀을 μ—­μˆœμœΌλ‘œ μ •λ ¬ν•˜λŠ” λ©”μ„œλ“œλ‘œ μ •μ˜λ˜μ–΄ μžˆλ‹€. 이λ₯Ό λ‹€λ₯Έ ν΄λž˜μŠ€μ—μ„œ μž¬μ •μ˜ν•΄μ„œ μ‚¬μš©ν•˜κ³ μž ν•  λ•Œ μ•„λž˜μ™€ 같이 μ‚¬μš©ν•œλ‹€.

import java.util.Collections;
import java.util.Comparator;

public class Overriding implements Comparator {
    @Override
    public int compare(Object o1, Object o2) {
        int result = 1;
        if (o1.equals(o2)) {
            result = 0;
        }
        return result;
    }
    
    @Override
    public Comparator reversed() {
        //λŠ¦μ€ μ‹œκ°„ μ—…λ‘œλ“œλ‘œ 인해 λ”°λ‘œ λ‘œμ§μ„ κ΅¬ν˜„ν•˜μ§€ μ•Šμ•˜λ‹€.
    }
}

 μœ„μ²˜λŸΌ 수퍼클래슀의 λ©”μ„œλ“œλ“€μ„ μ‚¬μš©μžκ°€ μž¬μ •μ˜ν•΄μ„œ κ΅¬ν˜„ν•˜λ©΄ λœλ‹€. κΌ­ μΆ”μƒλ©”μ„œλ“œμ—λ§Œ μ‚¬μš©λ˜λŠ” 것이 μ•„λ‹ˆκ³ , 기쑴의 일반 λ©”μ„œλ“œλ₯Ό μ„œλΈŒν΄λž˜μŠ€μ—μ„œ μž¬μ •μ˜ν•œλ‹€λ©΄, μ„œλΈŒν΄λž˜μŠ€ 객체λ₯Ό 톡해 μ‚¬μš©ν•  λ•ŒλŠ” μ„œλΈŒν΄λž˜μŠ€μ˜ λ©”μ„œλ“œ μ •μ˜λ₯Ό μš°μ„ μ μœΌλ‘œ μ‚¬μš©ν•˜κ²Œ λœλ‹€.

 λ‘ κ°œλ… λ‹€ κ²‰μœΌλ‘œλ§Œ 보고 μ΄ν•΄ν•˜κΈ°μ—λŠ” κ·Έλ‹€μ§€ μ–΄λ €μš΄ κ°œλ…μ€ μ•„λ‹ˆλ‹€. μžλ°”λ₯Ό κ³΅λΆ€ν•˜λŠ” μ‚¬λžŒμ΄λΌλ©΄ μ˜€λ²„λΌμ΄λ”©κ³Ό μ˜€λ²„λ‘œλ”©μ˜ μ°¨μ΄λŠ” κΌ­ μ•Œκ³  ν”„λ‘œκ·Έλž˜λ°ν•˜κΈ°λ₯Ό λ°”λž€λ‹€.

728x90