PHP - Strict Typing: A Beginner's Guide
안녕하세요, 미래의 PHP 마법사 여러분! PHP strict typing의 fascineting 세계를 여러분과 함께 탐험해보고자 기대에 부풀립니다. PHP를 가르치고 있는 지금까지의 경험을 바탕으로 이 개념을 이해하면 여러분이 훨씬 더 나은 프로그래머가 될 수 있을 것이라고 말씀드릴 수 있습니다. 그麼, 시작해보겠습니다!
What is Strict Typing?
이제 구체적인 내용으로 들어가기 전에 strict typing이 무엇인지 이해해보겠습니다. 케이크를 만들 때 염분 대신 설탕을 사용하지 않죠? 그것은 레시피가 원하는 재료를 사용해야 한다는 데 엄격하기 때문입니다. 마찬가지로 PHP에서의 strict typing은 코드에서 사용할 데이터 타입에 대해 정확해야 한다는 것입니다.
Why Strict Typing Matters
strict typing에 대해 왜 신경쓰어야 할까요? 여러분의 젊은 padawan, strict typing은 버그를 예방하고, 코드를 더 신뢰성 있게 만들며, 성능을 향상시키는 데 도움이 됩니다. 코드의 깨끗한 경비병과 같은 것입니다!
Example: The Perils of Loose Typing
strict typing이 얼마나 중요한지 단순한 예제를 통해 보여드리겠습니다:
function addNumbers($a, $b) {
return $a + $b;
}
echo addNumbers(5, "10"); // Outputs: 15
echo addNumbers("5", "10"); // Outputs: 15
이 예제에서 PHP는 자동으로 문자열 "10"을 정수로 변환합니다. 이러한 동작은 type juggling이라고 불리며, 예상치 못한 결과를 초래할 수 있습니다. 누군가가 변환할 수 없는 문자열을 실수로 전달하면 어떤 일이 일어날까요? 혼란이 생깁니다!
Enter Type Hints
타입 힌트는 함수 매개변수의 이름표와 같습니다. PHP에게 "이곳에는 이 특정 타입의 데이터만 원해!"라고 알리는 것입니다.
이전 예제를 업그레이드해보겠습니다:
function addNumbers(int $a, int $b) {
return $a + $b;
}
echo addNumbers(5, 10); // Outputs: 15
echo addNumbers("5", "10"); // Throws a TypeError
이제 누군가가 문자열 대신 정수를 전달하려고 시도하면 PHP는 (기술적으로는 TypeError을) 던집니다. 클럽에서 신분증을 확인하는 경비원과 같은 것입니다!
Available Type Hints
PHP는 다양한 타입 힌트를 제공합니다. 가장 일반적인 것들을 아래 표에 나열했습니다:
Type Hint | Description |
---|---|
int | 정수 |
float | 부동소수점 수 |
string | 텍스트 문자열 |
bool | 부울 (true/false) 값 |
array | 배열 |
object | 어떤 객체 |
callable | 호출할 수 있는 함수나 메서드 |
iterable | Traversable를 구현한 배열이나 객체 |
self | 사용된 클래스와 같은 클래스 |
?type | 가 null일 수 있는 타입 |
The Power of strict_types
이제 strict_types
로 한 단계 더 업그레이드해보겠습니다. 이는 PHP의 "super strict mode"를 켜는 것과 같습니다.
strict typing을 활성화하려면 PHP 파일의 맨 위에 다음 줄을 추가하세요:
<?php
declare(strict_types=1);
function divideNumbers(int $a, int $b): float {
return $a / $b;
}
echo divideNumbers(10, 3); // Outputs: 3.3333333333333
echo divideNumbers(10, "3"); // Throws a TypeError
strict_types
를 활성화하면 PHP가 타입에 대해 더 엄격해집니다. 이제 "3"을 정수로 변환하지 않습니다. 정확한 계산을 강요하는 수학 선생님과 같은 것입니다!
The Return Type
함수 매개변수 뒤에 : float
이 보이셨나요? 그것은 반환 타입 선언입니다. 이 함수는 float 값을 반환해야 한다고 PHP에게 알립니다.
function greet(string $name): string {
return "Hello, $name!";
}
echo greet("Alice"); // Outputs: Hello, Alice!
echo greet(123); // Throws a TypeError
Practical Example: A Simple Calculator
이제 더 실질적인 예제로 모든 것을 통합해보겠습니다:
<?php
declare(strict_types=1);
class Calculator {
public function add(float $a, float $b): float {
return $a + $b;
}
public function subtract(float $a, float $b): float {
return $a - $b;
}
public function multiply(float $a, float $b): float {
return $a * $b;
}
public function divide(float $a, float $b): float {
if ($b == 0) {
throw new Exception("Division by zero is not allowed");
}
return $a / $b;
}
}
$calc = new Calculator();
try {
echo $calc->add(5.5, 3.2) . "\n"; // Outputs: 8.7
echo $calc->subtract(10, 4) . "\n"; // Outputs: 6
echo $calc->multiply(2.5, 3) . "\n"; // Outputs: 7.5
echo $calc->divide(15, 3) . "\n"; // Outputs: 5
echo $calc->divide(10, 0); // Throws an Exception
} catch (TypeError $e) {
echo "Type Error: " . $e->getMessage();
} catch (Exception $e) {
echo "Error: " . $e->getMessage();
}
이 예제에서 우리는 strict typing을 사용한 Calculator
클래스를 만들었습니다. 모든 숫자에 대해 float
을 사용하여 정수와 소수점을 모두 처리할 수 있습니다.
Conclusion
축하합니다! 여러분은 PHP strict typing의 세계로 첫 걸음을 냈습니다. strict typing은 코드 작성 중 안전벨트와 같은东西입니다 -처음에는 제약적이게 느껴질 수 있지만, 나쁜 버그와 충돌을 방지하는 데 있습니다.
PHP 여정을 계속하면서 strict typing을 계속 연습해보세요. 이는 여러분을 더 철저하고 신뢰할 수 있는 프로그래머로 만들 것입니다. 그리고 누가 알랭지? 어有一天, 여러분이 다른 사람들에게 PHP의 strict typing의 기적을 가르치는 사람이 될 수도 있습니다!
행복하게 코딩하시고, 타입은 항상 strict하게 유지하고, 오류는 적게 나오길 바랍니다!
Credits: Image by storyset