한 눈에 끝내는 고랭 기초
    • 01
      시작하기에 앞서
    • 강의대상
      Go란?
      실습 환경 구축 - 구름IDE
      Hello goorm! 출력해보기
    • 02
      변수와 상수
    • 콘솔 출력 함수의 기본
      변수의 선언과 초기화
      상수의 선언과 초기화
      간단한 덧셈
      잘못된 신상정보
    • 03
      연산자
    • 연산자 종류
      연산자 우선순위
      콘솔 입력 함수의 기본
      간단한 덧셈과 곱셈
      몫과 나머지
    • 04
      자료형
    • 자료형의 종류와 특징
      문자열의 표현
      자료형의 변환
      강제 형 변환
    • 05
      콘솔 출력과 입력 함수
    • 콘솔 출력 함수(Print)
      콘솔 입력 함수(Scan)
      정돈된 표
      신상정보 입력과 출력
    • 06
      반복문 - for
    • 오로지 for
      구구단
      빛나는 이등변삼각형
    • 07
      조건문 - if/else
    • 조건에 따른 실행과 흐름 분기
      7과 9의 배수
      두 수의 차
    • 08
      분기문 - switch
    • swich문에 의한 선택적 실행
      안좋은 계산기
    • 09
      제어문
    • break, continue, goto문
      구구단2
      두 수를 더하면 99
    • 10
      컬렉션
    • 배열(Array)
      슬라이스(Slice)
      맵(Map)
      역행렬
      가장 긴 이름
      중간고사 평균 점수
    • 11
      함수
    • Go언어에서의 함수
      전역변수와 지역변수
      매개변수
      반환값(리턴값)
      익명 함수
      오름차순 정렬
      아이패드를 사주는 조건
      역학적 에너지
    • 12
      클로저
    • 외부 변수 접근 : 클로저
      동전 정리
    • 13
      구조체와 메소드
    • 구조체
      메소드
      성적 저장 프로그램
      역학적 에너지2
    • 14
      인터페이스(interface)
    • 메소드의 집합 인터페이스
      직육면체와 원기둥
    • 15
      defer와 panic()
    • 지연 처리 defer
      종료하는 panic(), 복구하는 recover()
      엘리베이터
      중간고사 평균 점수2
    • 16
      에러 처리
    • 에러 처리의 기본
      에러 출력 및 처리
      중간고사 평균 점수3
    • 17
      고루틴(Goroutine)
    • 비동기 프로세스의 기본
      고루틴의 활용
      고루틴 실습
    • 18
      채널(Channel)
    • 고루틴의 데이터 통로 : 채널
      비동기 채널과 버퍼
      동기 채널
      채널 닫기
      송신 전용, 수신 전용 채널
      채널 select문
      고루틴 실습2
      메시지 전송
      동기 채널 실습
      비동기 채널 실습
    • 19
      패키지(package)
    • 패키지의 개념
    • 20
      실전 프로젝트 - 마일리지 상점
    • 프로젝트를 시작하기 앞서
      실습모드에서 실습
      마일리지 상점의 주요 기능
      필수 구조체와 매인 메뉴
      잔여 수량, 잔여 포인트 구현
    • 21
      실전 프로젝트 - 주문하기, 장바구니 담기
    • 구매 구현(1)
      구매 구현(2)
      장바구니에 담기
      장바구니 확인(1)
      장바구니 확인(2)
    • 22
      실전 프로젝트 - 고루틴으로 배송하기
    • 배송 상태 확인(1)
      배송 상태 확인(2)
      배송 상태 확인(3)
      최종 코드
    오로지 for
    06 반복문 - for
    오로지 for

    보통 처음 프로그래밍 언어를 공부한 개발자들은 반복문을 처음 배울 때 while문을 먼저 배웠을 것입니다. while문은 조건식을 이용해 조건식이 '참'일 경우 while문 안의 영역을 계속해서 반복하는 간단한 형식의 반복문입니다. 반복문중에 가장 형식이 간단해서 대부분 언어에서 반복문을 배울 때 while문을 먼저 배웁니다. 그리고 거기서 파생되는 do ~while문과 같은 문법을 배우게 됩니다.

    while문을 다 배우면, while문의 기능을 간편하게 만든 for문을 배웁니다. for문은 반복을 구성하기 위해 필요한 모든 것(초기식, 조건식, 증감식)을 한데 묶을 수 있도록 만들어진 반복문이기 때문에 나중에 반복문에 익숙해지면 거의 for문만 사용하게 됩니다. 물론 while문을 사용하는 경우도 없지 않습니다. 코딩을 하다보면 while문이 좀 더 어울리는 코드가 있기 때문입니다. for문은 while문에 비해서 유연한 느낌을 주지 못합니다. 반복의 횟수가 딱 정해진 경우라면 분명 for문이 최선입니다. 하지만 반복의 횟수가 딱 정해지지 않은 경우라면, 예를 들어서 프로그램 사용자가 임의의 값을 입력하기만 기다리는 상황이라면, for문보다는 while문이 더 자연스러울 수 있습니다.


    하지만 중요한 것은 Go언어에서는 while문을 제공하지 않아 for문만 사용할 수 있습니다. 

    for문의 쓰임새를 확장시킴으로써 무한루프와 같은 기능도 for문으로 간결하게 구현할 수 있게 만들었기 때문입니다. 그래서 Go언어에서 반복문은 for만 기억하면 됩니다. 하지만 if문과 같이 코드 작성에 깔끔함을 추구하기 때문에 for문 역시 if문과 같이 블록 시작 브레이스({)를 for문 을 선언한 같은 줄에 입력해야합니다. 


    for문의 형태가 잘 기억나지 않는 분들을 위해 Go언어에서의 for문의 형태를 보여주겠습니다.

    go

    그리고 아래에 이 형태를 이용한 아주 간단한 반복문 예시가 있습니다. 바로 실행해보세요.

    go
    실행 결과를 확인해보세요!

    이 형태는 초기식, 조건식, 조건 변화식이 모두 포함된 for문입니다. 이제 식을 생략해보면서 이와는 다른 for문의 활용 방법에 대해 알아보겠습니다.


    조건식만 쓰는 for 루프


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


    아래 조건식만 쓴 코드를 바로 실행해보세요.

    go
    실행 결과를 확인해보세요!

    무한루프


    무한루프를 만들 때 다른 언어에서는 while(1)과 같은 방법을 대부분 사용했을 것입니다. Go언어에서는 for {와 같은 형식으로 입력(모든 식을 생략)하는 것만으로 무한루프가 됩니다.

    무한루프를 빠져나오기 위해서는 맥과 윈도우 동일하게 ctrl+c 를 입력하면 됩니다.

    go
    실행 결과를 확인해보세요!

    for range문


    for range문은 다소 생소하게 들릴 것입니다. 이 문법은 다른 언어의 foreach와 비슷한 문법입니다. 컬렉션으로부터 한 요소씩 가져와 차례로 for문의 블럭의 문장들을 실행한다는 뜻입니다. 아직 우리는 컬렉션을 배우지 않았기 때문에 개념을 이해하기 힘들 수 있습니다. 그렇다면 잠깐 컬렉션의 개념을 익힌 후에 다시 돌아와서 학습해도 됩니다.

    그럼에도 불구하고, 반복문 챕터에서 for range문을 다뤄야하기 때문에 특징과 예시 코드를 설명하겠습니다.


    컬렉션은 배열의 개념입니다. 물론, Go언어에서 컬렉션은 배열, 슬라이스(Slice), 맵(Map)이 있지만 이번 강의에서는 배열이라고만 설명하겠습니다. Go언어에서는 배열을 var  arr [3]int = [3]int{1, 2, 3}와 같은 형식으로 선언합니다. 3개의 정수형 변수를 갖는 배열 arr을 선언했다는 뜻입니다. 물론 arr[0]은 1, arr[1]은 2, arr[2]는 3입니다. 


    for range문은 "for 인덱스, 요소값 := range 컬렉션이름" 같이 for 루프를 구성합니다. range 키워드 다음의 컬렉션으로부터 하나씩 요소를 리턴해서 그 요소의 위치인덱스와 값을 for 키워드 다음의 2개의 변수에 각각 할당합니다. 즉, for range문은 컬렉션의 모든 요소에 접근해 차례로 리턴할 때 사용합니다.

    아래 간단한 예시 코드를 바로 실행해보세요.

    go
    실행 결과를 확인해보세요!

    또한 for range문은 굳이 인덱스와 요소값을 모두 받아오지 않아도 됩니다. 인덱스와 요소값 둘 중에 하나를 생략해서 사용할 수 있습니다.

    for range문에 인덱스와 요소값의 순서는 위의 형태와 마찬가지로 인덱스, 요소값입니다. 따라서 

    인덱스를 생략하기 위해서는 "_, 요소값", 요소값을 생략하기 위해서는 "인덱스"로만 입력하면 됩니다.

     

    인덱스를 생략한 예시와 요소값을 생략한 예시가 차례대로 아래 있습니다. 바로 실행해보세요.

    go
    실행 결과를 확인해보세요!
    go
    실행 결과를 확인해보세요!

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

    사용 방법은 같으니 아래 간단한 예시 코드를 바로 실행해보세요.

    go
    실행 결과를 확인해보세요!
    질문하기