한 눈에 끝내는 고랭 기초
    • 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)
      최종 코드
    Go언어에서의 함수
    11 함수
    Go언어에서의 함수

    빌리고 싶은 책이 있어서 도서관에 갔다고 생각해봅시다. 도서관에서 책을 찾아야 하는데, 어떻게 수많은 책 중에서 찾고자 하는 책을 짧은 시간 안에 고를 수 있습니까? 이유는 바로 도서관에 있는 책들은 규칙에 따라 정리돼 있기 때문입니다. 그렇기 때문에 그 규칙을 따른다면 원하는 책을 쉽게 찾을 수 있습니다. 그런데 만약 수많은 책들이 아무런 규칙 없이 꽂혀있다면 원하는 책을 찾을 수 있습니까? 아마도 찾지 못하거나 찾더라도 엄청난 시간을 할애해야 할 것입니다. 도서관이 아무리 멋지고 책이 많고 다양할지라도 책들이 마구잡이로 정리돼 있으면 도서관으로서의 기능을 못 합니다.

    default


    프로그래밍도 마찬가지입니다. 제가 이 말을 하는 이유는 프로그래밍에 있어서 설계(Design)가 상당히 중요하다는 것을 알려주기 위해서입니다. 설계의 가장 기본이자 전부라고 할 수 있는 것이 이번 챕터에서 배우게 될 '함수'입니다.  함수는 특정 기능을 위해 만든 여러 문장을 묶어서 실행하는 코드 블록 단위입니다. 쉽게 말해, 프로그램의 특정 기능들을 기능별로 묶어 구현해 놓은 것입니다. 그렇기 때문에 코드의 양이 많아질수록 함수는 필수이고, 얼마나 함수를 잘 활용하였는지에 따라 프로그램의 가치가 많이 달라집니다.


    지금까지 설명이 길었습니다. 하지만 함수의 중요성에 대해 말하자면 끝이 없을 정도입니다. 그렇기 때문에 함수의 기능들을 여러 강의에 나눠서 설명하겠습니다. 작은 부분들을 차근차근 익히면 큰 어려움이 없을 것입니다. 이번 강의에서는 Go언어에서 쓰이는 함수에 대한 기본적인 특징과 형식에 대해 알아보겠습니다.

    Go언어에서는 함수를 다양한 방법으로 활용할 수 있도록 쓰임새를 유연하게 만들었습니다. 하지만 역시 Go언어의 개발자들은 가독성 좋은 코드를 지향하기 때문에 몇 가지 지켜야 할 문법들도 있습니다. 기본적인 형태의 함수 선언은 "func 함수이름 (매개변수이름 매개변수형) 반환형"입니다. 형식과 함께 기본적인 특징을 알아보겠습니다. 


    1. 함수를 선언할 때 쓰는 키워드는 'func'이다.
    2. '반환형'이 괄호(()) 뒤에 명시된다. 물론 '매개변수형'도 '매개변수이름' 뒤에 명시된다.
    3. 함수는 패키지 안에서 정의되고 호출되는 함수가 꼭 호출하는 함수 앞에 있을 필요는 없다. 
    4. '반환값'이 여러 개일 수 있다. 이럴 때는 '반환형'을 괄호로 묶어 개수만큼 입력해야한다. ((반환형1, 반환형2)형식, 두 형이 같더라도 두 번 써야 한다)
    5. 블록 시작 브레이스({)가 함수 선언과 동시에 첫 줄에 있어야 한다(모든 용법을 이렇게 쓰는 것이 좋습니다).


    다른 언어들은 '반환형'을 괄호 앞에 쓰는 경우가 많습니다. 괄호 뒤에 적을 수 있도록 주의해야합니다. 그리고 C언어와 같은 절차 지향언어에서는 호출되는 함수가 꼭 호출하는 함수 앞에 있어야 했습니다. 적어도 빈껍데기 선언이라도 해야합니다. 하지만 Go언어는 객체 지향을 따르는 언어이기 때문에 꼭 앞에 명시하지 않아도 됩니다. 또한, 함수에 매개변수 쓰지 않거나 여러 개 쓸 수 있다는 것은 익숙할것입니다. 여기서 특이한 점은 Go언어에서는 반환 값도 여러 개일 수 있다는 것입니다. 이 부분은 반환값강의에서 다룰 것이지만, 반환형이 꼭 한 개가 아닐 수도 있다는 점을 기억해야합니다.


    그리고 함수를 만들었다면 함수를 적재적소에 호출해야합니다. 함수를 호출하는 방법은 다른 언어들과 같이 "함수이름(전달인자이름)" 형식으로 입력하는 것입니다. Go언어 역시 함수의  매개변수 필요 유무에 따라 쓰지 않을 수 있습니다. 전달인자는 함수를 실행할 때 매개변수로 전달됩니다. 이 부분은 매개변수 강의에서 자세히 다루도록 하겠습니다. 함수를 실행하고 반환 값이 나온다면 반환 값을 할당할 수 있는 변수를 선언 및 초기화 해서 호출해야합니다.  


    함수는 기본적으로 매개변수와 리턴 값의 유 무에 따라서 네 개의 형태로 나눌 수 있습니다.

    • 매개변수가 있고, 반환 값도 있는 형태
    • 매개변수가 있고, 반환 값이 없는 형태
    • 매개변수가 없고, 반환 값이 있는 형태
    • 매개변수가 없고, 반환 값이 없는 형태


    이 형태들을 보여주는 아래에 함수의 기본 활용 코드를 바로 실행해보세요.

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