본문 바로가기

개발/PHP

PHP8 새롭게 추가된 어노테이션과 다양한 문법 정리

728x90
반응형
SMALL

 

 

안녕하세요. 김탁구입니다.

저는 웹 개발자가 본업인데요. 개발 업무와 함께 여행 블로그를 운영하고 있습니다. 최근에는 챗지피티를 이용해서 개발업무에 도움을 받아오는데요. 하지만 챗지피티가 있다고 해서 모두 해결해되는것은 아니였습니다.

 

반응형
728x90
SMALL

 

무엇을 검색을 하냐에 따라 내가 원하는 답변을 받을 수 있는데요. 챗지피티가 등장하기전에는 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를 하다보면 다양한 상황을 찾아볼 수 있을텐데요. 특히 최신 문법을 사용하는 경우보다 과거 버전을 아직까지 사용해야하는 경우가 있습니다. 앞으로 블로그를 통해서 좀 더 다가가도록 노력하겠습니다.

 

포스팅을 읽어주셔서 감사합니다.

728x90
반응형
LIST