정상우
hELLO.
정상우
전체 방문자
428,194
오늘
409
어제
688
  • hELLO. (122)
    • 컴퓨터과학 (4)
      • 알고리즘 & 자료구조 (4)
    • 언어 & 프레임워크 (63)
      • Go (23)
      • PHP & Laravel (40)
    • 웹 (7)
    • 블록체인 (12)
      • 메인넷 (9)
      • 암호화폐 플랫폼 (3)
    • 포트폴리오 (10)
    • 칼럼 (21)
      • 에세이 (4)
      • 개발자스럽게 살기 (15)
      • 회고 (2)
    • 티스토리 (5)

블로그 메뉴

  • ⚡ 개발자 이력서
  • 🌟 깃허브
  • 💻 강의
  • ✨ 예제코드
  • ⭐ 브런치
  • 태그 클라우드
  • 방명록

공지사항

  • 2차 도메인을 설정했습니다 ✨

인기 글

  • JWT(JSON Web Token)의 개념부⋯
    2021.07.29
    JWT(JSON Web Token)의 개념부⋯
  • 'REST' 를 보다 'RESTful' 하게⋯
    2021.08.14
    'REST' 를 보다 'RESTful' 하게⋯
  • [Laravel] 라라벨 프레임워크⋯
    2021.06.10
    [Laravel] 라라벨 프레임워크⋯
  • 깃허브를 포트폴리오로 쓰려면⋯
    2021.12.25
    깃허브를 포트폴리오로 쓰려면⋯
  • 암호화폐 트레이딩 봇을 만들었⋯
    2021.05.12
    암호화폐 트레이딩 봇을 만들었⋯

태그

  • 블록체인
  • 라라벨
  • 개발
  • go
  • 프로그래머스
  • php
  • 포트폴리오
  • 개발 리뷰
  • 코딩테스트
  • Algorithm

최근 댓글

  • 헉 ㅋㅋㅋㅋㅋㅋ 대학에서 잠깐⋯
    정상우
  • 오히려 반대인 경우도 있더라고⋯
    비스카이비전
  • 아무래도 후자가 많은 것 같긴⋯
    정상우
  • 조금 다른 이야기이긴 한데 좋⋯
    비스카이비전
  • 너무나 이쁘고 멋진 스킨 갑사⋯
    TerianP

최근 글

  • 기술적 가스라이팅은 이제 멈춰⋯
    2022.08.08
    기술적 가스라이팅은 이제 멈춰⋯
  • 빠르게 성장하는 개발자의 세⋯
    2022.06.08
    빠르게 성장하는 개발자의 세⋯
  • 개발자와 엔지니어, 그 사이에서
    2022.05.10
    개발자와 엔지니어, 그 사이에서
  • 아임포트(Iamport)로 결제기능⋯
    2022.04.03
    아임포트(Iamport)로 결제기능⋯
  • 아임포트(Iamport)로 결제기능⋯
    2022.04.01
    아임포트(Iamport)로 결제기능⋯

티스토리

hELLO · Designed By 정상우.
정상우

hELLO.

언어 & 프레임워크/PHP & Laravel

PHP: 네임스페이스

2020. 4. 22. 23:21

네임스페이스

네임스페이스는 분량은 짧지만 매우 x 2 중요합니다. 클래스와 함께 모던 PHP를 이루는 근간이며, composer 와 같은 패키지 매니저를 사용할 때 중요하게 작용하기 때문입니다. 이는 우리가 composer package 를 만들거나 할 때도 필요합니다.

 

이는 단순히 우리가 작성한 코드를 구역으로 나누는 것으로 같은 서드 파티, 또는 빌트인에 속하는 함수, 클래스와 중복을 고려하지 않고도 클래스나 함수의 이름을 지정해줄 수 있습니다. 네임스페이스를 사용하기 이전에는 중복을 피하기 위해 긴 함수, 클래스 이름을 사용하여 나타내야 했는데 이제는 그럴 필요가 없습니다.

namespace

네임스페이스는 naemspace 키워드를 사용하여 나타낼 수 있으며, 내부에는 함수와 클래스, 상수 등 여러가지가 올 수 있습니다. 네임스페이스는 하나의 구역이라고 생각할 수 있으며, 각각의 다른 구역을 가집니다. 하나의 파일 안에는 여러 개의 네임스페이스가 올 수 있지만, 가급적 하나의 파일에는 하나의 네임스페이스가 오는 것이 좋습니다.

namespace A;

function var_dump(...$expression)
{
    return __FUNCTION__;
}
위의 코드에서 기존에 존재하는 빌트인 함수인 var_dump() 를 작성한 것을 눈여겨 봐주세요! 코드가 구역으로 나뉘어 있기 때문에 에러가 전혀 나지 않고, 구역 내부에서 var_dump() 함수 호출시 구역 내부에 선언된 함수를 우선으로 합니다.

