쒋은 κ°œλ°œμžκ°€ 자주 μ“°λŠ” μ½”λ“œ ꡬ문 8κ°€μ§€

ν”„λ‘œκ·Έλž˜λ°μ—μ„œ β€œμ’‹μ€ μ½”λ“œβ€λŠ” λ‹¨μˆœνžˆ λ™μž‘ν•˜λŠ” κ²ƒλ§Œμ„ μ˜λ―Έν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 읽기 쉽고, μœ μ§€λ³΄μˆ˜ν•˜κΈ° μ‰¬μš°λ©°, λ‹€λ₯Έ μ‚¬λžŒκ³Ό ν˜‘μ—…ν•  λ•Œλ„ ν˜Όλž€μ΄ μ—†λŠ” μ½”λ“œκ°€ λ°”λ‘œ 쒋은 μ½”λ“œμ£ .

κ·Έλ ‡λ‹€λ©΄ 쒋은 κ°œλ°œμžλŠ” μ‹€μ œλ‘œ μ½”λ“œ μ•ˆμ—μ„œ μ–΄λ–€ λ¬Έμž₯듀을 자주 μ“ΈκΉŒμš”? λ‹¨μˆœν•œ λ¬Έλ²•μ΄μ§€λ§Œ, κ·Έ μ“°μž„μƒˆμ™€ λ§₯λ½μ—λŠ” λ§Žμ€ κ³ λ―Όκ³Ό λ…Έν•˜μš°κ°€ 담겨 μžˆμŠ΅λ‹ˆλ‹€.

μ˜€λŠ˜μ€ 쒋은 κ°œλ°œμžκ°€ 자주 μ“°λŠ” 8κ°€μ§€ μ½”λ“œ ꡬ문을 μ†Œκ°œν•΄ λ“œλ¦΄κ²Œμš”.

1. if 쑰건문 β€” λΆ„κΈ° 처리의 κΈ°λ³Έ

if (isValid)
{
    SaveData();
}

쑰건문은 μ½”λ“œμ˜ 흐름을 λΆ„κΈ°ν•  λ•Œ κ°€μž₯ 자주 μ“°μž…λ‹ˆλ‹€. 쒋은 κ°œλ°œμžλŠ” λ³΅μž‘ν•œ 쑰건을 λ‹¨μˆœν•˜κ²Œ μ •λ¦¬ν•˜κ³ , 가독성이 높은 λ°©μ‹μœΌλ‘œ 쑰건문을 κ΅¬μ„±ν•©λ‹ˆλ‹€.

πŸ’‘ β€œμ‘°κ±΄λ¬Έμ΄ λ§Žμ„μˆ˜λ‘ 둜직이 λ³΅μž‘ν•΄μ§€λ‹ˆ, μ΅œλŒ€ν•œ λͺ…ν™•ν•˜κ²Œ!”

2. foreach 반볡문 β€” μ»¬λ ‰μ…˜ μ²˜λ¦¬μ— κ°•λ ₯ν•œ 도ꡬ

foreach (var item in items)
{
    Process(item);
}

반볡문 μ€‘μ—μ„œλ„ foreachλŠ” 가독성과 μ•ˆμ •μ„±μ΄ λ†’μ•„ 자주 μ‚¬μš©λ©λ‹ˆλ‹€. κ°œλ°œμžλŠ” λ¦¬μŠ€νŠΈλ‚˜ 배열을 μˆœνšŒν•˜λ©΄μ„œ 데이터 처리, λ Œλ”λ§, 검증 λ“±μ˜ μž‘μ—…μ„ μˆ˜ν–‰ν•˜μ£ .

πŸ’‘ β€œμΈλ±μŠ€λ₯Ό ꡳ이 μ“Έ ν•„μš”κ°€ μ—†λ‹€λ©΄, foreach!”

3. ν•¨μˆ˜ 호좜 β€” μ±…μž„μ„ λΆ„λ¦¬ν•˜κ³  μž¬μ‚¬μš©ν•˜κΈ°

ValidateInput(userInput);

ν•¨μˆ˜λŠ” 쒋은 개발자의 λŒ€ν‘œμ μΈ λ„κ΅¬μž…λ‹ˆλ‹€. μ—­ν• λ³„λ‘œ μ½”λ“œλ₯Ό λΆ„λ¦¬ν•˜λ©΄, μ½”λ“œλŠ” μ§§μ•„μ§€κ³  ν…ŒμŠ€νŠΈλ„ μ‰¬μ›Œμ§€λ©° 버그도 μ€„μ–΄λ“­λ‹ˆλ‹€.

πŸ’‘ β€œν•˜λ‚˜μ˜ ν•¨μˆ˜λŠ” ν•˜λ‚˜μ˜ 일만 ν•˜κ²Œ!” (SRP)

4. μΈν„°νŽ˜μ΄μŠ€ (interface) β€” μœ μ—°ν•œ μ„€κ³„μ˜ 핡심

public interface ILogger
{
    void Log(string message);
}

쒋은 κ°œλ°œμžλŠ” κ΅¬ν˜„λ³΄λ‹€ 역할에 μ˜μ‘΄ν•˜λŠ” μ½”λ“œλ₯Ό μ„ ν˜Έν•©λ‹ˆλ‹€. interfaceλŠ” μ˜μ‘΄μ„± μ£Όμž…, ν…ŒμŠ€νŠΈ, μœ μ§€λ³΄μˆ˜μ— κ°•λ ₯ν•œ μœ μ—°μ„±μ„ μ€λ‹ˆλ‹€.

