본문 바로가기

교육 노트/C# 강의

[C# 때려잡기] C# 강의 7. 반복문

프로그램을 만들다보면 같은 행동을 여러번 하거나 규칙에맞게 여러번 수행해야될 상황이 있을수 잇다.


예를 들어 1부터 10까지의 합을 구하고싶다면

using System;

namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
int number = 0;

number += 1;
number += 2;
number += 3;
number += 4;
number += 5;
number += 6;
number += 7;
number += 8;
number += 9;
number += 10;
}
}
}


만약 100까지 합을 구하고싶다면?


using System;

namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
int number = 0;

number += 1;
number += 2;
number += 3;
number += 4;
number += 5;
number += 6;
number += 7;
number += 8;
number += 9;
number += 10;
...
...
number += 99;
number +=100;
}
}
}

과 같이 될것이다.

이러한 복붙 노가다를 줄이고 반복작업을 쉽게 하기위해서나온것이 반복문이다.


1. for문



C#의 대표적인 반복문은 for문으로



다음과 같은 구조를 가진다.


선언부에서 for문에서 사용할 변수를 선언하고

조건부에서는 조건을 적어 해당 내용이 true이면 내용을 실행시킨다.

증감식은 해당 for문의 루프가 끝날때마다 한번씩 실행되는 부분이다.

중요한점은 (선언부 ; 조건부 ; 증감식) 이지 (선언부 , 조건부, 증감식) 이 아니다



using System;

namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
for (int i = 0; i < 10; i++)
{
Console.WriteLine("{0} 입니다",i+1);
}
}
}
}



for문에서 사용할 int i 를 선언하였고 i는 처음에 0이다.

조건식의 i < 10을 만족시키므로

내용이 실행되고

내용은 i+1 (1)을 출력한다

출력후 증감식 부분에서 i++ 을 수행하고 i는 1이된다

아직 i < 10을 만족시키므로

내용이 실행되고

i+1 (2) 를 출력한다

출력후 다시 증감식 ....


과 같은 과정을 거친후

i가 9일때 내용이 실행되고

증감식에서 i 가 10이 되면

i < 10을 만족시키지 못하므로

내용을 실행하지않고

for문을 종료하게 된다.

for문은 if문과 더불어 가장많이 쓰는 c#문법으로

for문과 if문만 알면 모든 프로그램을 짤수있다고 말하기도 할정도로 핵심적인 기능이다.



for문은 일정 range를 정해서 그만큼 반복하는데 특화되어있다.

그러나 이렇게 반복 범위를 정확하게 아는경우가 아닌경우

해당 조건이 만족하면 계속 반복하고 그렇지 않으면 반복이 끝나는 경우가 있을수도있다.

예를 들어 계산기 프로그램에서 계산을 1번만 할것이 아니라 원할때까지 반복하고싶은경우

사용자가 종료버튼 (+,-,/,* 대신에 'q'을 입력하는등) 을 누를때까지 반복하게 해야될것이다.


그럴때는 어떤 반복문을 써야할까

using System;

namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
bool loop = true;
string input;
for (; loop;)
{
input = Console.ReadLine();
//내용

if (input == "q")
loop = false;
}
}
}
}


위 의 코드는 참거짓을 저장하는 bool 값인 loop변수를 두고

input 이 0이면 loop을 false로 변경하여 for문을 빠져나가게 한것이다.

위처럼 범위를 모르는 경우 그냥 선언부와 증감식을 제거하고 for(;조건;)만 적으면 된다.


근데 딱봐도 선언부, 증감식이 없는 for문은 쓸데없는 2개의 세미콜론 이 존재하고 이상하게 보인다.


그래서 이런상황에서 사용하기 알맞게 나온것이 while문이다.



2. while문


while문은 for문에서 조건 검사 부분만빼온것과 동일하다.


따라서 위의 포문은 while문으로 변경할수있는데

using System;

namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
bool loop = true;
string input;
while (loop)
{
input = Console.ReadLine();
//내용

if (input == "q")
loop = false;
}
}
}
}


다음과 같다.



이러한 특성때문에 for문과 while문을 쓰는 상황은 조금씩 다른데


일반적으로 이러한 상황일때 for문과 while문을 사용하게된다

그러나 어디까지나 일반적일뿐

사실 for문 while문은 서로 똑같이 동작하게 변경 가능하여 원하면 다르게 사용해도 된다.






약간의 차이점이 있다면 for문을 while문으로 바꿀때

for문의 i는 for문 안에서 만 사용가능한 변수이고

while문의 i는 while문 밖에서도 사용가능한 변수이다.


이게 무슨뜻인가 하면


다음과 같다.



이러한 특성때문에 for문과 while문을 쓰는 상황은 조금씩 다른데


일반적으로 이러한 상황일때 for문과 while문을 사용하게된다

그러나 어디까지나 일반적일뿐

사실 for문 while문은 서로 똑같이 동작하게 변경 가능하여 원하면 다르게 사용해도 된다.






약간의 차이점이 있다면 for문을 while문으로 바꿀때

for문의 i는 for문 안에서 만 사용가능한 변수이고

while문의 i는 while문 밖에서도 사용가능한 변수이다.


이게 무슨뜻인가 하면


3. 변수 영역


변수는 한번 생성되면 그 변수를 사용할수 있는 범위가 존재한다.


크게 전역변수와 지역 변수로 나눌수있는데


전역변수는 프로그램 어디에서나 사용 할 수 있는 변수이고

지역변수는 해당 영역에서만 사용 할 수 있는 변수이다


C# 은 기본적으로는 전역변수를 지원하지 않는다.

저기서 member1 이라고 main 바깥에 선언된 녀석은 class Program {영역} 안에서 어디서나 쓸수있다.

저것이무엇인지, class 란 무엇인지는 나중에 배우게 되므로 몰라도 된다.


그외 main함수에서 정의된 각 지역변수들의 라이프는 표시해둔바와 같다.


지역변수는 선언이 된 이후로부터 해당 depth 의 영역이 끝날때까지 존재하는데

이 depth는 {        } 로 구분된다




{ //depth 1

{//depth2



}

}


더 깊은 위 코드 에서 local1은 더 깊은 depth안에서도 사용이 가능하다 (if문과 for문 안에서)

그러나 더 갚은 depth에 있는 변수는 {}영역을 넘어가면 소멸하므로  상위 depth 에서 사용이 불가능하다.




4. foreach

C#에는 그외 다른 반복문이 더 존재하는데 이는 추후에 배열및 이터레이터를 배우고 학습하도록 하겠다.



5. break;와 continue

반복문을 빠져나가는 break문을 제공한다.

using System;

namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
string input;
while (true)
{
input = Console.ReadLine();
//내용

if (input == "q")
break;
}
}
}
}

break가 이제 밑에 실행안하고 while문 종료! 라면

continue는 이번에는 밑에 실행안하지만 while문 종료는 아님! 이다

728x90