본문 바로가기
유니티5 독학 & 게임 제작

유니티5 독학하기 그 25번째 걸음-C#의 루프이용

by 인터넷떠돌이 2017. 8. 16.
반응형

안녕하세요?


어느덧 [유니티 5.x와 함께하는 C# 첫걸음]이라는 책을 읽으면서 C#을 독학하는 것도 책의 절반을 넘겼다는 생각이 듭니다. 아무튼 이번 포스팅에서는 루프라고 해서 조건이 만족하면 코드블록을 반복해서 처리하는 코딩에 대해서 한번 정리해 보고자 합니다. 


먼저 foreach루프라는 것에 대해서 사용을 하기 위해서는 두가지 조건이 만족되어야 한다고 합니다.

1) 먼저 리스트나 배열을 선언해 놓아야 하며

2) void Start() 메서드에서 리스트나 배열에 요소를 집어 넣어야 합니다.


사용법은 다음과 같습니다. 


foreach(데이터형식 변수이름 in 배열or리스트이름){


메서드(변수이름);

}


사용하는 예시는 아래와 같습니다.

------------------------------------------------------------------------------------------


public class 클래스이름 {

 

public List<string> 리스트이름 = new List<string>();


void Start(){

   리스트이름.Add("A");

   리스트이름.Add("B");

   리스트이름.Add("C");

   리스트이름.Add("D");


foreach(string 변수이름 in 리스트이름)

{

 Debug.Log(변수이름);

}

}

}

------------------------------------------------------------------------------------------


위 예시에서 보면 Debug.Log(변수이름); 이라고 하면, 여기서는 리스트이름 안에 들어가 있는 요소들을 유니티5의 콘솔에서 표시하게 됩니다. 우선 여기서 변수이름 은 foreach안에서 선언되는 것이기 때문에 따로 다른 데서 선언할 필요는 없습니다. 다만 여기서 리스트이름 이 string이라는 데이터 형식이기 때문에, 변수이름 앞에 나오는 데이터의 형식도 string이 되는 것입니다.


그리 골치아프게 생각할 것 없이, 변수이름 은 루프블록이라고 해서 { } 안에 들어가는 메서드가 리스트이름에 접근하기 쉽게 하기 위해서 쓰는 것이라고 보시면 됩니다. 그리고 이 foreach 루프는 눈치 채신 분들도 있을 지도 모르겠지만, 배열, ArrayList, 해시 테이블에도 적용이 가능하다고 합니다.


다음으로는 for루프에 들어가 보도록 해 보겠습니다. 


for (초기화 ; 조건식 ; 증감문) { }


* 초기화 : 값을 대입하는 변수선언이며, 루프를 제어하기 위해서 정수 변수가 필요한 부분입니다. 

            사용예 ) int 변수이름 = 0


* 조건식 : 이 조건식이 참이어야만 { } 안의 부분을 실행합니다.

            사용예 ) 변수이름 < 10


* 증감문 : 루프실행이 될 때마다 초기화에 선언한 변수에 값을 더하거나 뺀다.

            사용예 ) 변수이름++


그리고 이어서 for루프 보다 더 간단해 보이는 것이 하나 있는데, 이게 바로 while루프입니다.


while(조건식) { }


조건식이 참일 때마다 { } 안에 있는 코드를 실행한다고 합니다. 그 사용예는 아래의 코딩과 같습니다.

------------------------------------------------------------------------------------------


public class 클래스명{

int 변수이름=0;


while(변수이름<10)

{

  Debug.Log(변수이름);

  변수이름++;

}

}

------------------------------------------------------------------------------------------


위 예시에서 변수이름이 처음에는 0이라고 선언을 하였고, 조건식은 10 미만이면 '참'이 된다고 합니다. 그럼 참일 때 마다 유니티5의 콘솔에 변수이름을 출력하도록 하고, 그 다음에는 루프마다 1씩 더 증가시키라는 의미가 됩니다. 이 루프는 변수이름이 10이 되는 순간 끝나게 됩니다.


우선 for루프와 while루프의 차이점은 다음과 같다고 합니다. 

for루프는 배열과 리스트를 반복할 때 유용하지만,

while루프는 조건식이 '참'일 때마다 반복해야 할 경우에 정말 유용합니다.


이제 루프를 이용한 예시를 하나 보여드릴까 합니다. 배열에서 요소를 가져와야 하는 경우, 인덱스를 알고 있으면 간단하지만 그렇지 않다면 하나하나 검색해야 할 필요성이 있습니다. 이 경우에는 루프를 사용하는 것이 좋다고 합니다.


------------------------------------------------------------------------------------------


public class 클래스명 : Monobehavier{

 public List<string> 리스트이름 = new List<string>();

 

 void Start(){

   리스트이름.Add("A");

   리스트이름.Add("B");

   리스트이름.Add("C");

   리스트이름.Add("D");

   리스트이름.Add("E");

   리스트이름.Add("F");

   리스트이름.Add("G");

            .

            .

            .

            .

            .

            .

            . 


   int 변수이름1번 = -1;

   for(int 변수이름2번 = 0; 변수이름2번<리스트이름.Count; 변수이름2번++)

   { 

    if(리스트이름[변수이름2번] == "찾고자 하는 문자열")

    { 

      변수이름1번 = 변수이름2번;

      break;

      }

   }

   if(변수이름1번 == -1) { Debug.Log("찾고자 하는 문자열이 없습니다.")}

    else { Debug.Log("찾고자 하는 문자열은 인덱스 번호" + 변수이름1번)}

}

------------------------------------------------------------------------------------------


우선 위 예시에서는 for루프가 사용이 되었습니다. 여기서는 먼저 변수이름1번 은 -1로 선언을 하였는데, 이 것은 리스트이름에서 찾고자 하는 문자열을 찾지 못할 경우에 설정된 값입니다.

즉, 아래의 코드


 if(리스트이름[변수이름2번] == "찾고자 하는 문자열")

    { 

      변수이름1번 = 변수이름2번;

      break;

      }


이 코드에서는 먼저 찾고자 하는 문자열을 찾았을 경우 변수이름1번의 값을 리스트 안의 인덱스 값으로 되어 있는 변수이름2번 으로 교체하고, 그리고 나서 그 즉시 break; 구문을 써서 루프를 중단시키게 됩니다.


그런데 이렇게 찾고자 하는 문자열이 없으면, -1로 선언이 되었는데 찾고자 하는 문자열이 없는 경우에는 그 값이 계속 이어지기 때문에 for루프 구문 밖에는 아래의 if 구문에서 출력되는 문구가 갈리게 됩니다.


 if(변수이름1번 == -1) { Debug.Log("찾고자 하는 문자열이 없습니다.")}

    else { Debug.Log("찾고자 하는 문자열은 인덱스 번호" + 변수이름1번)}


변수이름1번이 계석 -1이라고 하면, if구문의 값을 참이기 때문에, "찾고자 하는 문자열이 없습니다." 를 출력하게 됩니다. 그런데 리스트의 인덱스를 발견하는 데 성공해서 -1이라는 값이 아니라면, 다른 구문을 출력하게 되는 것입니다.



일단 이렇게 간단하게 루프의 사용법에 대해서 정리를 하는 데는 성공했고, 다음 포스팅에서는 객체라는 것에 대해서 이야기를 할까 합니다. 될 수 있으면 알기 쉽도록 설명을 하도록 할 것을 약속드리며, 포스팅을 여기서 마치도록 하겠습니다.



  

반응형