Chapter 8. 반복문

조성권·2021년 8월 10일
0
post-thumbnail

오늘은 반복문에 대해 배워보도록 하겠다.
golang에서 반복문은 다른 언어와 어떤 차이가 있는지 확인하며 보면 좋을 것 같다.

1. for문 종류

1-1. 기본 for문

  • 기본 for문 작성 요령
for 초기값; 조건식; 변화식 {
     // 반복하여 처리할 내용 작성
}

golang의 for문 형태는 타 언어와 크게 다르지 않지만 분명히 다른 점은 존재한다.

  • for문에 소괄호를 넣지 않는다.
  • 시작 중괄호('{') 는 반드시 구문 끝에 넣어야 한다.

Compile Error가 발생하는 잘못된 예시를 작성해보도록 하겠다.

// for문에 소괄호를 넣는 경우
for (i:=0; i<5; i++) {
	// 반복문 내용
}

// 중괄호가 구문 끝에서 시작하지 않는 경우
for i:=0; i<5; i++
{
	// 반복문 내용
}

// 중괄호가 존재하지 않는 경우
for i:=0; i<5; i++
	// 반복문 내용

위 예시는 모두 Compile Error를 발생시키는 대표적인 잘못된 예시이다.
golang의 문법에 맞게끔 for문을 작성하지 않으면 원하는 결과를 얻지 못하니 꼭 주의하길 바란다.

1-2 for 조건문 (=while)

다른 언어를 배우고 golang을 입문한다면 while문의 존재를 알 것이라 생각한다.
golang은 while이라는 키워드로 반복문을 작성할 수 없다.
모든 반복문은 for문을 통해 처리되며 golang에서 while문과 유사하게 동작되는 for문을 배워보도록 하겠다.

  • for 조건식
i := 0
for i<5 {
	// 반복문 내용
    i += 1
}

golang은 초깃값, 변화식 없이 위와 같이 조건문만으로 for문을 만들 수도 있다.

반복문을 stop시킬 변수를 반복문 내부에서 변화시킴으로써 본인이 원하는 타이밍에 for문을 멈추게 한다.
그리고 내부에서 Stop Point를 제어한다는 점에서 for 조건식 구문은 while문과 유사하다고 볼 수 있다.

1-3. 무한 루프

마지막으로 무한 루프에 대해 알아보도록 하겠다.
사실 무한루프는 리스크가 크기 때문에 사용할 일이 많지 않지만 그래도 사용하는 방법에 대해 짚고 넘어가도록 하겠다.

  • 무한루프
for {
	// 반복 내용
}

golang에서 무한루프는 다음과 같이 작성한다.
for에 어떠한 조건도 기재하지 않음으로써 내부에서 Break를 하지 않는 한, 지속하여 도는 방식이다.
개인적으로 이러한 무한루프 방식은 지양한다.

2. break문

그렇다면 이제 break문에 대해 배워보도록 하겠다.
break문은 반복문을 멈추게 할 때 사용되며 예시를 통해 더 살펴보도록 하겠다.

i := 0
for {
	if i == 5 {
		break
	}
	fmt.Println("i: ", i) // 0,1,2,3,4
    i += 1
}

위 코드를 이해하였는가?

  1. 첫줄에 i=0으로 초기화했고 무한루프에 진입하게 된다.
  2. Println문을 통해 i의 값이 출력되고 i는 1씩 증가하게 된다.
  3. i==5가 되는 순간, 조건문에 들어가게 된다.
  4. 조건문에는 break문이 들어있고 이를 마주하는 순간 for문은 멈추게 된다.
  • break문은 현재 for문을 아예 탈출하고 싶을 때 사용

3. continue문

이번에는 continue문에 대해 알아보도록 하겠다.

  • break: 현재 for문을 완전히 탈출하게 만든다.
  • continue: 현재 상태만 넘어가고 for문은 조건문을 만족할 때까지 지속된다.

차이를 이해했는가?

예시를 통해 조금 더 설명해보도록 하겠다.

for i:=0; i<5; i++ {
	if i == 1 {
		continue
	}
    fmt.Println("i: ",i)	// i: 0,2,3,4
}

위 예시에서 출력문은 0,2,3,4만을 출력한다.
그 이유는 i==1일 경우, continue를 통해 넘겼기 때문이다.

continue는 이처럼 현재 상태만 넘길 뿐, for문을 아예 탈출하진 않는다.

  • continue문은 for문에서 반복처리를 하지 말아야 할 예외적인 부분을 처리할 때 사용

4. 복수개의 변수를 활용한 for문

4-1. 작성법

for문을 돌릴 때, 1개의 변수만을 사용하는 경우도 있지만 경우에 따라 복수개의 변수를 사용할 수도 있다.

이번엔 이런 경우를 대비하여 예시를 통해 알아보도록 하겠다.

for i,j:=0,0; i<5; i,j=i+1,j+2 {
	fmt.Println("i: ",i)	// i: 0,1,2,3,4
	fmt.Println("j: ",j)	// j: 0,2,4,6,8
}

위 예시에선 변수를 두개(=i,j) 사용해서 for문을 구현해보았다.

  • 초기값: i,j 모두 0
  • 조건식: i < 5
  • 변화식: i += 1, j += 2

여기서 중요한 점은 변수가 몇개든 조건식은 하나의 변수를 기준으로 삼아야 한다는 것이다.
해당 기준을 만족할 때까지 복수개의 변수는 변화식에 따라 증가/감소하며 반복문을 지속한다.

4-2. 유의사항

4-1과 같이 복수개의 변수를 활용할 경우, 유의할 점이 있다.
바로 변화식 부분에서 병렬 할당을 사용해야 한다는 것이다.

무슨 이야기인지 알아보도록 하겠다.

  • 병렬할당 처리한 경우
for i,j=0,0; i<5; i,j=i+1,j+2{~}
  • 병렬할당 처리 X
for i,j=0,0; i<5; i++,j+2 {~}

차이를 발견했는가?

변화식 부분이 서로 다른 것을 확인할 수 있다.
병렬 할당이란 변수의 갯수만큼 콤마(,)를 통해 구분하고 '=' 연산자를 통해 1:1 매핑시켜줘야 한다는 것이다.

이렇게 처리하지 않으면 실행 시,Compile Error가 발생하는 것을 확인하게 될 것이다.

마무리

오늘은 반복문에 대해 알아보는 시간을 가졌다.
다른 언어들과 유사하지만 다른 점을 느낄 수 있었고 주의해야 할 부분에 대해 한번 더 상기시킬 수 있는 시간이었던 것 같다.
이제 어떤 한 언어를 배움에 있어 필요한 기본적인 문법은 어느 정도 익히게 된 것 같다.
조금씩 난이도를 높여가며 웹 서비스를 만들 수 있는 수준으로 기술을 익혀나가 보겠다!

전체 소스 git 링크
https://github.com/cho876/Go/blob/main/Prac08/prac08.go

profile
천천히, 완벽히 배워나가고자 하는 웹 서비스 엔지니어

0개의 댓글