πŸ’‘ β€œκ΅¬μ²΄μ μΈ ν΄λž˜μŠ€λ³΄λ‹€ 좔상화에 μ˜μ‘΄ν•˜λΌ (DIP 원칙)”

5. return, continue, break β€” 흐름을 λ‹¨μˆœν•˜κ²Œ

if (!isReady) return;

μ‘°κΈ° λ°˜ν™˜(early return)은 쀑첩을 쀄이고, μ½”λ“œλ₯Ό κ°„κ²°ν•˜κ²Œ μœ μ§€ν•©λ‹ˆλ‹€. 루프 μ•ˆμ—μ„œλ„ 쑰건이 λ§žμ§€ μ•ŠμœΌλ©΄ λ°”λ‘œ continueλ‚˜ breakλ₯Ό μ‚¬μš©ν•˜λŠ” μŠ΅κ΄€μ΄ μ€‘μš”ν•©λ‹ˆλ‹€.

πŸ’‘ β€œλ³΅μž‘ν•œ ifλ¬Έλ³΄λ‹€λŠ” λΉ λ₯Έ νƒˆμΆœλ‘œ κΉ”λ”ν•˜κ²Œ!”

6. null 체크와 μ˜΅μ…”λ„ 처리

if (user != null)
{
    user.DoSomething();
}

ν˜Ήμ€ C#처럼 μ§€μ›ν•œλ‹€λ©΄:

user?.DoSomething();

null둜 μΈν•œ μ˜ˆμ™ΈλŠ” μ‹€λ¬΄μ—μ„œ 맀우 ν”ν•œ 였λ₯˜μž…λ‹ˆλ‹€. 쒋은 κ°œλ°œμžλŠ” 항상 null κ°€λŠ₯성을 염두에 두고 μ•ˆμ •μ μΈ μ½”λ“œλ₯Ό μž‘μ„±ν•©λ‹ˆλ‹€.

πŸ’‘ β€œnull-safeλŠ” κΈ°λ³Έ μ€‘μ˜ κΈ°λ³Έ!”

7. μ„ μ–Έν˜• ν”„λ‘œκ·Έλž˜λ° (LINQ / stream)

var names = users.Where(u => u.IsActive).Select(u => u.Name);

루프보닀 더 읽기 μ‰¬μš΄ 선언적 μ½”λ“œλŠ” μ‹€λ ₯ μžˆλŠ” 개발자의 νŠΉμ§•μž…λ‹ˆλ‹€. 특히 C#의 LINQ, JavaScript의 map/filter, Java의 stream 등은 κΉ”λ”ν•œ 둜직 κ΅¬ν˜„μ— 맀우 μœ μš©ν•˜μ£ .

πŸ’‘ β€œμ½”λ“œλŠ” μ˜μ–΄ λ¬Έμž₯처럼 μ½ν˜€μ•Ό ν•œλ‹€!”

8. try-catch μ˜ˆμ™Έ 처리

try
{
    SaveToFile();
}
catch (Exception ex)
{
    logger.Log(ex.Message);
}

μ˜ˆμ™Έ μ²˜λ¦¬λŠ” μ‹€νŒ¨ κ°€λŠ₯성이 μžˆλŠ” λͺ¨λ“  μ½”λ“œμ— ν•„μš”ν•©λ‹ˆλ‹€. 쒋은 κ°œλ°œμžλŠ” 였λ₯˜λ₯Ό λ¬΄μ‹œν•˜μ§€ μ•Šκ³ , μ˜ˆμ™Έλ₯Ό λͺ…ν™•ν•˜κ²Œ μ²˜λ¦¬ν•©λ‹ˆλ‹€.

πŸ’‘ β€œμ‹€νŒ¨ν•  수 μžˆλŠ” 곳은 항상 μ‹€νŒ¨ν•œλ‹€. λŒ€λΉ„ν•˜μž.”

마무리: λ‹¨μˆœν•¨μ΄ 강함이닀

쒋은 κ°œλ°œμžκ°€ μ“°λŠ” μ½”λ“œλŠ” κ²°μ½” ν™”λ €ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 였히렀 λ‹¨μˆœν•˜κ³ , λͺ…ν™•ν•˜λ©°, 읽기 μ‰¬μš΄ μ½”λ“œμΌ λΏμž…λ‹ˆλ‹€.

였늘 μ†Œκ°œν•œ μ½”λ“œ κ΅¬λ¬Έλ“€μ²˜λŸΌ, μž‘μ§€λ§Œ κ°•λ ₯ν•œ 도ꡬ듀을 잘 ν™œμš©ν•˜λ©΄ μ—¬λŸ¬λΆ„μ˜ μ½”λ“œλ„ 더 λ‚˜μ•„μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.


✍️ 이 글이 도움이 λ˜μ…¨λ‹€λ©΄ λŒ“κΈ€μ΄λ‚˜ μ’‹μ•„μš”λ‘œ μ‘μ›ν•΄μ£Όμ„Έμš”!
ν˜Ήμ‹œ νŒ€μ—μ„œ 자주 μ“°λŠ” μŠ€νƒ€μΌμ΄λ‚˜ νŒ¨ν„΄μ΄ μžˆλ‹€λ©΄ κ³΅μœ ν•΄ 주셔도 μ’‹μŠ΅λ‹ˆλ‹€ 😊