요약 - 구조체 동작
Coddy GO 여정의 로직 & 흐름 섹션에 포함된 레슨 — 68개 중 11번째.
챌린지
쉬움이 챌린지에서는 간단한 사각형 관리 시스템을 만들어 값 리시버와 포인터 리시버를 모두 구현하는 연습을 합니다. Rectangle 구조체를 생성하고 각 리시버 유형을 언제 사용해야 하는지 보여주는 두 가지 다른 유형의 메서드를 정의합니다.
세 개의 입력을 받게 됩니다:
- 사각형의 너비를 나타내는 문자열 (예:
"5.0") - 사각형의 높이를 나타내는 문자열 (예:
"3.0") - 배율을 나타내는 문자열 (예:
"2.0")
여러분의 작업은 다음과 같습니다:
- 두 개의 필드
Width(float64)와Height(float64)를 가진Rectangle구조체를 정의합니다. - 사각형의 면적(너비 × 높이)을 계산하고 반환하는 값 리시버를 가진
area메서드를 만듭니다. - 주어진 배율로 너비와 높이를 모두 곱하는 포인터 리시버를 가진
scale메서드를 만듭니다. - 입력을 파싱하여
Rectangle인스턴스를 생성합니다. "Initial area: [area]"형식을 사용하여 초기 면적을 출력합니다.- 배율과 함께
scale메서드를 호출합니다. "Scaled area: [area]"형식을 사용하여 조정된 면적을 출력합니다.
면적 값은 정수일 경우 정수로 표시되어야 하며(예: 15.0 대신 15), 필요한 경우 소수점을 포함해야 합니다(예: 15.5). 이 챌린지는 핵심 원칙을 보여줍니다: 데이터를 읽기만 하는 메서드(면적 계산 등)에는 값 리시버를 사용하고, 원래 구조체를 수정하는 메서드(치수 조정 등)에는 포인터 리시버를 사용하십시오.
직접 해보기
package main
import (
"fmt"
"strconv"
)
// TODO: 여기에 Rectangle 구조체를 정의하세요
// TODO: 여기에 값 수신기(value receiver)를 사용하는 area 메서드를 구현하세요
// TODO: 여기에 포인터 수신기(pointer receiver)를 사용하는 scale 메서드를 구현하세요
func main() {
// 입력 읽기
var widthStr string
var heightStr string
var scaleStr string
fmt.Scanln(&widthStr)
fmt.Scanln(&heightStr)
fmt.Scanln(&scaleStr)
// 입력을 float64로 파싱
width, _ := strconv.ParseFloat(widthStr, 64)
height, _ := strconv.ParseFloat(heightStr, 64)
scaleFactor, _ := strconv.ParseFloat(scaleStr, 64)
// TODO: Rectangle 인스턴스를 생성하고 아래에 솔루션을 구현하세요
// 초기 면적 출력
// fmt.Printf("Initial area: %.0f\n", initialArea) // 출력을 위해 이 형식을 사용하세요
// 사각형 크기 조정
// 조정된 면적 출력
// fmt.Printf("Scaled area: %.0f\n", scaledArea) // 출력을 위해 이 형식을 사용하세요
}