반응형
말랑Cow
IT
말랑Cow
전체 방문자
오늘
어제
  • 분류 전체보기 (165)
    • Linux (33)
    • Windows (6)
    • Network (7)
    • Hardware (10)
    • Zabbix (13)
    • python (9)
    • script (0)
    • docker (16)
    • NAS (1)
    • DB (3)
    • php (33)
    • jQuery (1)
    • 정보보안기사 (0)
    • Ajax (1)
    • Javascript (21)
    • DELL (0)
    • HPE (0)
    • Secui (0)
    • AWS (2)
    • Elastic (0)
    • 보안 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • php 클래스
  • docker
  • Python
  • 서버
  • 자바스크립트
  • 네트워크
  • 리눅스
  • JavaScript
  • Linux
  • 자빅스
  • bash
  • 모니터링
  • 파이썬
  • Shell
  • php
  • jQuery
  • ZABBIX
  • php 객체
  • CentOS
  • 도커
hELLO · Designed By 정상우.
말랑Cow

IT

php

클래스 및 객체(8)

2021. 8. 20. 00:00
반응형

namespace와 use에 대해 정리해보겠습니다.

 

namespace란 ?

 

클래스, 함수, 상수의 모음입니다.

클래스가 프로퍼티와 메소드의 집합인 것과 비슷합니다.

사용하는 가장 큰 이유는 전역공간의 문제를 해결할 수 있기 때문입니다.

5.3버전 이전엔 외부 라이브러리를 사용하려면 기존 클래스와 이름이 달라야 했습니다.

동일한 이름의 다른 함수, 프로퍼티(변수)가 존재할 수 없듯이 동일한 이름의 다른 클래스가 같은 전역공간에 존재할 수가 없기 때문입니다.

이 땐 한쪽 클래스의 이름을 변경하고 그 클래스를 확장하거나 참조된 모든 것을 수정해야하기에 외부라이브러리 자체를 사용 못하는 경우도 있었습니다.

namespace가 도입된 이후 같은 이름의 클래스, 함수, 변수라도 namespace를 다르게 사용하면 충돌의 문제가 발생하지 않아 쉽게 외부라이브러리 사용 및 클래스의 작성, 구분이 용이해졌습니다.

 

namespace는 폴더처럼 동작을 합니다.

같은 폴더에는 같은 이름의 파일이 있을 수 없지만 다른 폴더에는 같은 이름의 파일이 있을 수 있습니다.

폴더 안에 폴더가 있을 수 있듯, namespace도 자신이 원하는 만큼 추가시킬 수 있습니다.

 

코드로 확인해보겠습니다.

 

<?php

namespace so\sotest1;

class So{
    private $a;

    public function __construct($name){
        $this->a = $name;
    }

    public function name(){
        return $this->a;
    }
}

namespace so\sotest2;

class So{
    private $a;

    public function __construct($name){
        $this->a = $name;
    }

    public function name(){
        return $this->a;
    }
}

namespace so\sotest3;

class So{
    private $a;

    public function __construct($name){
        $this->a = $name;
    }

    public function name(){
        return $this->a;
    }
}

$so1 = new \so\sotest1\So('sjh1');
echo $so1->name()."<br/>";

$so2 = new \so\sotest2\So('sjh2');
echo $so2->name()."<br/>";

$so3 = new \so\sotest3\So('sjh3');
echo $so3->name()."<br/>";

?>

namespace를 so\sotest1,2,3 으로 지정하여 작성했습니다.

여기서는 so가 최상위 namespace가 됩니다.

 

처음 so\sotest1 이라는 namespace가 설정된 이후부터 다른 namespace가 설정 될 때까지 코드는 해당 namespace에 속하게 됩니다. 즉, so\sotest2 라는 코드가 나오기 전까지는 so\sotest1 이라는 namespace에 있다고 보면 되겠습니다.

 

use란 ?

 

이름이 긴 namespace를 갖고 있는 라이브러리를 사용하려고 하면 클래스, 함수, 변수를 사용할 때 마다 긴 이름의 namespace를 입력해야 하니 불편함을 겪습니다.

이 때 use를 사용하면 namespace를 포함한 class의 전체 명칭 대신에 별명을 통해 사용이 가능합니다.

 

use sports\soccer\messi as Messi;
use sports\basketball\lebron as Lebron;

위처럼 긴 namespace를 간단하게 바꾸어 사용이 가능합니다.

 

인스턴스 생성시에도 new Messi, new Lebron 으로 namespace의 경로를 다 입력하지 않고 사용이 가능합니다.

반응형

'php' 카테고리의 다른 글

[php 내장함수] 문자 관련 함수  (0) 2021.08.22
[php 내장함수] 숫자 관련 함수  (0) 2021.08.21
클래스 및 객체(7)  (0) 2021.08.19
클래스 및 객체(6)  (0) 2021.08.18
클래스 및 객체(5)  (0) 2021.08.17
    'php' 카테고리의 다른 글
    • [php 내장함수] 문자 관련 함수
    • [php 내장함수] 숫자 관련 함수
    • 클래스 및 객체(7)
    • 클래스 및 객체(6)
    말랑Cow
    말랑Cow

    티스토리툴바