시청

시청

학습 연습 문제

소개

타입 선언

PHP의 타입 선언은 함수 인자, 반환값, 클래스 속성에 대해 런타임에 타입 단언을 제공해요. 함수에는 void 반환 타입을 추가해서 함수가 아무 값도 반환하지 않는다는 것을 나타낼 수 있어요. 선언된 타입은 함수가 적절한 타입의 응답을 반환하는지 런타임에 단언하는 역할도 해요.

<?php

class Driver
{
    private int $serial_number;

    public function setSerialNumber(int $number): void
    {
        $this->serial_number = $number;
    }

    public function getSerialNumber(): int
    {
        return $this->serial_number; 
    }
}

$driver = new Driver();
$driver->setSerialNumber("Version 1b"); // This will throw a TypeError

타입 유니언

함수 인자, 반환값, 클래스 속성이 둘 이상의 타입이 될 수 있다면 타입 유니언을 선언할 수 있어요.

<?php

class IdentityCard
{
    private int|null $id = null;

    public function assign(int|float $id): void
    {
        $this->id = intval($id);
    }
}

$card = new IdentityCard();
$card->assign(5.0);

mixed 타입

코드를 다루다 보면 타입을 지정할 수 없을 때도 있어요. PHP 8.0부터는 mixed라는 탈출구 타입이 제공돼요. Mixed 타입은 object|resource|array|string|float|int|bool|null의 타입 유니언과 같아요.

지침

시청에서 일한 지도 꽤 됐고, 그동안 양식 작성 같은 일상 업무를 훨씬 빠르게 해 주는 도구들을 만들어 왔어요.

그런데 새 동료가 합류하게 되면서, 도구들이 그만큼 직관적이지는 않을 수도 있겠다는 생각이 들었어요. 사무실에는 이상한 관행이 많아요. 양식을 항상 대문자로 작성한다든지, 필드를 비워 두지 않는다든지 하는 식이죠.

그래서 첫 단계로, 새 동료가 곧바로 뛰어들어 도구를 사용할 수 있도록 PHP 타입 선언을 추가하기로 했어요.

1. Address 클래스의 타입을 선언해요

Address 클래스에 선언된 각 프로퍼티에 프로퍼티 타입 선언을 추가해요. 각 클래스 프로퍼티는 문자열로 선언해야 해요.

2. 빈 값으로 양식을 채울 때 쓸 타입을 선언해요

Form 클래스의 blanks 메서드에 매개변수 타입 선언과 반환 타입 선언을 추가해요. 이 메서드는 정수 길이를 받고, 빈 줄을 나타내는 문자열을 반환해야 해요.

3. 값을 각각의 글자로 나눌 때 쓸 타입을 선언해요

Form 클래스의 letters 메서드에 매개변수 타입 선언과 반환 타입 선언을 추가해요. 이 메서드는 단어를 나타내는 문자열을 받고, 글자 배열을 반환해야 해요.

4. 값이 양식에 들어갈 수 있는지 확인할 때 쓸 타입을 선언해요

Form 클래스의 checkLength 메서드에 매개변수 타입 선언들과 반환 타입 선언을 추가해요. 이 메서드는 단어를 나타내는 문자열과 최대 길이를 나타내는 정수를 받고, true 또는 false 값을 반환해야 해요.

5. 양식에서 주소의 형식을 지정할 때 쓸 타입을 선언해요

앞서 수정한 Address 클래스를 활용하는 매개변수 타입 선언과 반환 타입 선언을 Form 클래스의 formatAddress 메서드에 추가해요. 이 메서드는 Address를 받고, 형식이 지정된 문자열을 반환해야 해요.

GitHub에서 편집 링크가 새 창이나 탭에서 열려요
PHP Exercism

시청 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 PHP 트랙을 개념 11개연습 문제 122개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.