복습 - 간단한 계산기
Coddy GO 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 107개 중 11번째.
챌린지
어려움지금까지 배운 모든 것을 사용하여 완전한 Calculator를 만드세요:
- 구조체 (내보낸 필드) —
Name(string),LastResult(float64),History(int) 필드를 가진Calculator를 정의합니다. - 생성자 함수 —
NewCalculator(name string)는*Calculator를 반환합니다. 만약 name이 비어 있으면, 기본값으로"Unnamed"를 사용합니다. - 값 리시버 (Value Receiver) —
GetInfo()는 계산기의 이름을 포맷된 문자열로 반환합니다. - 포인터 리시버 (Pointer Receivers) —
Add,Subtract,Multiply는 각각 결과를LastResult에 저장하고History를 증가시킵니다. - Divide —
(float64, string)을 반환하는 포인터 리시버입니다. 0으로 나누는 경우,History나LastResult를 업데이트하지 않고0과"Error: division by zero"를 반환합니다.
직접 해보기
package main
import "fmt"
func main() {
var name string
var a, b float64
fmt.Scan(&name, &a, &b)
calc := NewCalculator(name)
fmt.Println(calc.GetInfo())
fmt.Printf("History: %d\n", calc.History)
fmt.Printf("%.0f + %.0f = %.2f\n", a, b, calc.Add(a, b))
fmt.Printf("%.0f - %.0f = %.2f\n", a, b, calc.Subtract(a, b))
fmt.Printf("%.0f * %.0f = %.2f\n", a, b, calc.Multiply(a, b))
result, err := calc.Divide(a, b)
if err != "" {
fmt.Println(err)
} else {
fmt.Printf("%.0f / %.0f = %.2f\n", a, b, result)
}
fmt.Printf("History: %d\n", calc.History)
fmt.Printf("Last Result: %.2f\n", calc.LastResult)
}객체 지향 프로그래밍의 모든 레슨
8에러 처리와 OOP
error 인터페이스사용자 정의 에러 타입에러 래핑 (fmt.Errorf)센티넬 에러errors.Is()와 errors.As()Panic, Defer, Recover요약 - 파일 파서