타입 저글링은 타입 강제 변환이라고도 해요. 타입 저글링은 서로 다른 타입의 두 값이 연산을 수행하기 위해 같은 타입으로 강제 변환되는 것을 말해요.
$baskets = 5 // int
$apples_per_basket = "3" // string
$baskets * $apples_per_basket
# => 15
이 변환은 암시적으로 일어날 수도 있고(위 예제를 봐요), C 스타일의 타입 캐스팅으로 명시적으로 할 수도 있어요.
$apples_per_basket = "3" // string
$my_number = (int) $apples_per_basket // cast string to int
# => 3 // int
직접 타입 캐스팅을 할 때 사용할 수 있는 타입은 bool, int, float, string, array, object예요.
가장 흔하게는 정수(int)를 실수(float)로 바꾸거나 그 반대로 바꿀 때 타입 캐스팅을 사용해요.
친구 Kojo는 숫자를 정말 좋아해요. Kojo는 숫자를 가지고 이것저것 해볼 수 있는 작은 웹사이트를 운영하고 있어요. 그런데 프로그래밍을 그렇게 잘하지는 못해서 여러분에게 도움을 청했어요.
여러분은 Kojo의 웹사이트에 들어갈 새로운 숫자 게임용 헬퍼 메서드 두 개를 만들고, 사용자가 입력할 수 있는 값의 유효성을 검사할 메서드도 하나 만들 거예요.
Kojo의 웹사이트에 있는 게임 중 하나는 숫자가 적힌 바퀴 두 그룹을 보여주는 슬롯머신처럼 생겼어요. 각 숫자 그룹은 하나의 수를 나타내요. 게임이 동작하려면 Kojo는 두 수의 합을 알아야 해요.
두 배열을 매개변수로 받는 메서드 sumUp을 작성해요.
각 배열은 0과 9 사이의 숫자를 하나 이상 담고 있어요.
함수는 각 배열을 하나의 수로 해석하고, 두 수의 합을 반환해야 해요.
<?php
$lucky_numbers = new LuckyNumbers()
$lucky_numbers->sumUp([1, 2, 3], [0, 7]);
//=> 130
// [1, 2, 3] represents 123 and [0, 7] represents 7.
// 123 + 7 = 130
웹사이트의 또 다른 게임은 "Lucky Numbers"라는 작은 퀴즈예요. 사용자가 수를 입력하면, 그 수가 어떤 비밀 수열이나 패턴에 속하는지 확인할 수 있어요. "lucky numbers"의 수열이나 패턴은 매달 바뀌고, 각 사용자는 정해진 횟수만큼만 그것을 추측할 수 있어요.
이번 달의 lucky numbers는 회문인 수여야 해요. 회문인 수는 숫자를 뒤집어도 같은 수가 돼요.
정수를 매개변수로 받는 새로운 함수 isPalindrome을 구현해요.
함수는 그 수가 회문이면 true를, 그렇지 않으면 false를 반환해야 해요.
입력으로 주어지는 수는 항상 양의 정수예요.
<?php
$lucky_numbers = new LuckyNumbers()
$lucky_numbers->isPalindrome(1441);
//=> true
$lucky_numbers->isPalindrome(123);
//=> false
웹사이트 곳곳에는 사용자가 숫자를 입력하고 버튼을 눌러 어떤 동작을 실행할 수 있는 입력 필드가 있어요. Kojo는 사이트의 사용자 경험을 개선하고 싶어 해요. 사용자가 버튼을 눌렀는데 입력 필드에 유효하지 않은 값이 들어 있으면 오류 메시지를 보여주고 싶어 해요.
입력 필드의 값이 어떻게 전달되는지에 대한 정보가 몇 가지 더 있어요.
사용자 입력을 매개변수로 받는 함수 validate를 작성해요.
사용자가 아무 입력도 하지 않았다면, validate는 'Required field'를 반환해야 해요.
입력이 PHP 형 변환 규칙에 따라 0보다 큰 양의 정수를 나타내지 않는다면, 'Must be a whole number larger than 0'를 반환해야 해요.
그 외의 모든 경우에는 입력이 유효하다고 가정할 수 있고, 이때 반환 값은 빈 문자열이어야 해요.
<?php
$lucky_numbers = new LuckyNumbers()
$lucky_numbers->validate('123');
// => ''
$lucky_numbers->validate('');
// => 'Required field'
$lucky_numbers->validate('abc');
// => 'Must be a whole number larger than 0'
Exercism에 가입하고 PHP 트랙을 개념 11개연습 문제 122개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.