
안녕하세요. 김탁구입니다.
저는 웹 개발자가 본업인데요. 개발 업무와 함께 여행 블로그를 운영하고 있습니다. 최근에는 챗지피티를 이용해서 개발업무에 도움을 받아오는데요. 하지만 챗지피티가 있다고 해서 모두 해결해되는것은 아니였습니다.
무엇을 검색을 하냐에 따라 내가 원하는 답변을 받을 수 있는데요. 챗지피티가 등장하기전에는 php8버전 문법이 생소하고 어려웠어요. 특히 어노테이션은 오늘은 여행과는 다르게 새로운 주제를 다루어보려고 합니다.
1. Match 표현식
$status = 404;
$message = match ($status) {
200 => 'OK',
404 => 'Not Found',
500 => 'Server Error',
};
기존의 switch 문보다 간결하고, 리턴값을 바로 받을 수 있는 방식입니다.
break 문이 필요 없고, 중복된 조건은 허용되지 않아 더 안전합니다.
2. Null-safe Operator (?->)
$country = $user?->address?->country;
객체 체이닝 중 null 체크를 매번 할 필요 없이 간단하게 처리할 수 있습니다..
$user나 $user->address가 null이면 전체가 null을 반환합니다. 오류 없이 안전하게 데이터를 가져올 수 있습니다.
3. Constructor Property Promotion
class User {
public function __construct(
public string $name,
private int $age
) {}
}
생성자에서 프로퍼티를 선언하고 할당하는 과정을 한 줄로 줄일 수 있습니다.
코드가 간결해지고 가독성도 높아지는 장점이 있습니다.
4. Named Arguments
function greet($name, $greeting = "Hello") {
echo "$greeting, $name";
}
greet(name: "Alice", greeting: "Hi");
함수를 호출할 때 인자 순서를 신경 쓰지 않고, 인자 이름을 지정해서 값을 전달할 수 있습니다.
특히 디폴트 값이 많은 함수나 라이브러리 호출 시 유용합니다.
5. Attributes (어노테이션)
// @Route("/users")
PHP에서는 클래스나 메서드에 메타데이터를 주석으로 작성했습니다.
하지만 이제는 공식 문법으로 어노테이션을 지원합니다. 이것이 바로 PHP 8의 Attributes 기능입니다. C#이나 Java의 어노테이션, Python의 데코레이터와 유사합니다.
Attribute 정의하기
use Attribute;
#[Attribute]
class Route {
public function __construct(
public string $path,
public array $methods = ['GET']
) {}
}
먼저 클래스를 어노테이션으로 사용할 수 있도록 #[Attribute]를 선언합니다.
Attribute 사용 예시
#[Route("/users", methods: ["GET", "POST"])]
class UserController {
#[Route("/users/{id}", methods: ["GET"])]
public function getUser($id) {
// 사용자 정보 처리
}
}
이제 클래스나 메서드에 아래처럼 어노테이션을 붙일 수 있습니다.
Reflection으로 어노테이션 읽기
$ref = new ReflectionClass(UserController::class);
$attrs = $ref->getAttributes();
foreach ($attrs as $attr) {
$instance = $attr->newInstance();
echo $instance->path; // "/users"
}
어노테이션은 리플렉션으로 읽어 동적으로 사용할 수 있습니다.
6. 어노테이션의 용도는 무엇인가??
- 라우팅: #[Route("/path")]
- ORM 매핑: #[Entity], #[Column(type: "string")]
- 유효성 검사: #[NotBlank], #[Length(min: 3)]
- 권한 검사: #[RequiresRole("admin")]
- 이처럼 라라벨, 심포니 같은 프레임워크 또는 자체 시스템에서도 다양하게 활용 가능해요.
오늘은 어노테이션 중심으로 간략하게 알아보았습니다. 앞으로 php를 하다보면 다양한 상황을 찾아볼 수 있을텐데요. 특히 최신 문법을 사용하는 경우보다 과거 버전을 아직까지 사용해야하는 경우가 있습니다. 앞으로 블로그를 통해서 좀 더 다가가도록 노력하겠습니다.
포스팅을 읽어주셔서 감사합니다.