[Golang] 반복문 - for

이정훈·2023년 5월 22일
0

Golang

목록 보기
13/24
post-thumbnail

오로지 for

  • 보통 프로그래밍 언어를 공부하면 while문을 먼저 배울것이다. while문은 조건식을 이용해 조건식이 '참'일 경우 while문 안의 영역을 계속해서 반복하는 간단한 형식의 반복문이다.
  • 여기서 파생되는 do~while문과 같은 문법도 습득하게 된다.
  • while문을 다 배우면, while문의 기능을 간편하게 만든 for문을 배우게 되는데, for문은 반복을 구성하기 위해 필요한 모든 것(초기식, 조건식, 증감식)을 한데 묶을 수 있도록 만들어진 반복문이기 때문에 나중에 반복문에 익숙해지면 거의 for문만 사용하게 된다.
  • 물론 while문이 좀 더 어울리는 코드가 있다.
  • for문은 while문에 비해서 유연한 느낌늘 주지는 못한다.
  • 반복의 횟수가 딱 정해진 경우라면 분명 for문이 최선이다.
  • 하지만 반복 횟수가 딱 정해지지 않은 경우라면, 예를 들어 프로그램 사용자가 임의의 값을 입력하기만 기다리는 상황이라면, for문 보다는 while문이 더 자연스러울 수 있다.
  • 하지만 Go언어에서는 while문을 제공하지 않아서 for문만 사용할 수 있다!!
  • for문의 쓰임새를 확장시킴으로써 무한루프와 같은 기능도 for문으로 간결하게 구현 할 수 있게 만들었기 때문이다!!
  • 그래서 Go언어에서 반복문은 for만 기억하면 된다!
  • 하지만 if문과 같이 코드 작성에 깔끔함을 추구하기 떄문에 for문 역시 if문과 같이 블록 시작 브레이스 ({)를 for문을 선언한 같은 줄에 입력해줘야 한다!

for문의 형태

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

코드

package main

import "fmt"

func main() {
	sum := 0
	
	for i := 1; i <= 10; i++ { // 초기식; 조건식; 조건 변화식
		sum += i
	}
	fmt.Println("1부터 10까지 정수 합계:", sum)
}

출력

1부터 10까지 정수 합계: 55

조건식만 쓰는 for 루트

  • 조건식만 필요한 반복문을 사용한다면 while문을 서택하게 된다. why? C언어같은 언어에서는 for문에 조건식만 사용한다면 for(;i<100:){이런 식으로 사용해 코드가 깔끔하지 못하기 때문에 대부분 while(i<100){과 같은 형식으로 사용
  • 하지만 Go언어에서는 가결하게 표현이 가능! while문과 동일하게 사용이 가능

코드

package main

import "fmt"

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

출력

count 2
count 4
count 8
count 16
count 32
count 64

무한루프

  • 다른 언어에서는 while(1)과 같은 방법을 사용
  • for{와 같은 형식으로 입력(모든 식을 생략)하는 것만으로 무한루프가 된다!
  • 무한루프에서 빠져나오기 위해서는 ctrl+c를 입력

코드

package main

import "fmt"

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

출력

무한루프입니다.
무한루프입니다.
무한루프입니다.
무한루프입니다.
무한루프입니다.
.
.
.

for range 문

  • 다른 언어의 foreach와 비슷한 문법
  • 컬렉션으로붙 한 요소씩 가져와 차례로 for문의 블럭의 문장들을 실행!
  • 아직 컬렉션을 잘 모르기 때문에 살짝 보고 바로 컬렉션 보구 넘어도록!
  • 간단하게 컬렉션은 배열의 개념!
  • 배열, 슬라이스(Slice), 맵(Map)이 있다. for문을 보기위해 간단하게 배열만 사용해보자!
  • var arr [3]int= [3]{1, 2, 3}와 같은 형식으로 선언!
    3개의 정수형 변수를 갖는 배열 arr을 선언!
  • arr[0]=1, arr[1]=2, arr[2]=3
  • for range문은 for 인덱스, 요소값 := range 컬렉션이름같이 for루프를 구성!!
  • range 키워드 다음의 컬렌션으로부터 하나씩 요소를 리턴해서 그 요소의 위치 인덱스와 값을 for 키워드 다음의 2개의 변수에 각 각 할당한다.
  • 즉, for range문은 컬렉션의 모든 요소에 접근해 차례로 리턴할 떄 사용!

코드

package main

import "fmt"

func main() {
	var arr [2]string = [2]string{"hi", "hello"}

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

출력

arr[0]의 값은 hi입니다.
arr[1]의 값은 hello입니다.
  • 굳이 인덱스와 요소값을 모두 받오지 않아도 된다.
  • 인덱스와 요소값 둘 중에 하나를 생략해서 사용할 수 있다.
  • for range문에 인덱스와 요소값의 순서는 위의 형태와 마찬가지로 인덱스, 요소값 따라서 **인덱스를 생략하기 위해서는 "-, 요소값", 요소값을 생략하기 위해서는 "인덱스"로만 입력

코드

// 인덱스를 생략한 예시
package main

import "fmt"

func main() {
	var houes [4]string = [4]string{"원더랜드", "떡잎마을", "부리부리왕국", "집에가고싶다"}

	for _, home := range houes {
		fmt.Printf("안녕하세요 여기는 %s입니다.\n", home)
	}
}

출력

안녕하세요 여기는 원더랜드입니다.
안녕하세요 여기는 떡잎마을입니다.
안녕하세요 여기는 부리부리왕국입니다.
안녕하세요 여기는 집에가고싶다입니다.

코드

// 요소값을 생략한 예시
package main

import "fmt"

func main() {
	var houes [4]string = [4]string{"원더랜드", "떡잎마을", "부리부리왕국", "집에가고싶다"}

	for index := range houes {
		fmt.Printf("여기 집이 %d개 있습니다.\n", index+1)
	}
}

출력

여기 집이 1개 있습니다.
여기 집이 2개 있습니다.
여기 집이 3개 있습니다.
여기 집이 4개 있습니다.
  • 컬렉션의 맵을 활용하면 인덱스가 꼭 정수가 아니더라도 다양한 형태로 선언 가능!
  • 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)
	}
}

출력

grape의 색깔은 purple입니다.
apple의 색깔은 red입니다.
banana의 색깔은 yellow입니다.

한 눈에 끝내는 고랭 기초 !!

profile
싱숭생숭늉

0개의 댓글