우규이인우윀
Eager To Learn 🌌
우규이인우윀
전체 방문자
였늘
μ–΄μ œ

λΈ”λ‘œκ·Έ 메뉴

  • 🏑 ν™ˆ
  • πŸš€ κΉƒν—ˆλΈŒ
  • β›… νƒœκ·Έ ν΄λΌμš°λ“œ
  • λΆ„λ₯˜ 전체보기 (217)
    • πŸ‘¨πŸ»‍πŸ’» PS (170)
      • JAVA (82)
      • MYSQL (1)
      • Docker (2)
      • PYTHON (24)
      • LeetCode 150 (39)
      • Algorithm 기법 (1)
      • 바킹독 (21)
    • λΈ”λ‘œκ·Έ 이사 (0)
    • Error (1)
    • CS (15)
      • DataBase (2)
      • OS (7)
      • Network (1)
      • Spring (1)
      • 자료ꡬ쑰 (3)
      • Java (1)
    • Learned (7)
      • Spring (7)
    • κ°œλ°œμ„œμ  (15)
      • 가상 λ©΄μ ‘ μ‚¬λ‘€λ‘œ λ°°μš°λŠ” λŒ€κ·œλͺ¨ μ‹œμŠ€ν…œ 섀계 기초 (1)
      • 였브젝트 - 쑰영호 (7)
      • μΉœμ ˆν•œ SQL νŠœλ‹ (7)
    • 회고 (2)
hELLO Β· Designed By μ •μƒμš°.
우규이인우윀

Eager To Learn 🌌

CS/Java

equals() 와 hashcode()

2023. 10. 13. 20:21
equals() 와 hashcode() λ©”μ„œλ“œμ˜ μ—­ν• κ³Ό 관계에 λŒ€ν•΄μ„œ μƒκ°ν•΄λ³΄μž.

 

1️⃣ 동일성과 동등성

일반적으둜 동일성은 λ©”λͺ¨λ¦¬μƒ λ™μΌν•œ μœ„μΉ˜μ— μžˆλŠ”μ§€λ₯Ό νŒλ‹¨ν•˜κ³ , 동등성은 두 데이터λ₯Ό λ…Όλ¦¬μ μœΌλ‘œ 같은 λ°μ΄ν„°λ‘œ μ·¨κΈ‰ν•  수 μžˆλŠ”κ°€λ₯Ό νŒλ‹¨ν•œλ‹€.

 

μžλ°”μ˜ 데이터 νƒ€μž…μ€ μ›μ‹œ νƒ€μž…(Primitive Type)κ³Ό μ°Έμ‘° νƒ€μž…(Reference Type) 데이터 두 μ’…λ₯˜λ‘œ λ‚˜λˆŒ 수 μžˆλ‹€.

 

JVM의 λ©”λͺ¨λ¦¬ κ΅¬μ‘°μ—λŠ” μŠ€νƒ μ˜μ—­κ³Ό νž™ μ˜μ—­μ΄ μ‘΄μž¬ν•˜λŠ”λ°,

 

μ›μ‹œ νƒ€μž…μ˜ 경우 μŠ€νƒ μ˜μ—­μ— κ°’μœΌλ‘œμ„œ κ΄€λ¦¬λ˜μ§€λ§Œ, μ°Έμ‘° νƒ€μž…μ˜ 경우 νž™ μ˜μ—­μ—μ„œ μƒμ„±λ˜κ³  μŠ€νƒ μ˜μ—­μ—μ„œλŠ” νž™ μ˜μ—­μ˜ μœ„μΉ˜λ‘œ 데이터λ₯Ό κ΄€λ¦¬ν•œλ‹€.

 

public class Main {
    public static void main(String[] args) {
        int port = 4000;
        String host = "localhost";
    }
}

μœ„ 메인 λ©”μ„œλ“œκ°€ μ‹€ν–‰λ˜λ©΄,

μœ„μ™€ 같이 μ›μ‹œ νƒ€μž…μΈ port λŠ” 4000μ΄λΌλŠ” μ‹€μ œ 값을 ν• λ‹Ήν•˜μ§€λ§Œ

 

