반복문

반복문

반복문인 for에 대해 알아보자.


for


보통 처음 프로그래밍 언어를 공부한 개발자들은 반복문을 처음 배울 때 while문을 먼저 배웠을 것입니다. 왜냐하면 for문while문에 비해서 유연한 느낌을 주지 못합니다. while문을 다 배우면, while문의 기능을 간편하게 만든 for문을 배웁니다.
하지만 중요한 것은 Go언어에서는 while문제공하지 않아 for문만 사용할 수 있습니다.

for 초기식; 조건식; 조건 변화식 {
	반복 수행할 구문
}

if문과 같이 코드 작성에 깔끔함을 추구하기 때문에 for문 역시 if문과 같이 블록 시작 브레이스({)를 for문을 선언한 같은 줄에 입력해야합니다.

package main
 
import "fmt"
 
func main() {
	sum := 0
	
	for i := 1; i <= 10; i++ {
		sum += i
	}
	fmt.Println("1부터 10까지 정수 합계:", sum)
}

조건식만 쓰는 for(while)


대부분 다른 언어에서 조건식만 필요한 반복문을 사용한다면 while문을 선택할 것입니다. 왜냐하면 while(i<100)과 같은 형식이 for(;i<100;) 이런 식보다 코드가 깔끔하기 때문입니다.
하지만 Go언어에서는 간결하게 표현이 가능해 while문과 동일하게 사용이 가능합니다.

package main

import "fmt"

func main() {
	n := 2
	
	for n < 100 {
		fmt.Printf("count %d\n", n)
		
		n *= 2
	}
}

무한루프


무한루프를 만들 때 다른 언어에서는 while(true)과 for(;;) 같은 방법을 대부분 사용했을 것입니다. Go언어에서는 for {와 같은 형식으로 입력(모든 식을 생략)하는 것만으로 무한루프가 됩니다. (무한루프를 빠져나오기 위해서는 맥과 윈도우 동일하게 ctrl+c 를 입력하면 됩니다.)

package main

import "fmt"

func main() {
	for {
		fmt.Printf("무한루프입니다.\n")
	}
}

for range


이 문법은 다른 언어foreach와 비슷한 문법입니다. 컬렉션으로부터 한 요소씩 가져와 차례로 for문의 블럭의 문장들을 실행한다는 뜻입니다.
Go언어에서 컬렉션배열, 슬라이스(Slice), 맵(Map)이 있지만 이번에는 배열의 개념만 다루겠습니다. Go언어에서는 배열var arr [3]int = [3]int{1, 2, 3}와 같은 형식으로 선언합니다.
for range문은 "for 인덱스, 요소값 := range 컬렉션이름" 같이 for 루프를 구성합니다.

package main

import "fmt"

func main() {
	var arr [6]int = [6]int{1, 2, 3, 4, 5, 6}

	for index, num := range arr {
		fmt.Printf("arr[%d]의 값은 %d입니다.\n", index, num)
	}
}

또한 인덱스와 요소값 둘 중에 하나를 생략해서 사용할 수 있습니다. 인덱스를 생략하기 위해서는 "_, 요소값", 요소값을 생략하기 위해서는 "인덱스"로만 입력하면 됩니다.

package main

import "fmt"

func main() {
	var actors [4]string = [4]string{"정우성", "류준열", "박보검", "이정재"}

	for _, actor := range actors {
		fmt.Printf("제가 좋아하는 배우는 %s입니다.\n", actor)
	}

	for index := range actors {
		fmt.Printf("배우가 %d명 입장했습니다.\n", index+1)
	}
}

컬랙션의 맵을 활용하면 인덱스가 꼭 정수가 아니더라도 다양한 형태로 선언할 수 있기 때문에 for range문을 다양한 형태로 활용할 수 있습니다.

package main

import "fmt"

func main() {
	var fruits map[string]string = map[string]string{
		"apple":  "red",
		"banana": "yellow",
		"grape":  "purple",
	}

	for fruit, color := range fruits {
		fmt.Printf("%s의 색깔은 %s입니다.\n", fruit, color)
	}
}

© 2022. All rights reserved. 신동민의 블로그