다중 네임스페이스

하나의 파일에 네임스페이스를 다수 사용하게 될 경우, 네임스페이스 키워드와 함께 중괄호를 사용하여 구분할 수 있습니다.

namespace A
{
}
namespace B
{
}

자식 네임스페이스

다른 네임스페이스의 자식 네임스페이스를 정의할 수 있습니다. 보통 함수, 클래스 등을 호출할 때 자식 네임스페이스 내부에서 찾지 못하면 상위 네임스페이스를 살펴보게 됩니다. 따라서 var_dump() 함수가 네임스페이스 내부에 정의되어 있다면 그것을 호출하지만, 찾지 못한다면 상위의 네임스페이스를 찾아 호출합니다.

namespace A\B;

class A
{
    public function foo()
    {
        return __METHOD__;
    }
}
자식 네임스페이스는 \ 를 구분자로 사용합니다. / 가 아니라는 것을 주의하십시오.

글로벌 네임스페이스

네임스페이스를 선언하지 않거나, namespace 키워드를 사용하되, 이름을 지정해주지 않았다면 글로벌 네임스페이스에 해당합니다. 이전 포스팅까지 우리는 글로벌 네임스페이스에서 모든 것을 해왔다고 해도 과언이 아닙니다.

namespace
{
}

다른 네임스페이스에 있는 요소 사용하기

다른 네임스페이스에 선언된 상수, 함수, 메서드, 클래스 등을 사용하려면 어떻게 해야 할까요? 다음의 예제코드를 보면 한 눈에 알 수 있습니다.

use

다른 네임스페이스를 포함시키거나, 내부에 소속된 것을 포함시키려면 use 키워드를 사용해야 합니다. 이는 주로 네임스페이스 선언 바로 아래에 위치하게 됩니다.

namespace
{
    use A\A;
    use A\B\A as AB;

    use function A\foo;
    use const A\MESSAGE;

    $a = new A();
    // $ab = new \A\B\A();
    // $ab = new AB();

    var_dump($a->foo(), foo(), MESSAGE);
}
new \A\B\A() 처럼 네임스페이스의 풀 패치를 사용하여 사용할 수도 있습니다.

use A\A

네임스페이스 A 아래에 있는 자식 네임스페이스 A 를 포함시킵니다. 이는 현재 네임스페이스의 구역을 변화시키지는 않습니다.

use A\B\A as AB

네임스페이스의 별칭을 부여합니다. 네임스페이스가 너무 길다면 별칭을 부여하여 간략하게 줄일 수 있습니다. 참고로 여기서 A\B\A 는 네임스페이스 A\B 아래에 있는 클래스 A 를 바라보고 있습니다.

use function A\foo

네임스페이스 A 아래에 있는 foo() 함수를 사용하겠다고 명시합니다.

use const A\MESSAGE

네임스페이스 A 아래에 있는 상수 MESSAGE 를 사용하겠다고 명시합니다.

PSR-4: Autoloader

PSR(PHP Standard Recommendation)에 포함된 권장안으로 네임스페이스 사용시 클래스를 자동으로 로딩할 수 있도록 가능하게 하게 하는 표준 권장안입니다. 핵심 내용은 파일 시스템 구조와 논리적 네임스페이스의 구조를 동일하게 맞춰서 일관성있게 코드를 작성하자는 취지입니다.

 

https://www.php-fig.org/psr/psr-4/

 

PSR-4: Autoloader - PHP-FIG

We're a group of established PHP projects whose goal is to talk about commonalities between our projects and find ways we can work better together.

www.php-fig.org

Autoloader 와 관련된 함수로는 __autoload(), spl_autoload_register() 등이 있습니다.

더 읽을거리

PHP: 에러와 예외 (try, catch, finally)

PHP: PSR(PHP Standard Recommendation)

https://www.inflearn.com/course/php7-reboot

https://www.inflearn.com/course/php7-oop

PHP 카테고리 목차 및 문서 정리

2020년, PHP 언어가 가지는 의미

https://www.php.net/manual/en/

    '언어 & 프레임워크/PHP & Laravel' 카테고리의 다른 글
    • PHP: 제네레이터 (Iterator)
    • PHP: 에러와 예외 (try, catch, finally)
    • PHP: 매직 메서드
    • PHP: 추상화 (추상 클래스, 인터페이스, 트레이트)
    namespace, php, PSR, psr4 autoloader, USE
    정상우
    정상우
    과거의 배움으로 현재를 바꾸고 미래를 만듭니다. #25+2살 #INFJ #개발자 #브런치작가
    댓글쓰기
    다음 글
    PHP: 에러와 예외 (try, catch, finally)
    이전 글
    PHP: 매직 메서드
    • 이전
    • 1
    • ···
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • ···
    • 40
    • 다음

    티스토리툴바