host의 μ‹€μ œ λ°μ΄ν„°λŠ” νž™ μ˜μ—­μ— μƒμ„±λ˜κ³  μŠ€νƒ μ˜μ—­μ—μ„œλŠ”, 참쑰값을 ν• λ‹Ήν•œλ‹€.

 

 

μ›μ‹œ νƒ€μž… λ°μ΄ν„°μ˜ 경우 비ꡐ μ‹œ '==' λ₯Ό μ‚¬μš©ν•΄λ„ μ‹€μ œ 값을 μ•Œκ³  있기 λ•Œλ¬Έμ— 같은 값인지 μ•„λ‹Œμ§€ νŒŒμ•…ν•  수 있으며 μ‹€μ œλ‘œλ„ 같은 값을 κ°–λŠ”μ§€ ν™•μΈν•˜μ—¬ κ°™λ‹€λ©΄ trueλ₯Ό λ°˜ν™˜ν•œλ‹€.

 

μ°Έμ‘° νƒ€μž…μ˜ κ²½μš°μ—λŠ” μ •ν™•ν•œ 값을 μŠ€νƒμ΄ μ•Œμ§€ λͺ»ν•˜κ³ , λ©”λͺ¨λ¦¬μƒ μœ„μΉ˜ κ°’λ§Œ μ•Œκ³  있기 λ•Œλ¬Έμ— `==` λ₯Ό μ‚¬μš©ν•  μ‹œ μ°Έμ‘°ν•˜λŠ” λ©”λͺ¨λ¦¬ μœ„μΉ˜ 값을 λΉ„κ΅ν•˜μ—¬ μ˜¬λ°”λ₯Έ 비ꡐλ₯Ό ν•˜κΈ° μ–΄λ €μ›Œμ§„λ‹€.

 

이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•œ λ©”μ„œλ“œκ°€ equals() λ©”μ„œλ“œμ΄λ‹€.

 

 

 

2️⃣ equals()의 μ—­ν• 

equals()λŠ” μ°Έμ‘° νƒ€μž…μΈ 두 객체의 동등성을 νŒλ‹¨ν•˜κΈ° μœ„ν•œ 기쀀을 κ²°μ •ν•œλ‹€.

 

λ§Œμ•½, 두 객체가 μ‘΄μž¬ν•˜λŠ” λ©”λͺ¨λ¦¬μƒ μœ„μΉ˜λŠ” λ‹€λ₯΄μ§€λ§Œ, 두 객체가 κ°–κ³  μžˆλŠ” 맴버 λ³€μˆ˜μ˜ 값이 λͺ¨λ‘ λ™μΌν•˜λ‹€λ©΄ 같은 객체둜 νŒλ‹¨ν•˜κ³  싢은 κ²½μš°κ°€ μžˆμ„ 것이닀.

 

κ·Έλ ‡λ‹€λ©΄, 클래슀 λ‚΄μ—μ„œ equals() λ©”μ„œλ“œλ₯Ό μ˜€λ²„λΌμ΄λ”©ν•˜μ—¬ μ„œλ‘œ λ‹€λ₯Έ μœ„μΉ˜μ— μ‘΄μž¬ν•˜λ”λΌλ„ 같은 객체둜 νŒλ‹¨ν•˜κ³  싢은 기쀀을 λ§Œμ‘±ν•˜λ©΄ trueλ₯Ό λ°˜ν™˜ν•˜λ„λ‘ κ΅¬ν˜„ν•΄μ£Όλ©΄ λœλ‹€.

 

 

3️⃣ hashcode()의 μ—­ν• 

equals()λŠ” μ„œλ‘œ λ‹€λ₯Έ λ©”λͺ¨λ¦¬μ— μ‘΄μž¬ν•΄λ„ 같은 객체둜 νŒλ‹¨ν•˜κ³  싢은 경우 μ˜€λ²„λΌμ΄λ”© ν•˜λŠ” 것이라 ν–ˆλ‹€.

 

그러면 hashcode()λŠ” λ¬΄μ—‡μΌκΉŒ?

 

