Menu
Coddy logo textTech

요약 - 구조체 동작

Coddy GO 여정의 로직 & 흐름 섹션에 포함된 레슨 — 68개 중 11번째.

challenge icon

챌린지

쉬움

이 챌린지에서는 간단한 사각형 관리 시스템을 만들어 값 리시버와 포인터 리시버를 모두 구현하는 연습을 합니다. Rectangle 구조체를 생성하고 각 리시버 유형을 언제 사용해야 하는지 보여주는 두 가지 다른 유형의 메서드를 정의합니다.

세 개의 입력을 받게 됩니다:

  • 사각형의 너비를 나타내는 문자열 (예: "5.0")
  • 사각형의 높이를 나타내는 문자열 (예: "3.0")
  • 배율을 나타내는 문자열 (예: "2.0")

여러분의 작업은 다음과 같습니다:

  1. 두 개의 필드 Width (float64)와 Height (float64)를 가진 Rectangle 구조체를 정의합니다.
  2. 사각형의 면적(너비 × 높이)을 계산하고 반환하는 값 리시버를 가진 area 메서드를 만듭니다.
  3. 주어진 배율로 너비와 높이를 모두 곱하는 포인터 리시버를 가진 scale 메서드를 만듭니다.
  4. 입력을 파싱하여 Rectangle 인스턴스를 생성합니다.
  5. "Initial area: [area]" 형식을 사용하여 초기 면적을 출력합니다.
  6. 배율과 함께 scale 메서드를 호출합니다.
  7. "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) // 출력을 위해 이 형식을 사용하세요
}

로직 & 흐름의 모든 레슨