
1. 연산자
Go 언어는 각종 기능과 라이브러리를 패키지로 만들어서 제공합니다.
이 역시 파이썬과 비슷합니다.
파이썬을 사용해보신 분들이라면 쉽게 사용하실 부분입니다.
패키지를 사용하려면 다음과 같이 import 키워드를 사용합니다.

이 import 키워드는 Go 강좌 2편. 안녕? Stop? GO! 편에서 소개한 적이 있습니다.

이 import 키워드로 가져온 패키지를 사용하는 방법은 간단합니다.
바로 패키지 이름에 점(.)을 붙여서 패키지에서 제공하는 함수, 변수, 상수를 사용합니다.
1-1. 손 쉽게 사용하기
Go 언어를 구경하다 보면 정말 마음에 드는 문법들이 너무 많아요.
패키지를 가져올 때
import "패키지 이름" 으로 가져온다고 위에서 알려드렸습니다.
하지만 규모가 큰 프로젝트에서는 여러 패키지를 많이 사용하는 상황이 있을 수도 있습니다.
그럴 때 편하게 여러 패키지를 가져오는 방법이 있습니다.
Go lang 만세
여러 패키지를 사용하는 방법은 아래와 같이 사용합니다.

import 키워드 뒤에 괄호로 묶은 뒤에 패키지 이름을 적으며 사용하면 됩니다.
1-2. 아니 꼭 패키지.함수 이렇게 써야되나욧?

물론 대답은 No 입니다.
패키지를 전역 패키지로 가져오면 굳이 점(.)을 사용할 필요가 없어집니다.
바로 아래와 같이 사용이 가능합니다.


바로 패키지 뒤에 점(.)을 적고 import 키워드를 사용하면 전역 패키지로 가져오게 되어
패키지 이름을 적고 함수를 적을 필요가 없어지게 되는 것 입니다.
하지만 장점도 있지만 단점도 있습니다.
여러 패키지를 가져오며 함수의 이름이 중복인 패키지가 있을 수도 있습니다.
따라서 '이 방법은 좋은 방법은 아니다'라고 생각합니다.
1-3. 패키지의 이름을 Tomori Nao로 할 수 있나요?
물론 가능합니다!
패키지를 가져올 때 패키지 이름을 지정 할 수도 있습니다.

아래와 같이 패키지 이름을 지정할 수 있습니다.


위와 같이 사용하면 패키지 이름을 지정할 수 있습니다.
패키지 이름 지정은 Go 언어에서 제공하는 내가 만든 패키지와 기본 패키지의 이름이 중복이 될 때,
다른 사람이 배포하는 패키지 이름과 자신의 패키지 이름이 중복이 될 때 사용합니다.
Go 언어에서는 패키지를 가져온 뒤 사용을 안하면 컴파일 에러가 발생합니다.
따라서 사용하지 않는 패키지 이름 앞에 언더 바(_)를 지정하면 컴파일 에러가 발생하지 않습니다.
패키지 이름을 빈 식별자로 사용하여 컴파일 에러를 방지 할 수 있습니다.
실제로 사용하는 사례는 스택오버플로우에 답변에서 찾아볼 수 있었습니다.

저와 같은 생각을 하는 질문자가 있었습니다.
과연 프로젝트에서 이러한 코드를 사용할까?
실제 사례가 있나요 라고 질문하는 질문자.