hashcode()λŠ” Mapμ΄λ‚˜ Setκ³Ό 같은 ν•΄μ‹œ 기반 μžλ£Œκ΅¬μ‘°μ—μ„œ μ‚¬μš©ν•˜κΈ° μœ„ν•œ ν•΄μ‹œ μ½”λ“œ 값을 λ°˜ν™˜ν•˜λŠ” λ©”μ„œλ“œμ΄λ‹€.

 

일반적으둜, μ°Έμ‘° νƒ€μž…μΈ κ°μ²΄λŠ” Heap에 μ‘΄μž¬ν•˜λ―€λ‘œ Heap에 μ‘΄μž¬ν•˜λŠ” λ©”λͺ¨λ¦¬ μ£Όμ†ŒλŠ” κ°μ²΄λ§ˆλ‹€ μœ μΌν•œ 값을 κ°–κΈ° λ•Œλ¬Έμ— κ·Έ 값을 ν•΄μ‹œμ½”λ“œλ‘œ μ‚¬μš©ν•œλ‹€.

 

κ°„ν˜Ή, λ©”λͺ¨λ¦¬μƒ μœ„μΉ˜κ°€ λ‹€λ₯΄λ”라도 λ™λ“±ν•œ 객체가 ν•΄μ‹œ 기반 μžλ£Œκ΅¬μ‘°μ— μ€‘λ³΅μœΌλ‘œ μž…λ ₯λ˜μ§€ μ•ŠκΈ°λ₯Ό 원할 수 μžˆλ‹€.

 

hashcode() λ©”μ„œλ“œλ₯Ό λ”°λ‘œ μ˜€λ²„λΌμ΄λ”© ν•˜μ§€ μ•ŠμœΌλ©΄, λ™λ“±ν•œ 두 κ°μ²΄λŠ” μ„œλ‘œ λ‹€λ₯Έ λ©”λͺ¨λ¦¬μ— μœ„μΉ˜ν•˜κΈ° λ•Œλ¬Έμ— ν•΄μ‹œ 기반 μžλ£Œκ΅¬μ‘°μ— μ€‘λ³΅μœΌλ‘œ μ €μž₯될 수 밖에 μ—†λ‹€.

 

λ”°λΌμ„œ, 객체가 κ°€μ§„ 맴버 λ³€μˆ˜ 값을 κΈ°μ€€μœΌλ‘œ ν•΄μ‹œ μ½”λ“œλ₯Ό μƒμ„±ν•˜λ„λ‘ μ˜€λ²„λΌμ΄λ”© ν•˜λ©΄, λ™λ“±ν•œ 두 κ°μ²΄λŠ” μ„œλ‘œ λ‹€λ₯Έ λ©”λͺ¨λ¦¬μ— μ‘΄μž¬ν•΄λ„ 같은 ν•΄μ‹œ μ½”λ“œ 값을 λ°˜ν™˜ν•˜μ—¬ μžλ£Œκ΅¬μ‘°μ— μ€‘λ³΅μœΌλ‘œ μ €μž₯λ˜λŠ” 것을 ν”Όν•  수 있게 λœλ‹€.

 

hashcode λ₯Ό μ˜€λ²„λΌμ΄λ”© ν•  λ•Œ, λ¬Έμžμ—΄λ‘œ λ³€ν™˜ ν›„ ν•΄μ‹œ μ½”λ“œ 값을 κ³„μ‚°ν•˜λŠ” String 클래슀의 hashcode() λ₯Ό μ‚¬μš©ν•˜κ±°λ‚˜ 각 맴버 λ³€μˆ˜μ˜ ν•΄μ‹œ μ½”λ“œ 값을 μ‘°ν•©ν•˜μ—¬ 객체의 ν•΄μ‹œ μ½”λ“œ 값을 κ³„μ‚°ν•˜λŠ” Objects의 hash() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 μ’‹λ‹€.

 

 

 

 

 

 

    우규이인우윀
    우규이인우윀
    개발자 κΏˆλ‚˜λ¬΄

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