학습
Go 타입 시스템 (Type System)
Go 타입 시스템 (Type System) — 중급
타입 시스템 (Type System)
1. 도입 (왜 배워야 하는가)
Go 언어의 타입 시스템은 프로그래밍의 기초를 형성하는 중요한 요소입니다. 타입 시스템은 데이터의 종류와 그 데이터가 수행할 수 있는 작업을 정의합니다. 이 개념을 이해하지 못하면 코드에서 발생하는 오류를 사전에 예방하기 어려워지며, 이는 개발 과정에서 시간과 비용을 낭비하게 만듭니다. 예를 들어, 숫자와 문자열을 잘못 사용하면 프로그램이 예기치 않게 종료될 수 있습니다. 따라서 타입 시스템을 이해하고 활용하는 것은 안정적이고 유지보수가 용이한 코드를 작성하는 데 필수적입니다.
2. 핵심 개념 설명
2.1 기본 타입
- 정수형 (int): 수치 데이터를 표현합니다. 예를 들어, 나이, 수량 등.
- 부동 소수점형 (float64): 소수점을 포함한 숫자를 표현합니다. 예를 들어, 가격, 온도 등.
- 문자열 (string): 문자들의 집합으로, 텍스트 데이터를 표현합니다.
2.2 사용자 정의 타입
Go에서는 사용자 정의 타입을 만들 수 있습니다. 이는 특정 용도에 맞는 타입을 정의하여 코드의 가독성을 높이고, 타입의 안전성을 강화합니다.
| 타입 | 설명 |
|---|---|
| int | 정수형 |
| float64 | 부동 소수점형 |
| string | 문자열 |
| struct | 사용자 정의 복합 타입 |
| interface | 메서드 집합을 정의하는 타입 |
3. 기본 코드 예제
아래는 Go의 타입 시스템을 활용한 간단한 예제입니다.
package main
import "fmt"
func main() {
var age int = 30 // 정수형 변수 age 선언 및 초기화
var price float64 = 19.99 // 부동 소수점형 변수 price 선언 및 초기화
var name string = "Alice" // 문자열 변수 name 선언 및 초기화
fmt.Println(name, "is", age, "years old and costs", price) // 변수 출력
}
실행 결과:
Alice is 30 years old and costs 19.99
var age int = 30: age라는 이름의 정수형 변수를 선언하고 30으로 초기화합니다.var price float64 = 19.99: price라는 이름의 부동 소수점형 변수를 선언하고 19.99로 초기화합니다.var name string = "Alice": name이라는 이름의 문자열 변수를 선언하고 "Alice"로 초기화합니다.fmt.Println(...): 세 개의 변수를 출력하여 결과를 보여줍니다.4. 실전 활용 예제
예제 1: 쇼핑몰에서 장바구니 구현
package main
import "fmt"
type Product struct {
Name string
Price float64
}
type Cart struct {
Items []Product
}
func (c Cart) AddProduct(p Product) {
c.Items = append(c.Items, p) // 장바구니에 제품 추가
}
func (c Cart) TotalPrice() float64 {
total := 0.0
for _, item := range c.Items {
total += item.Price // 모든 제품 가격의 합계
}
return total
}
func main() {
cart := Cart{}
cart.AddProduct(Product{"Laptop", 999.99})
cart.AddProduct(Product{"Mouse", 25.50})
fmt.Printf("Total Price: %.2f\n", cart.TotalPrice())
}
상황 설명: 쇼핑몰에서 고객이 장바구니에 제품을 추가하고, 총 가격을 계산하는 기능을 구현했습니다.
예제 2: 학생 정보 관리
package main
import "fmt"
type Student struct {
Name string
Grade int
}
func main() {
students := []Student{
{"John", 90},
{"Jane", 85},
}
for _, student := range students {
fmt.Printf("%s scored %d\n", student.Name, student.Grade)
}
}
상황 설명: 학생의 이름과 성적을 관리하는 시스템을 구현했습니다. 각 학생의 정보를 출력합니다.
5. 흔한 실수와 주의사항
실수 1: 타입 혼용
var a int = 5
var b float64 = 10.5
// fmt.Println(a + b) // 오류 발생
fmt.Println(float64(a) + b) // 타입 변환 후 덧셈
실수 2: 초기화 누락
var name string
fmt.Println(name) // 빈 문자열 출력
var name string = "Unknown"
fmt.Println(name) // "Unknown" 출력
6. 정리
- Go의 타입 시스템은 데이터의 종류를 정의하고 코드의 안전성을 강화합니다.
- 기본 타입과 사용자 정의 타입을 통해 다양한 데이터 구조를 생성할 수 있습니다.
- 실전에서 유용한 예제들을 통해 타입 시스템을 효과적으로 활용할 수 있습니다.
- 타입 혼용과 초기화 누락 등 흔한 실수를 피해야 합니다.
- Go의 인터페이스와 다형성
- 고루틴과 채널을 이용한 동시성 프로그래밍
- 에러 처리 및 패닉에 관한 심화 학습