Menu
Coddy logo textTech

함수에서 포인터 사용하기

Coddy GO 여정의 기초 섹션에 포함된 레슨 — 109개 중 64번째.

함수는 포인터를 통해 변수를 전달받고 수정할 수 있습니다. 이를 통해 함수는 단순히 복사본이 아닌 원본 값을 변경할 수 있습니다.

포인터를 통해 값을 수정하는 함수를 만드세요:

func main() {
    number := 10
    fmt.Println("Before:", number)
    
    // number의 주소를 전달합니다
    doubleValue(&number)
    
    fmt.Println("After:", number)
}

func doubleValue(num *int) {
    // 포인터 주소에 있는 값을 수정합니다
    *num = *num * 2
}

출력은 함수에 의해 변경된 값을 보여줍니다:

Before: 10
After: 20

우리가 &number를 전달할 때, 함수는 포인터를 받으며 원본 변수를 수정할 수 있습니다.

challenge icon

챌린지

초급

이 챌린지에서는 함수에서 포인터를 사용하는 연습을 합니다. 문자열에 대한 포인터를 받아 문자열 값을 대문자로 수정하는 함수를 완성해야 합니다.

makeUppercase 함수는 이미 정의되어 있습니다. 여러분의 과제는 strings.ToUpper() 함수를 사용하여 포인터가 가리키는 문자열을 수정하는 것입니다.

치트 시트

함수는 복사본 대신 메모리 주소를 전달받아 포인터를 통해 변수를 수정할 수 있습니다:

func main() {
    number := 10
    
    // &를 사용하여 number의 주소를 전달합니다
    doubleValue(&number)
    
    fmt.Println(number) // 출력: 20
}

func doubleValue(num *int) {
    // *를 사용하여 포인터 주소의 값을 수정합니다
    *num = *num * 2
}

주요 포인터 구문:

  • &variable - 변수의 주소를 가져옵니다
  • *pointer - 포인터를 역참조하여 값에 접근하거나 수정합니다
  • *type - 포인터 매개변수 타입을 선언합니다

직접 해보기

package main

import (
	"fmt"
	"strings"
)

// makeUppercase는 문자열 포인터를 받아 해당 문자열을 대문자로 변경합니다
func makeUppercase(strPtr *string) {
	// TODO: strings.ToUpper()를 사용하여 strPtr이 가리키는 문자열을 변경하세요
	// 힌트: 문자열 값에 접근하려면 포인터를 역참조해야 합니다
	? = strings.ToUpper(?)
	
}

func main() {
	// 이미 문자열 변수가 존재합니다
	message := "hello, world"
	
	// 원본 메시지 출력
	fmt.Printf("Original message: %s\n", message)
	
	// message의 주소값을 전달하여 makeUppercase 호출
	makeUppercase(&message)
	
	// 수정된 메시지 출력
	fmt.Printf("Modified message: %s\n", message)
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

기초의 모든 레슨