고로 프로그래밍 시작하기
초보자도 쉽게 따라할 수 있는 실습 중심의 고(Go) 프로그래밍 언어 소개입니다. 작은 단위로 나누어진 학습 과정을 통해 우주 탐사 주제를 기반으로 명령형 프로그래밍, 타입, 함수, 메서드, 컬렉션, 상태, 동시성 등을 배웁니다.
강좌 개요
📚 콘텐츠 요약
초보자도 쉽게 접근할 수 있는, 실습 중심의 고(Go) 프로그래밍 언어 입문 과정입니다. 이 과정은 우주 탐사라는 테마를 바탕으로 작고 관리하기 쉬운 수업으로 구성되어 있으며, 명령형 프로그래밍, 타입, 함수, 메서드, 컬렉션, 상태, 동시성 등을 다룹니다.
작은 수업과 일곱 가지 우주 탐사 기반의 캡스톤 프로젝트를 통해 고 언어로 코딩하는 즐거움을 경험해 보세요.
저자: 네이선 영맨, 로저 페페
감사의 말: 젠니퍼 스투트, 마리나 마이클스, 매튜 머크스, 조엘 코타르스키, 알렉산더 데그오사블레비치, 레네 프렌치, 올가 샬라히나, 에릭 제레이아, 에이프릴 밀른, 모니카 카무스바그.
🎯 학습 목표
- 고 프로그래밍 언어의 정의와 주요 사용 사례를 설명합니다.
- 고 컴파일러의 역할과 인터프리터보다 장점이 무엇인지 설명합니다.
- 고 플레이그라운드에서 코드를 작성하고 컴파일하며 실행하는 방법을 이해합니다.
- 필수적인 "단 하나의 진짜 중괄호 스타일"을 올바르게 사용하여 문법 오류를 방지합니다.
- 다양한 변수 선언 기법과 산술 할당 연산자를 활용하여 데이터를 관리합니다.
- 의사 난수를 생성하고, 분기와 논리 연산자를 사용하여 조건부 로직을 구현합니다.
float32및float64를 사용하여 특정 폭과 정밀도로 부동소수점 변수를 선언하고 포맷합니다.- 부동소수점 정확도 오류와 정수 오버플로우(정수 감쇠)로 인한 오류를 식별하고 완화합니다.
big패키지와 무타입 상수를 활용하여 표준 비트 크기 제한을 초과하는 숫자를 처리합니다.- 매개변수, 인수, 가변 인수 문법을 사용하여 함수를 정의하고 호출합니다.
🔹 수업 1: 궤도에 진입하기
개요: 이 수업에서는 클라우드 컴퓨팅의 현대적 프로그래밍 언어인 고를 소개합니다. 학생들은 고의 컴파일된 성격과 해석형 언어 간의 근본적인 차이, 즉시 실험을 위한 고 플레이그라운드 사용법, 그리고 패키지와 main 함수를 포함한 고 프로그램의 기본 구조를 배웁니다.
학습 결과:
- 고 프로그래밍 언어의 정의와 주요 사용 사례를 설명합니다.
- 고 컴파일러의 역할과 인터프리터보다 장점이 무엇인지 설명합니다.
- 고 플레이그라운드에서 코드를 작성하고 컴파일하며 실행하는 방법을 탐색합니다.
🔹 수업 2: 미션 컨트롤 로직
개요: 이 수업은 고 프로그래밍의 핵심 구성 요소를 소개하며, 코드를 어떻게 구조화하고 실행을 제어하는지에 초점을 맞춥니다. 학생들은 "단 하나의 진짜 중괄호 스타일"과 프로그램 진입 지점을 배우며, 변수 선언 단축법과 수학 연산자로 진행하고, 부울, 비교 연산, 분기 구조를 이용한 의사결정 로직으로 마무리합니다.
학습 결과:
- 필수적인 "단 하나의 진짜 중괄호 스타일"을 올바르게 사용하여 문법 오류를 방지합니다.
- 다양한 변수 선언 기법과 산술 할당 연산자를 활용하여 데이터를 관리합니다.
- 의사 난수를 생성하고, 분기와 논리 연산자를 사용하여 조건부 로직을 구현합니다.
🔹 수업 3: 우주 데이터의 물리학
개요: 이 수업에서는 고가 수치 데이터를 어떻게 처리하는지 탐구합니다. 부동소수점 수의 소수점 정밀도부터 천문학적 거리에 필요한 막대한 규모까지 다룹니다. 학생들은 컴퓨터 메모리 한계, 특히 부동소수점 정확도 오류와 정수 감쇠 문제를 이해하고, 명시적 타입 변환과 big 패키지를 사용하여 "이상한" 크기의 숫자를 다루는 능력을 갖춥니다.
학습 결과:
float32및float64를 사용하여 특정 폭과 정밀도로 부동소수점 변수를 선언하고 포맷합니다.- 부동소수점 정확도 오류와 정수 감쇠로 인한 오류를 식별하고 완화합니다.
big패키지와 무타입 상수를 활용하여 표준 비트 크기 제한을 초과하는 숫자를 처리합니다.
🔹 수업 4: 모듈러 모듈 만들기
개요: 이 수업에서는 고 프로그램의 기본 구성 요소인 함수, 사용자 정의 타입, 메서드를 다룹니다. 학생들은 재사용 가능한 로직을 캡슐화하는 방법, 특정 행동을 가진 새로운 타입을 정의하는 방법, 그리고 클로저와 익명 함수를 포함한 일급 함수를 활용하여 유연하고 모듈식 코드를 만드는 법을 배웁니다. 마지막으로 온도 변환 표를 만드는 실습 캡스톤 프로젝트를 수행합니다.
학습 결과:
- 매개변수, 인수, 가변 인수 문법을 사용하여 함수를 정의하고 호출합니다.
- 고의 이름 규칙을 활용하여 내보내기(외부 노출)된 식별자와 내보내지 않은 식별자를 구분합니다.
- 사용자 정의 타입을 만들고, 메서드와 수신자(레시버)를 사용하여 그에 대한 행동을 부여합니다.
🔹 수업 5: 화물 창고 충전하기
개요: 이 수업은 정보 집합을 관리하기 위한 고의 핵심 데이터 구조를 다룹니다. 고정 길이 배열과 그 메모리 복사 동작에서 시작하여, 유연한 데이터 창을 제공하는 동적 슬라이스로 전환하고, 효율적인 키-값 검색을 위한 맵으로 마무리합니다. 이 단원은 다차원 슬라이스를 사용하여 복잡한 시스템을 시뮬레이션하는 "라이프 게임" 캡스톤 프로젝트로 마무리됩니다.
학습 결과:
- 고정 길이 배열과 다차원 격자를 선언하고 초기화하며 반복 처리합니다.
- 인덱스 범위를 사용하거나
append함수를 통해 슬라이스를 동적으로 확장하고 조작합니다. - 길이와 용량을 구분하고,
make를 사용하여 컬렉션을 사전에 할당함으로써 메모리 효율성을 관리합니다.
🔹 수업 6: 마르스 주거지 구조화하기
개요: 이 수업에서는 고가 복잡한 데이터와 행동을 조직하는 방식을 소개합니다. 학생들은 다양한 데이터 타입을 구조체(structs)에 묶는 방법, 복합 리터럴을 사용하여 초기화하는 방법, 메서드와 생성자 함수를 통해 행동을 관리하는 방법을 배웁니다. 또한 고의 독특한 설계 철학인 "상속 대신 구성"과 암시적 인터페이스를 사용하여 다형성을 달성하는 방식을 탐구합니다.
학습 결과:
- 복잡한 마르스 좌표와 탐사로버 데이터를 관리하기 위해 구조체를 정의하고 초기화하며 복사합니다.
- 구조체 태그를 사용하여 고 구조체를 JSON 형식으로 인코딩하여 맞춤형 데이터 교환을 가능하게 합니다.
- 메서드, 생성자 함수, 구조체 임베딩을 활용하여 재사용 가능하고 체계적인 코드를 구현합니다.
🔹 수업 7: 고퍼홀 탐험하기
개요: 이 수업에서는 고에서의 참조의 힘과 안전성을 탐구합니다. 포인터가 데이터의 효율적인 수정과 메모리 관리를 어떻게 가능하게 하는지에 초점을 맞춥니다. nil 값 처리, defer를 사용한 자원 관리, 그리고 의도적인 오류 처리 패턴을 가르쳐 방어적 프로그래밍의 강력한 틀을 제공합니다. 이를 통해 스도쿠 검증 엔진에 이러한 규칙을 적용하는 것으로 마무리합니다.
학습 결과:
- 앰퍼샌드(
&)와 아스테리스크(*)를 사용하여 메모리 주소를 관리하고 값을 해제 참조합니다. - 포인터 매개변수와 수신자를 사용하여 함수와 메서드 내에서 데이터를 수정할 수 있도록 합니다.
- 슬라이스, 맵, 인터페이스에서
nil값을 안전하게 다룰 수 있도록 하되 런타임 패닉을 유발하지 않습니다.
🔹 수업 8: 다중 탐사로버 통신
개요: 이 수업에서는 고의 핵심 동시성 원시 요소인 고루틴(goroutines)과 채널(channels)을 소개합니다. 독립적으로 작업을 실행하고, 고루틴 간에 안전하게 통신하며, 레이스 조건을 피하기 위해 뮤텍스(Mutexes)를 사용하여 공유 상태를 관리하는 방법을 탐구합니다. 수업은 마르스 탐사로버가 그리드를 탐색하고 발견 내용을 보고하는 시뮬레이션 캡스톤 프로젝트로 마무리됩니다.
학습 결과:
go키워드를 사용하여 동시 작업을 시작하고 관리합니다.- 채널과
select문을 사용하여 고루틴 간에 안전하게 통신합니다. - 채널을 닫음으로써 데이터 파이프라인을 구성하고 고루틴 생명 주기를 관리합니다.