Amenable
Amenable's Blog
Amenable
  • λΆ„λ₯˜ 전체보기 (189)
    • πŸ“‚ JAVA (87)
      • μ΄νŽ™ν‹°λΈŒ μžλ°” (65)
      • μ£Όμš” κ°œλ… (22)
    • πŸ“‚ 개발 μ„œμ  (22)
      • μ‹€μš©μ£Όμ˜ ν”„λ‘œκ·Έλž˜λ¨Έ (1)
      • 객체지ν–₯의 사싀과 μ˜€ν•΄ (2)
      • 클린 μ½”λ“œ (8)
      • ν•¨κ»˜ 자라기 (1)
      • 그림으둜 λ°°μš°λŠ” HTTP&Network Basic (10)
    • πŸ“‚ λ°μ΄ν„°λ² μ΄μŠ€ (8)
      • κ°œλ… (8)
      • λ¬Έμ œν’€μ΄ (0)
    • πŸ“‚ λ„€νŠΈμ›Œν¬ (14)
      • κ°œλ… (6)
      • 성곡과 μ‹€νŒ¨λ₯Ό κ²°μ •ν•˜λŠ” 1%의 λ„€νŠΈμ›Œν¬ 원리 (8)
    • πŸ“‚ μŠ€ν”„λ§ (13)
      • κΈ°λ³Έ κ°œλ… (13)
    • πŸ“‚ WEB (5)
    • πŸ“‚ 자료ꡬ쑰 (12)
      • κ°œλ… (2)
      • μ •λ ¬ (8)
      • 트리 (2)
    • πŸ“‚ μ•Œκ³ λ¦¬μ¦˜ (10)
      • μ΅œμ†Œμ‹ μž₯트리 (2)
      • μ΅œλ‹¨ 경둜 (2)
      • λ¬Έμžμ—΄ (2)
      • ETC (4)
    • πŸ“‚ μ•Œκ³ λ¦¬μ¦˜_λ¬Έμ œν’€μ΄ (4)
      • BOJ_λ°±μ€€ (4)
    • πŸ“‚ ν”„λ‘œκ·Έλž˜λ° (3)
    • πŸ“‚ DevOps (2)
      • 배포 (2)
    • πŸ“‚ ν›„κΈ° (8)
      • μš°μ•„ν•œ ν…Œν¬μ½”μŠ€(ν”„λ¦¬μ½”μŠ€) (4)
      • 2023λ…„ (3)
      • 2024λ…„ (1)
    • πŸ“‚ 회고 (1)
      • 2023λ…„ (1)

λΈ”λ‘œκ·Έ 메뉴

  • πŸš€ GitHub

ν‹°μŠ€ν† λ¦¬

hELLO Β· Designed By μ •μƒμš°.
Amenable

Amenable's Blog

@Override μ• λ„ˆν…Œμ΄μ…˜μ„ μΌκ΄€λ˜κ²Œ μ‚¬μš©ν•˜λΌ - [6μž₯. μ—΄κ±° νƒ€μž…κ³Ό μ• λ„ˆν…Œμ΄μ…˜(μ•„μ΄ν…œ40)]
πŸ“‚ JAVA/μ΄νŽ™ν‹°λΈŒ μžλ°”

@Override μ• λ„ˆν…Œμ΄μ…˜μ„ μΌκ΄€λ˜κ²Œ μ‚¬μš©ν•˜λΌ - [6μž₯. μ—΄κ±° νƒ€μž…κ³Ό μ• λ„ˆν…Œμ΄μ…˜(μ•„μ΄ν…œ40)]

2023. 7. 9. 12:36

  @Override μ• λ„ˆν…Œμ΄μ…˜μ€ λ©”μ„œλ“œ μ„ μ–Έμ—λ§Œ 달 수 있으며, 이 μ• λ„ˆν…Œμ΄μ…˜μ΄ λ‹¬λ Έλ‹€λŠ” 것은 μƒμœ„ νƒ€μž…μ˜ λ©”μ„œλ“œλ₯Ό μž¬μ •μ˜ν–ˆμŒμ„ λœ»ν•œλ‹€.

  @Override μ• λ„ˆν…Œμ΄μ…˜μ„ μΌκ΄€λ˜κ²Œ μ‚¬μš©ν•˜λ©΄ μ—¬λŸ¬ κ°€μ§€ μ•…λͺ… 높은 버그듀을 μ˜ˆλ°©ν•΄ μ€€λ‹€.

  이번 글을 톡해 @Override μ• λ„ˆν…Œμ΄μ…˜μ„ μ‚¬μš©ν•˜μ§€ μ•Šμ•˜μ„ λ•Œμ˜ 문제점과 @Override μ• λ„ˆν…Œμ΄μ…˜μ„ μ‚¬μš©ν–ˆμ„ λ•Œμ˜ μž₯점 및 μ‚¬μš©μ— λŒ€ν•΄μ„œ μ•Œμ•„λ³΄λ„λ‘ ν•˜μž.

 

