C#

[C#] Equals() ๋ฉ”์„œ๋“œ์™€ == ์—ฐ์‚ฐ์ž ์ฐจ์ด

hyonie 2024. 12. 15. 22:36

Equals() ๋ฉ”์„œ๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์ž์„ธํžˆ ์•Œ์•„๋ณด์ž. ๋ฌธ์ž์—ด ๋น„๊ต๋Š” ์‹ค๋ฌด์—์„œ ์ •๋ง ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋ผ, ์ •ํ™•ํžˆ ์ดํ•ดํ•˜๊ณ  ๋„˜์–ด๊ฐ€๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. ๊ทธ๋ž˜์„œ ๋‚ด๊ฐ€ ์ดํ•ดํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•ด๋ณธ๋‹ค.

 

 


1. Equals()๋ž€?

Equals()๋Š” C#์—์„œ ๊ฐ์ฒด๋‚˜ ๊ฐ’์„ ๋น„๊ตํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ๋‹ค. ํŠนํžˆ ๋ฌธ์ž์—ด์—์„œ Equals()๋Š” ๋‘ ๋ฌธ์ž์—ด์ด ๊ฐ™์€์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐ ์ฃผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.
 
 

1.1 ๊ธฐ๋ณธ์ ์ธ ๋™์ž‘ ์›๋ฆฌ

  • Equals() ๋ฉ”์„œ๋“œ ์„ ์–ธ:
    public virtual bool Equals(object? obj);

    • object ํƒ€์ž…์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›๋Š”๋‹ค. (์ฆ‰, ๋ชจ๋“  ๊ฐ์ฒด์™€ ๋น„๊ต ๊ฐ€๋Šฅํ•˜๋‹ค.)
    • ๋น„๊ต ๋Œ€์ƒ์ด ๊ฐ™์œผ๋ฉด true, ๋‹ค๋ฅด๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ๋ฌธ์ž์—ด์—์„œ ์˜ค๋ฒ„๋กœ๋“œ ๋œ Equals ๋ฉ”์„œ๋“œ: ๋ฌธ์ž์—ด ํด๋ž˜์Šค์—์„œ๋Š” Equals ๋ฉ”์„œ๋“œ๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์˜ค๋ฒ„๋กœ๋“œ๋˜์–ด ์žˆ๋‹ค:
    public bool Equals(string? value);
    public bool Equals(string? value, StringComparisonType comparisonType);

    • value: ๋น„๊ตํ•  ๋ฌธ์ž์—ด
    • comparisonType: ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ฑฐ๋‚˜ ๋ฌธํ™”๊ถŒ๋ณ„ ๋น„๊ต ๋ฐฉ์‹์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜

 
 

1.2 ๋ฌธ์ž์—ด ๋น„๊ต์˜ ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•

  1. ๊ธฐ๋ณธ ๋ฌธ์ž์—ด ๋น„๊ต
    • ๊ธฐ๋ณธ์ ์œผ๋กœ Equals()๋Š” ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜๋ฉฐ, ๋ฌธ์ž์—ด์˜ ๊ฐ’์ด ์ •ํ™•ํžˆ ๋™์ผํ•œ์ง€ ๋น„๊ตํ•œ๋‹ค.
      string str1 = "Hello";
      string str2 = "hello";
      
      bool result = str1.Equals(str2); // ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„: False
  2. ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๋ฌด์‹œํ•œ ๋น„๊ต
    • ๋งŒ์•ฝ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๋ฌด์‹œํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, StringComparison.OrdinalIgnoreCase๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค:
      string str1 = "Hello";
      string str2 = "hello";
      
      bool result = str1.Equals(str2, StringComparison.OrdinalIgnoreCase); // True
    • StringComparison.OrdinalIgnoreCase๋Š” ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€์•Š๊ณ , ๋ฌธ์ž์—ด์ด ๋™์ผํ•œ์ง€ ํ™•์ธํ•œ๋‹ค.

 

2. Equals vs. == ์—ฐ์‚ฐ์ž

Equals ๋ฉ”์„œ๋“œ์™€ == ์—ฐ์‚ฐ์ž์˜ ์ฐจ์ด์ 

  1. Equals:
    • Equals๋Š” ์ฐธ์กฐ ํƒ€์ž…์—์„œ๋Š” ๊ฐ’์„ ๋น„๊ตํ•˜์ง€๋งŒ, ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฐธ์กฐ ํƒ€์ž…์—์„œ๋Š” ์ฐธ์กฐ ๋น„๊ต๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฌธ์ž์—ด์€ ๊ฐ’ ํƒ€์ž…์ฒ˜๋Ÿผ ๋น„๊ต๊ฐ€ ์˜ค๋ฒ„๋กœ๋“œ๋˜์–ด ์žˆ์–ด ๊ฐ’์„ ๋น„๊ตํ•œ๋‹ค.
  2. == ์—ฐ์‚ฐ์ž:
    • == ์—ฐ์‚ฐ์ž๋Š” ํƒ€์ž…์— ๋”ฐ๋ผ ๋™์ž‘์ด ๋‹ค๋ฅด๋‹ค.
    • ๊ฐ’ ํƒ€์ž…: ๊ฐ’์„ ๋น„๊ตํ•œ๋‹ค.
    • ์ฐธ์กฐ ํƒ€์ž…: ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฐธ์กฐ๋ฅผ ๋น„๊ตํ•œ๋‹ค.
      • ํ•˜์ง€๋งŒ ๋ฌธ์ž์—ด์€ ์˜ˆ์™ธ์ ์œผ๋กœ ๊ฐ’ ๋น„๊ต๊ฐ€ ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค.

์˜ˆ์‹œ:

string str1 = "hello";
string str2 = "hello";
string str3 = new string("hello".ToCharArray());

Console.WriteLine(str1.Equals(str2)); // True (๊ฐ’ ๋น„๊ต)
Console.WriteLine(str1 == str2); // True (๋ฌธ์ž์—ด ๋น„๊ต)

Console.WriteLine(str1.Equals(str3)); // True (๊ฐ’ ๋น„๊ต)
Console.WriteLine(str1 == str3); // True (๊ฐ’ ๋น„๊ต๋กœ ์˜ค๋ฒ„๋กœ๋“œ๋จ)

 

2.1 ์–ธ์ œ Equals๋ฅผ ์‚ฌ์šฉํ• ๊นŒ?

Euals๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์œ ๋ฆฌํ•œ ๊ฒฝ์šฐ:

  1. ๋ฌธ์ž์—ด ๋น„๊ต์—์„œ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๋ฌด์‹œํ•˜๊ฑฐ๋‚˜, ๋ฌธํ™”๊ถŒ๋ณ„ ๋น„๊ต ๋ฐฉ์‹์„ ๋ช…ํ™•ํžˆ ์ง€์ •ํ•ด์•ผ ํ•  ๋•Œ,
    • ์˜ˆ: Equals(otherString, StringComparison.OrdinalOgnoreCase)
  2. ์ฐธ์กฐ ํƒ€์ž…์˜ ๋น„๊ต๊ฐ€ ํ•„์š”ํ•œ๋ฐ, ์ฐธ์กฐ ์ž์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ ๊ฐ’ ๋น„๊ต๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๊ณ  ์‹ถ์„ ๋•Œ.
    • ์˜ˆ: object.Equals(obj1, obj2)
  3. == ์—ฐ์‚ฐ์ž๊ฐ€ ์ œ๋Œ€๋กœ ์˜ค๋ฒ„๋กœ๋“œ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์‹ ํ•  ์ˆ˜ ์—†์„ ๋•Œ

 
 

2.2 ๋ฐฐ์šด์ 

  1. Equals๋Š” ๋‹จ์ˆœํ•œ ๊ฐ’ ๋น„๊ต๋ฅผ ๋„˜์–ด์„œ, ๋ฌธ์ž์—ด ๋น„๊ต๋ฅผ ๋” ์„ธ๋ฐ€ํ•˜๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ•๋ ฅํ•œ ๋ฉ”์„œ๋“œ๋‹ค.
  2. ์ฝ”๋“œ์—์„œ Equals๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„์ด๋‚˜ ๋น„๊ต ๋ฐฉ์‹์„ ๊ณ ๋ คํ•˜๋ฉด ์‹ค์ˆ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.
  3. ๋‹จ์ˆœํ•œ ๊ฐ’ ๋น„๊ต์—๋Š” == ๋„ ์ถฉ๋ถ„ํžˆ ์œ ํšจํ•˜๋ฉฐ, Equals๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋” ๋ช…ํ™•ํ•œ ์˜๋„๋ฅผ ์ฝ”๋“œ์— ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค.