C#

[C#] String.IsNullOrEmpty() ์ •์  ๋ฉ”์„œ๋“œ๋ž€

hyonie 2024. 12. 15. 21:58

 C# ์ฝ”๋“œ๋ฅผ ๋ณด๋‹ค๊ฐ€ String.IsNullOrEmpty()๊ฐ€ ์‚ฌ์šฉ๋œ ๋ถ€๋ถ„์„ ๋ดค๋‹ค. ์ด ์ฝ”๋“œ๋ฅผ ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜๋ ค๋ฉด String.IsNullOrEmpty()๊ฐ€ ์™œ ์“ฐ์˜€๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ์ด ๋ฉ”์„œ๋“œ๊ฐ€ ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š”์ง€ ์•Œ์•„์•ผ ํ•  ๊ฒƒ ๊ฐ™์•„์„œ ์ •๋ฆฌํ•ด๋ณธ๋‹ค.

 

 


1. String.IsNullOrEmpty()๋ž€?

String.IsNullOrEmpty()๋Š” ๋ฌธ์ž์—ด์ด null์ด๊ฑฐ๋‚˜ ๋นˆ ๋ฌธ์ž์—ด("")์ธ์ง€ ํ™•์ธ ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” C#์˜ ์ •์  ๋ฉ”์„œ๋“œ๋‹ค.

์ด ๋ฉ”์„œ๋“œ๋Š” ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ์— true๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

  1. ๋ฌธ์ž์—ด์ด null์ผ ๋•Œ
  2. ๋ฌธ์ž์—ด์ด ๋นˆ ๋ฌธ์ž์—ด("")์ผ ๋•Œ

๊ทธ ์™ธ์˜ ๊ฒฝ์šฐ์—๋Š” false๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ด ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด null๊ณผ ๋นˆ ๋ฌธ์ž์—ด์„ ๋”ฐ๋กœ๋”ฐ๋กœ ์ฒดํฌํ•  ํ•„์š” ์—†์ด ํ•œ ๋ฒˆ์— ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ์–ด ์ฝ”๋“œ๊ฐ€ ๋” ๊น”๋”ํ•˜๊ณ  ๊ฐ€๋…์„ฑ์ด ์ข‹์•„์ง„๋‹ค.

 

 

1.1 String.IsNullOrEmpty()๋ฅผ ์“ฐ๋Š” ์ด์œ 

์ผ๋ฐ˜์ ์œผ๋กœ ๋ฌธ์ž์—ด์„ ๋‹ค๋ฃฐ ๋•Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒํ™ฉ์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค:

  • ๋ฐ์ดํ„ฐ๊ฐ€ ์•„์ง ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์•„์„œ null ์ƒํƒœ์ผ ๋•Œ
  • ์‚ฌ์šฉ์ž๊ฐ€ ์•„๋ฌด ๊ฐ’๋„ ์ž…๋ ฅํ•˜์ง€ ์•Š์•„ ๋นˆ ๋ฌธ์ž์—ด("")์ผ ๋•Œ

์ด ๋‘๊ฐ€์ง€ ๊ฒฝ์šฐ๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๊ณ  ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค.

String.IsNullOrEmpty()๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ์•„๋ž˜์ฒ˜๋Ÿผ ๋”ฐ๋กœ๋”ฐ๋กœ ์กฐ๊ฑด์„ ๊ฒ€์‚ฌํ•ด์•ผํ•œ๋‹ค:

if(myString == null || myString == "")
{
  Console.WriteLine("๋ฌธ์ž์—ด์ด null์ด๊ฑฐ๋‚˜ ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค.");
}

 

์œ„ ์ฝ”๋“œ๋Š” ๊ธฐ๋Šฅ์ ์œผ๋กœ ๋ฌธ์ œ๋Š” ์—†์ง€๋งŒ, ์กฐ๊ฑด์ด ๋Š˜์–ด๋‚ ์ˆ˜๋ก ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด์ง€๊ณ  ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ์— String.IsNullOrEmpty()๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋” ๊น”๋”ํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค:

if(String.IsNullOrEmpty(myString))
{
	Console.WriteLine("๋ฌธ์ž์—ด์ด null์ด๊ฑฐ๋‚˜ ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค.");
}

 

 

 

2. ์ฝ”๋“œ ์˜ˆ์ œ: String.IsNullOrEmpty()์˜ ์‚ฌ์šฉ๋ฒ•: ๊ธฐ๋ณธ ์ž…๋ ฅ๊ฐ’ ํ™•์ธ

foreach(String val in initCheckList)
{
 if(String.IsNullOrEmpty(val.ToString()))
   throw new UserException("๊ณ„์•ฝ์ž ์ •๋ณด๋ฅผ ํ™•์ธํ•ด ์ฃผ์„ธ์š”.");
}

if(String.IsNullOrEmpty(paymentType))
  throw new UserException("๊ฒฐ์ œ๋ฐฉ์‹์„ ์„ ํƒํ•ด ์ฃผ์„ธ์š”.");

 

์ด ์ฝ”๋“œ์˜ ๋ชฉ์ ์€ ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ์ž…๋ ฅ๊ฐ’์ด ๋น„์–ด ์žˆ๋Š”์ง€(null ๋˜๋Š” "") ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ๋ฆ„์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

  1. initCheckList ๊ฒ€์‚ฌ
    • initCheckList๋Š” ๊ณ„์•ฝ์ž ์ •๋ณด(์˜ˆ: ์ด๋ฆ„, ์ƒ๋…„์›”์ผ)๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๋ฌธ์ž์—ด ๋ฐฐ์—ด์ด๋‹ค.
    • foreach ๋ฃจํ”„๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ ํ•ญ๋ชฉ(val)์ด null ๋˜๋Š” ๋นˆ ๋ฌธ์ž์—ด("")์ธ์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค.
    • ๋งŒ์•ฝ ๊ฐ’์ด ๋น„์–ด ์žˆ์œผ๋ฉด, UserException์„ ๋˜์ ธ์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.
  2. paymentType๊ฒ€์‚ฌ
    • ๊ฒฐ์ œ ๋ฐฉ์‹(์˜ˆ: ์นด๋“œ, ๊ณ„์ขŒ์ด์ฒด) ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ณ€์ˆ˜์ธ paymentType์ด ๋น„์–ด ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค.
    • ๋น„์–ด ์žˆ๋‹ค๋ฉด ๋™์ผํ•˜๊ฒŒ UserException์„ ๋˜์ง„๋‹ค.

 

2.1 ๋ฐœ๊ฒฌํ•œ ๋ฌธ์ œ์ 

์ฝ”๋“œ๋Š” ์ž˜ ์ž‘๋™ํ• ๊ฒƒ ๊ฐ™์ง€๋งŒ, ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ํฌ์ธํŠธ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ๋‹ค.

  1. val.ToString()์˜ ๋ถˆํ•„์š”์„ฑ
    • initCheckList๊ฐ€ ์ด๋ฏธ ๋ฌธ์ž์—ด(string)ํƒ€์ž…์ด๋ผ๋ฉด val.Tostring()์€ ํ•„์š”์—†๋‹ค.
    • ๊ทธ๋ƒฅ String.IsNullOrEmpty(val)๋กœ ๊ฒ€์‚ฌํ•ด๋„ ์ถฉ๋ถ„ํ•˜๋‹ค.
  2. ๊ณต๋ฐฑ ๋ฌธ์ž์—ด ์ฒ˜๋ฆฌ
    • ์ฝ”๋“œ์—์„œ String.IsNullOrEmpty()๋ฅผ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ, ๊ณต๋ฐฑ๋งŒ ํฌํ•จ๋œ ๋ฌธ์ž์—ด(์˜ˆ: " ")์€ ๊ฑธ๋Ÿฌ์ง€์ง€ ์•Š๋Š”๋‹ค.
    • ๊ณต๋ฐฑ ๋ฌธ์ž์—ด๋„ ์œ ํšจํ•˜์ง€ ์•Š์€ ๊ฐ’์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค๋ฉด, String.IsNullOrWhiteSpace()๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์ ํ•ฉํ•˜๋‹ค.

 

 

2.2 ๊ฐœ์„ ๋œ ์ฝ”๋“œ

์œ„ ๋ฌธ์ œ๋ฅผ ๊ณ ๋ คํ•ด์„œ ์กฐ๊ธˆ ๋” ๊ฐ„๊ฒฐํ•˜๊ณ  ์•ˆ์ •์ ์ธ ์ฝ”๋“œ๋กœ ๊ฐœ์„ ํ•ด๋ดค๋‹ค:

foreach(String val in initCheckList)
{
 if(String.IsNullOrWhiteSpace(val))
   throw new UserException("๊ณ„์•ฝ์ž ์ •๋ณด๋ฅผ ํ™•์ธํ•ด ์ฃผ์„ธ์š”.");
}

if(String.IsNullOrWhiteSpace(paymentType))
  throw new UserException("๊ฒฐ์ œ๋ฐฉ์‹์„ ์„ ํƒํ•ด ์ฃผ์„ธ์š”.");

์ˆ˜์ •ํ•œ ์ด์œ :

  1. val.ToString()์ œ๊ฑฐ
    • initCheckList์˜ ํƒ€์ž…์ด string์ด๋ฏ€๋กœ, val์€ ์ด๋ฏธ ๋ฌธ์ž์—ด์ด๋‹ค. ToString() ํ˜ธ์ถœ์€ ํ•„์š” ์—†๋‹ค.
  2. String.IsNullOrWhiteSpace() ์‚ฌ์šฉ
    • ๊ณต๋ฐฑ ๋ฌธ์ž์—ด๋„ ๋น„์–ด ์žˆ๋Š” ๊ฐ’์œผ๋กœ ๊ฐ„์ฃผํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— String.IsNullOrWhiteSpace()๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. ์ด ๋ฉ”์„œ๋“œ๋Š” null, ๋นˆ ๋ฌธ์ž์—ด(""), ๊ณต๋ฐฑ ๋ฌธ์ž์—ด(" ")์„ ๋ชจ๋‘ ๊ฑธ๋Ÿฌ๋‚ธ๋‹ค.

 

 

2.3 ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์ „๋žต

throw new UserException()์œผ๋กœ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๋ฐฉ์‹์€ ์ ์ ˆํ•ด ๋ณด์ด์ง€๋งŒ, ๋งŒ์•ฝ ๊ฒ€์ฆ ํ•ญ๋ชฉ์ด ๋งŽ์•„์ง„๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ? ํ•˜๋‚˜์˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ๋งˆ๋‹ค ์ฝ”๋“œ๊ฐ€ ๋ฉˆ์ถœ ๊ฒƒ์ด๋‹ค. ์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ ๋ชจ๋“  ์ž…๋ ฅ๊ฐ’์„ ํ•œ ๋ฒˆ์— ๊ฒ€์ฆํ•˜๊ณ , ๋ฌธ์ œ๊ฐ€ ๋œ ํ•ญ๋ชฉ์„ ํ•œ๊บผ๋ฒˆ์— ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ฃผ๋Š” ๋ฐฉ๋ฒ•์„ ๊ณ ๋ฏผํ•ด๋ณผ ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

 

๋‹ค์Œ์€ ๋ชจ๋“  ์˜ค๋ฅ˜๋ฅผ ๋ชจ์•„์„œ ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค:

List<string> errors = new List<string>();

foreach(String val in initCheckList)
{
 if(String.IsNullOrWhiteSpace(val))
   errors.Add("๊ณ„์•ฝ์ž ์ •๋ณด๋ฅผ ํ™•์ธํ•ด ์ฃผ์„ธ์š”.");
}

if(String.IsNullOrWhiteSpace(paymentType))
  errors.Add("๊ฒฐ์ œ๋ฐฉ์‹์„ ์„ ํƒํ•ด ์ฃผ์„ธ์š”.");
  
if(errors.Count > 0)
{
  throw new UserException(string.Join(Environment.NewLine, errors));
}

์žฅ์ :

  • ๋ชจ๋“  ์ž…๋ ฅ๊ฐ’์„ ๊ฒ€์ฆํ•˜๊ณ , ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ํ•ญ๋ชฉ์„ ํ•œ๊บผ๋ฒˆ์— ์‚ฌ์šฉ์ž๊ฐ€์— ์•Œ๋ ค์ค„ ์ˆ˜ ์žˆ๋‹ค.
  • ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ ๋” ํŽธ๋ฆฌํ•œ ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•œ๋‹ค.

 

 

2.4 ๋ฐฐ์šด์ 

์ด ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด String.IsNullOrEmpty()์™€ String.IsNullOrWhiteSpace()์˜ ์ฐจ์ด๋ฅผ ๋ช…ํ™•ํžˆ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๋˜ํ•œ, ์ฝ”๋“œ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ณ  ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์„ ๊ฐœ์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ๋„ ๊ณ ๋ฏผํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

์•ž์œผ๋กœ ์ด๋Ÿฐ ๊ฒ€์ฆ ์ฝ”๋“œ๊ฐ€ ๋‚˜์˜จ๋‹ค๋ฉด, ๊ณต๋ฐฑ ๋ฌธ์ž์—ด ์ฒ˜๋ฆฌ์™€ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ ๋ฐฉ์‹์„ ์‹ ๊ฒฝ ์“ฐ๋ฉด์„œ ๋” ๋‚˜์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ด์•ผ๊ฒ ๋‹ค.๐Ÿ˜Š