πŸ“™ 1. @Override μ• λ„ˆν…Œμ΄μ…˜μ„ μ‚¬μš©ν•˜μ§€ μ•Šμ•˜μ„ λ•Œμ˜ 문제점

public class Bigram {

    private final char first;
    private final char second;

    public Bigram(char first, char second) {
        this.first = first;
        this.second = second;
    }

    public boolean equals(Bigram b) {
        return b.first == first && b.second == second;
    }

    public int hashCode() {
        return 31 * first + second;
    }
}

Bigram ν΄λž˜μŠ€λŠ” μ˜μ–΄ μ•ŒνŒŒλ²³ 2개(first, second)둜 κ΅¬μ„±λœ λ¬Έμžμ—΄μ„ ν‘œν˜„ν•œλ‹€.

public static void main(String[] args) {
    Set<Bigram> s = new HashSet<>();

    for(int i = 0; i < 10; i++)
        for(char ch = 'a'; ch <= 'z'; ch++)
            s.add(new Bigram(ch, ch));

    System.out.println(s.size());
}

  μœ„μ˜ μ½”λ“œμ—μ„œ Set은 쀑볡을 ν—ˆμš©ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ 'a'λΆ€ν„° 'z'κΉŒμ§€μ˜ μ•ŒνŒŒλ²³ 개수인 26이 좜λ ₯될 거라고 생각할 수 μžˆλ‹€.
  ν•˜μ§€λ§Œ, 260이 좜λ ₯λœλ‹€.

  equals와 hashCode λ©”μ„œλ“œκ°€ 잘 μžˆλŠ”λ° μ™œ 그럴까?

  κ·Έ μ΄μœ λŠ” equalsλ₯Ό 'μž¬μ •μ˜(Overriding)'ν•œ 게 μ•„λ‹ˆλΌ 'λ‹€μ€‘μ •μ˜(Overloading)' ν–ˆκΈ° λ•Œλ¬Έμ΄λ‹€.

  Object의 equalsλ₯Ό μž¬μ •μ˜ν•˜λ €λ©΄ λ§€κ°œλ³€μˆ˜ νƒ€μž…μ„ Object둜 ν•΄μ•Όλ§Œ ν•œλ‹€. κ·Έλž˜μ„œ Bigramμ—μ„œλŠ” Objectμ—μ„œ μƒμ†ν•œ equalsλ₯Ό μž¬μ •μ˜ν•œ 게 μ•„λ‹ˆλΌ λ³„κ°œμ˜ equalsλ₯Ό μž¬μ •μ˜ν•œ κ²ƒμ΄λ‹€.

 

  κ·Έλž˜μ„œ μ•„λž˜μ™€ 같이 @Overrideλ₯Ό λΆ™μ—¬μ„œ μ»΄νŒŒμΌλŸ¬μ—κ²Œ μž¬μ •μ˜ ν•œλ‹€λŠ” μ˜λ„λ₯Ό λͺ…μ‹œν•΄μ•Ό ν•œλ‹€.

@Override
public boolean equals(Bigram b) {
    return b.first == first && b.second == second;
}

  λ¬Όλ‘  μ΄λ ‡κ²Œ ν•˜λ©΄ λ‹€μŒκ³Ό 같이 컴파일 였λ₯˜κ°€ λ‚œλ‹€.

java: method does not override or implement a method from a supertype

  κ·Έλž˜μ„œ μ΅œμ’…μ μœΌλ‘œ μ•„λž˜μ™€ 같이 equalsλ₯Ό μž¬μ •μ˜ν•΄μ•Ό ν•œλ‹€.

@Override
public boolean equals(Object o) {
    if(!(o instanceof Bigram))
        return false;
    Bigram b = (Bigram) o;
    return b.first == first && b.second == second;
}

  그러면 μš°λ¦¬κ°€ μ˜ˆμΈ‘ν•œ 'a'λΆ€ν„° 'z'κΉŒμ§€μ˜ μ•ŒνŒŒλ²³ 개수인 26이 좜λ ₯λœλ‹€.

 

 

πŸ“™ 2. @Override μ• λ„ˆν…Œμ΄μ…˜μ„ μ‚¬μš©ν–ˆμ„ λ•Œμ˜ μž₯점 λ° μ‚¬μš©

  μœ„μ˜ μ˜ˆμ‹œμ—μ„œλ„ 확인할 수 μžˆλ“―μ΄, μž¬μ •μ˜ν•œ λͺ¨λ“  λ©”μ„œλ“œμ— @Override μ• λ„ˆν…Œμ΄μ…˜μ„ λ‹€λŠ” 것이 μ’‹λ‹€.

  그러면 μš°λ¦¬κ°€ μ‹€μˆ˜ν–ˆμ„ λ•Œ μ»΄νŒŒμΌλŸ¬κ°€ λ°”λ‘œ μ•Œλ €μ€„ 수 있기 λ•Œλ¬Έμ΄λ‹€.

  μ˜ˆμ™Έκ°€ ν•˜λ‚˜ μžˆλ‹€λ©΄, ꡬ체 ν΄λž˜μŠ€μ—μ„œ μƒμœ„ 클래슀의 좔상 λ©”μ„œλ“œλ₯Ό μž¬μ •μ˜ν•  λ•ŒλŠ” ꡳ이 @Overrideλ₯Ό 달지 μ•Šμ•„λ„ λœλ‹€. ꡬ체 ν΄λž˜μŠ€μΈλ° μ•„직 κ΅¬ν˜„ν•˜μ§€ μ•Šμ€ μΆ”상 λ©”μ„œλ“œκ°€ λ‚¨μ•„ μžˆλ‹€λ©΄ μ»΄νŒŒμΌλŸ¬κ°€ λ°”λ‘œ μ•Œλ €μ£ΌκΈ° λ•Œλ¬Έμ΄λ‹€.

 

  @OverrideλŠ” 클래슀뿐만 μ•„λ‹ˆλΌ μΈν„°νŽ˜μ΄μŠ€μ˜ λ©”μ„œλ“œλ₯Ό μž¬μ •μ˜ν•  λ•Œλ„ μ‚¬μš©ν•  수 μžˆλ‹€.

  λ””ν΄νŠΈ λ©”μ„œλ“œλ₯Ό μ§€μ›ν•˜κΈ° μ‹œμž‘ν•˜λ©΄μ„œ, μΈν„°νŽ˜μ΄μŠ€ λ©”μ„œλ“œλ₯Ό κ΅¬ν˜„ν•œ λ©”μ„œλ“œμ—λ„ @Overrideλ₯Ό λ‹€λŠ” μŠ΅κ΄€μ„ 듀이면 μ‹œκ·Έλ‹ˆμ²˜κ°€ μ˜¬λ°”λ₯Έμ§€ 재차 확인할 수 μžˆλ‹€.

  κ΅¬ν˜„ν•˜λ €λŠ” μΈν„°νŽ˜μ΄μŠ€μ— λ””ν΄νŠΈ λ©”μ„œλ“œκ°€ μ—†μŒμ„ μ•ˆλ‹€λ©΄ 이λ₯Ό κ΅¬ν˜„ν•œ λ©”μ„œλ“œμ—μ„œλŠ” @Overrideλ₯Ό μƒλž΅ν•΄ μ½”λ“œλ₯Ό 쑰금 더 κΉ”λ”νžˆ μœ μ§€ν•΄λ„ μ’‹λ‹€.

 

  ν•˜μ§€λ§Œ, 좔상 ν΄λž˜μŠ€λ‚˜ μΈν„°νŽ˜μ΄μŠ€μ—μ„œλŠ” μƒμœ„ ν΄λž˜μŠ€λ‚˜ μƒμœ„ μΈν„°νŽ˜μ΄μŠ€μ˜ λ©”μ„œλ“œλ₯Ό μž¬μ •μ˜ν•˜λŠ” λͺ¨λ“  λ©”μ„œλ“œμ— @Overrideλ₯Ό λ‹€λŠ” 것이 μ’‹λ‹€. μƒμœ„ ν΄λž˜μŠ€κ°€ ꡬ체 ν΄λž˜μŠ€λ“  좔상 ν΄λž˜μŠ€λ“  λ§ˆμ°¬κ°€μ§€λ‹€.

  μ˜ˆμ»¨λŒ€ Set μΈν„°νŽ˜μ΄μŠ€λŠ” Collection μΈν„°νŽ˜μ΄μŠ€λ₯Ό ν™•μž₯ν–ˆμ§€λ§Œ μƒˆλ‘œ μΆ”κ°€ν•œ λ©”μ„œλ“œλŠ” μ—†λ‹€. κ·Έλž˜μ„œ λͺ¨λ“  λ©”μ„œλ“œ μ„ μ–Έμ— @Overrideλ₯Ό λ‹¬μ•„ μ‹€μˆ˜λ‘œ μΆ”κ°€ν•œ λ©”μ„œλ“œκ°€ μ—†μŒμ„ λ³΄μž₯ν–ˆλ‹€.

 

