Refactoring Loops
Coddy C# 여정의 논리 및 흐름 섹션에 포함된 레슨 — 66개 중 16번째.
반복문을 리팩토링하면 코드의 가독성과 유지보수성을 개선할 수 있습니다.
간단함을 위해 전통적인 루프를 foreach로 교체하세요:
string[] fruits = { "apple", "banana", "cherry" };
// Before refactoring
for (int i = 0; i < fruits.Length; i++)
{
Console.WriteLine(fruits[i]);
}
// After refactoring
foreach (string fruit in fruits)
{
Console.WriteLine(fruit);
}복잡한 루프 로직을 메서드로 추출:
int[] numbers = { 1, 2, 3, 4, 5, 6 };
// Before refactoring
for (int i = 0; i < numbers.Length; i++)
{
if (numbers[i] % 2 == 0)
{
Console.WriteLine($"{numbers[i]} is even");
}
}
// After refactoring with helper method
for (int i = 0; i < numbers.Length; i++)
{
if (IsEven(numbers[i]))
{
Console.WriteLine($"{numbers[i]} is even");
}
}
// Helper method
bool IsEven(int number)
{
return number % 2 == 0;
}큰 루프를 더 작고 집중된 루프들로 나누세요:
int[] data = { 1, 2, 3, 4, 5 };
// Before: One large loop doing multiple things
for (int i = 0; i < data.Length; i++)
{
// Process data
data[i] = data[i] * 2;
// Print results
Console.WriteLine(data[i]);
}
// After: Separate loops with clear purposes
// Process data
for (int i = 0; i < data.Length; i++)
{
data[i] = data[i] * 2;
}
// Print results
for (int i = 0; i < data.Length; i++)
{
Console.WriteLine(data[i]);
}챌린지
중급refactorArrayFilter라는 메서드를 생성하세요. 이 메서드는:
- 정수 배열을 매개변수로 받습니다
- 3으로 나누어 떨어지는 숫자를 세는 두 가지 버전의 코드를 구현합니다:
- Original: 전통적인 for 루프와 if 문을 사용합니다
- Refactored: 로직을 도우미 메서드로 추출한 foreach 루프를 사용합니다
- 리팩토링된 버전의 개수를 정수로 반환합니다
예를 들어, 배열 [3, 4, 6, 7, 9]가 주어지면 메서드는 3을 반환해야 합니다. 왜냐하면 3으로 나누어 떨어지는 숫자 세 개(3, 6, 9)가 있기 때문입니다.
참고: 아무것도 출력할 필요가 없습니다 - 개수를 정수로 반환하기만 하면 됩니다.
치트 시트
foreach를 사용하여 전통적인 for 루프 대신 더 간단한 배열 반복을 수행하세요:
// Traditional for loop
for (int i = 0; i < fruits.Length; i++)
{
Console.WriteLine(fruits[i]);
}
// Refactored with foreach
foreach (string fruit in fruits)
{
Console.WriteLine(fruit);
}복잡한 루프 로직을 헬퍼 메서드로 추출하세요:
// Before refactoring
if (numbers[i] % 2 == 0)
{
Console.WriteLine($"{numbers[i]} is even");
}
// After refactoring with helper method
if (IsEven(numbers[i]))
{
Console.WriteLine($"{numbers[i]} is even");
}
// Helper method
bool IsEven(int number)
{
return number % 2 == 0;
}큰 루프를 단일 책임을 가진 더 작고 집중된 루프들로 나누세요:
// Before: One loop doing multiple things
for (int i = 0; i < data.Length; i++)
{
data[i] = data[i] * 2; // Process
Console.WriteLine(data[i]); // Print
}
// After: Separate loops with clear purposes
for (int i = 0; i < data.Length; i++)
{
data[i] = data[i] * 2; // Process only
}
for (int i = 0; i < data.Length; i++)
{
Console.WriteLine(data[i]); // Print only
}직접 해보기
public class RefactorArrayFilter
{
// refactorArrayFilter 메서드를 구현하세요
public static int refactorArrayFilter(int[] numbers)
{
// 여기에 코드를 작성하세요
}
// 필요한 도우미 메서드를 구현하세요
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
논리 및 흐름의 모든 레슨
1Multi-dimensional Arrays
2D Arrays BasicsDeclaring and Initializing 2DAccessing 2D Array ElementsNested Loops with 2D ArraysJagged ArraysCommon Matrix OperationsRecap - Multi-dimensional4Flow Control Techniques
Early ReturnsGuard ClausesJump Statements (goto)Break and ContinueFlatten Nested Conditionals7Logical Operators Advanced
Short-Circuit EvaluationConditional Logical OperatorsOperator PrecedenceRecap - Advanced Operators2Advanced Decision Making
Multiple ConditionsComplex Boolean LogicIf vs. Switch ComparisonNested Switch StatementsRecap - Advanced Decisions5Exception Handling
Try-Catch BasicsException TypesMultiple Catch BlocksWorking with FilesFinally BlockUsing vs. Try-FinallyCustom ExceptionsRecap - Error Handling3Loop Enhancements
Loop PerformanceIterating ComplexEach Loop TypeRefactoring LoopsRecap - Optimized Loops6Null Handling
Null Reference BasicsNullable Value TypesNull Checking PatternsDefensive ProgrammingRecap - Null Safety