넵 사용은 하는 것 같네요.
2. 조건문(if, else, switch)
조건문이란 말 그대로 조건의 결과에 따라 실행되는 것이 결정됩니다.
프로그래머의 프로그램의 흐름을 원하는 형태로 컨트롤을 할 수 있게 해주는 녀석이죠.
아래 표에 정리된 조건문들에 대해서 배워보도록 하겠습니다.
조건문 종류 |
설명 |
if |
말 그대로 if문은 만약에~ 할 경우 if 오늘 금요일 { 불타오른다() } |
else |
else 문은 아닐 경우~ if 오늘 금요일 { 불타오른다() } else { 시체가된다() } |
elseif |
이것도 아닐 경우 만약에 ~ 의 경우 if 오늘 금요일 { 불타오른다() } else if 오늘 토요일 { 토요일이니까불타오른다() } else { 시체가된다() } |
switch | switch 문은 맞을 경우? (?) switch 요일 { case 월: 시체가된다() case 화: 시체가된다() case 수: 생기가띈다()
.... case 금: 불타오른다() case 토: 불타오른다() case 일: 자살하고싶다() default: 이건무슨요일일까요() // 모든 Case에 해당하지 않을 때 실행됩니다. } |
(1) if문
if문이란 조건문의 기본 중의 기본인 녀석입니다.
프로그래머가 특정 조건을 설정하여 프로그램의 흐름을 제어할 때 사용합니다.
if문의 기본 구성은 이러합니다.

관계 연산자와 if 문을 이용하여 간단한 코드를 작성해보겠습니다.


이것을 쉽게 그림으로 표현하면 이렇게 됩니다.

위 순서도를 보았을 때,
10이 5보다 큰가의 조건으로 주어지면서 클 경우에는 "이야~ 10이 더 크구먼유~"를 출력하며
아닐 경우에는 해당하는 조건이 없기 때문에 아무것도 실행하지 않습니다.
(2) else문
else 문은 if 문의 부족함을 채워주는 녀석이라고도 과언이 아닙니다.
위에서의 if 문에서의 조건을 보면 부족한 부분이 있다고 생각을 할 수 있습니다.
아니..10이 5보다 클 경우에의 조건을 넣고 싶은데!
그럴 때의 사용하는게 else 문입니다.
어떤 조건에 해당하지 않는 경우에 대해서 처리를 할 수 있도록 하는 녀석이 else문 입니다.
우선 if ~ else문의 기본 구조를 보도록 하겠습니다.

이 역시 관계 연산자와 if ~ else 문을 이용하여 간단한 코드를 작성해보았습니다.


이것을 쉽게 그림으로 표현하면 이렇게 됩니다.

위 순서도를 보았을 때,
10이 5보다 큰 가의 조건으로 주어지면서 클 경우에는 "이야~ 10이 더 크구먼유~"를 출력하며
아닐 경우에는 "5가 작네유..." 를 출력합니다.
(3) elseif문
이 elseif문은 if~else 문의 부족함을 완벽히 채워주는 그런 녀석입니다.
더 많은 조건을 추가해서 마음대로 흐름을 제어할 수 있게 되는 것이죠.
하나의 조건이 거짓일 때 elseif문의 조건식을 검사합니다.
일단 else if 문의 기본 구조를 보도록 하겠습니다.

이 역시 관계 연산자와 else if 문을 이용하여 간단한 코드를 작성해보았습니다.


이것을 쉽게 그림으로 표현하면 이렇게 됩니다.

넵...확실히 순서도가 이제 좀 커졌다 라고 생각이 들 정도네요.
위 순서도를 보았을 때,
10이 5보다 큰 가의 조건으로 주어지면서 클 경우에는 "이야~ 10이 더 크구먼유~"를 출력하며
아닐 경우에는 새로운 조건이 5와 5는 같은가? 라는 조건이 주어집니다.
조건이 맞을 경우에는 "같당께유!"를 출력하며 아닐 경우에는 "5가 작네유..." 를 출력합니다.
(4) switch문
이제 switch문에 대해 알아보도록 하겠습니다.
switch문은 if문과 달리 여러개의 조건식의 결과를 검사할 때 사용됩니다.
switch문의 기본 구조를 보도록 하겠습니다.

각 Case를 비교를 하여 값이 일치하면 해당 Case에 있는 코드를 실행하고 switch문을 중단합니다.
그리고 모든 Case에 해당하지 않을 때에 default를 실행합니다.
여기서 Go언어의 특이한 점은 Switch 문에 break 키워드를 생략한 다는 것 입니다.
switch문을 사용하는 예제 코드를 작성해보았습니다.


그냥 쉽게 switch문을 이해하자면 if 문이 여러개 박혀있다고 생각하시면 이해가 빨리 될 것 같네요.
switch에 day 의 값을 비교하게 한 뒤에 각 맞는 case를 실행하게 됩니다.
day 에는 금이 들어있으므로 case 금이 실행됩니다.
※ case에는 문자열 뿐만 아니라 숫자도 가능합니다!
(5) Switch in fallthrough, break
이 위의 내용에서 다 작성한 줄 알았더니 구글링을 통해 Go 언어는 break를 어떻게 사용하나 알아보려 했는데.
새로운 키워드를 알게 되었습니다.
그래서 둘 다 정리할 겸 작성해봅니다.
(5-1) fallthrough
사실 이 녀석을 언제 써먹을 지 생각이 나질 않네요...
딱히 쓸 일은 없을 것 같은 녀석입니다.
특정 case의 코드를 실행한 뒤 다음 case를 실행하고 싶을 때
fallthrough 키워드를 사용합니다.
switch문에서 fallthrough를 사용하는 예제 코드를 작성해보았습니다.


다만 fallthrought 키워드는 맨 마지막 case에서는 사용할 수 없습니다.
ps. 그냥 fallthrought 키워드는 switch에서 break 빼서 다음 case 실행되는 것과 같은 것 같아요.
(5-2) break
switch에서 break를 사용할 때에는 if문 안에 쓰는 것 같아 보입니다.

위키에서도 if문을 빠져나올 때 사용한 걸로 보아...
쿰척..쿰척...


위와 같이 됩니다.
만약 b1이 cat이 아닐 경우에는 0만 출력하게 되는 것이죠.
이번 강좌에서는 조건문과 패키지에 대한 설명이 끝났습니다.
긴 글을 읽어주셔서 감사합니다.
다음 강좌에서는 반복문에 대해 알아보도록 하겠습니다.