ν•΄λ‹Ή 글은 Joshua Block λ‹˜μ˜ 'Effective Java 3/E'λ₯Ό μ°Έκ³ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

'πŸ“‚ JAVA > μ΄νŽ™ν‹°λΈŒ μžλ°”' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

읡λͺ… ν΄λž˜μŠ€λ³΄λ‹€λŠ” λžŒλ‹€λ₯Ό μ‚¬μš©ν•˜λΌ - [7μž₯. λžŒλ‹€μ™€ 슀트림(μ•„μ΄ν…œ42)]  (0) 2023.07.10
μ •μ˜ν•˜λ €λŠ” 것이 νƒ€μž…μ΄λΌλ©΄ 마컀 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜λΌ - [6μž₯. μ—΄κ±° νƒ€μž…κ³Ό μ• λ„ˆν…Œμ΄μ…˜(μ•„μ΄ν…œ41)]  (0) 2023.07.09
λͺ…λͺ… νŒ¨ν„΄λ³΄λ‹€ μ• λ„ˆν…Œμ΄μ…˜μ„ μ‚¬μš©ν•˜λΌ - [6μž₯. μ—΄κ±° νƒ€μž…κ³Ό μ• λ„ˆν…Œμ΄μ…˜(μ•„μ΄ν…œ39)]  (0) 2023.07.06
ν™•μž₯ν•  수 μžˆλŠ” μ—΄κ±° νƒ€μž…μ΄ ν•„μš”ν•˜λ©΄ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜λΌ - [6μž₯. μ—΄κ±° νƒ€μž…κ³Ό μ• λ„ˆν…Œμ΄μ…˜(μ•„μ΄ν…œ38)]  (0) 2023.07.05
ordinal 인덱싱 λŒ€μ‹  EnumMap을 μ‚¬μš©ν•˜λΌ - [6μž₯. μ—΄κ±° νƒ€μž…κ³Ό μ• λ„ˆν…Œμ΄μ…˜(μ•„μ΄ν…œ37)]  (0) 2023.07.02
    'πŸ“‚ JAVA/μ΄νŽ™ν‹°λΈŒ μžλ°”' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • 읡λͺ… ν΄λž˜μŠ€λ³΄λ‹€λŠ” λžŒλ‹€λ₯Ό μ‚¬μš©ν•˜λΌ - [7μž₯. λžŒλ‹€μ™€ 슀트림(μ•„μ΄ν…œ42)]
    • μ •μ˜ν•˜λ €λŠ” 것이 νƒ€μž…μ΄λΌλ©΄ 마컀 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜λΌ - [6μž₯. μ—΄κ±° νƒ€μž…κ³Ό μ• λ„ˆν…Œμ΄μ…˜(μ•„μ΄ν…œ41)]
    • λͺ…λͺ… νŒ¨ν„΄λ³΄λ‹€ μ• λ„ˆν…Œμ΄μ…˜μ„ μ‚¬μš©ν•˜λΌ - [6μž₯. μ—΄κ±° νƒ€μž…κ³Ό μ• λ„ˆν…Œμ΄μ…˜(μ•„μ΄ν…œ39)]
    • ν™•μž₯ν•  수 μžˆλŠ” μ—΄κ±° νƒ€μž…μ΄ ν•„μš”ν•˜λ©΄ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜λΌ - [6μž₯. μ—΄κ±° νƒ€μž…κ³Ό μ• λ„ˆν…Œμ΄μ…˜(μ•„μ΄ν…œ38)]
    Amenable
    Amenable
    CS, μžλ°”, 자료ꡬ쑰, μ•Œκ³ λ¦¬μ¦˜, μŠ€ν”„λ§, μŠ€ν”„λ§ λΆ€νŠΈμ— ν•΄λ‹Ήν•˜λŠ” κ°œλ°œμ— κ΄€ν•œ λ‚΄μš©μ„ κ³΅μœ ν•©λ‹ˆλ‹€.

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”