반응형
제어 반전: IOC(inversion of control) 제어 반전 모드; 제어 반전은 3종류(컴포넌트 간)에 대한 의존관계를 프로그램 내부에서 외부로 언급하여 관리한다.
개념 이해
먼저 반전을 제어하고 주입에 의존한다는 개념을 소개하겠습니다. 이 두 가지 개념은 그들이 표현하는 것과 같은 의미라고 생각할 수 있습니다. 통속적인 예를 들면, 우리 사용자 로그인은 로그를 기록하는 기능을 제공해야 하기 때문에 선택해서 사용할 수 있습니다.파일이나 데이터베이스.다음은 코드로 보여드리겠습니다.
// 로그 쓰기 인터페이스 규격 정의
interface log
{
public function write();
}
// 파일 로그
class FileLog implements Log
{
public function write(){
echo 'file log write...';
}
}
// 데이터베이스 로그
class DatabaseLog implements Log
{
public function write(){
echo 'database log write...';
}
}
// 프로그램 운영 클래스
class User
{
protected $fileLog;
public function __construct()
{
$this->fileLog = new FileLog();
}
public function login()
{
// 로그인 성공, 로그 기록
echo 'login success...';
$this->fileLog->write();
}
}
$user = new User();
$user->login();
위의 글쓰기는 로그 기록 기능을 할 수 있지만, 지금 데이터베이스로 로그를 기록하려면 User 클래스를 수정해야 합니다. 이 코드는 디커플링에 이르지 못하고 프로그래밍 오픈 클로즈드 원칙에도 맞지 않습니다. 어떻게 수정해야 할까요?우리는 로그 처리 클래스를 구조 함수 방식으로 전달할 수 있다.다음은 유저 클래스의 코드를 수정해 보겠습니다.
class User
{
protected $log;
public function __construct(Log $log)
{
$this->log = $log;
}
public function login()
{
// 로그인 성공, 로그 기록
echo 'login success...';
$this->log->write();
}
}
$user = new User(new DatabaseLog());
$user->login();
이렇게 생각하면 어떤 방식으로든 조작 로그를 기록할 필요가 없어져, User 클래스를 수정할 필요가 없고, 컨스트럭터 파라미터 전달만으로 실현될 수 있다고 생각합니다만, 이것이 바로 '컨트롤 반전'입니다.자체적인 내용 수정 없이 외부 외부로 전달되도록 변경한다.수요의존을 외부에서 책임지는 행태를 우리는 통제반전(IoC)이라고 부를 수 있다.
반응형
'개발 꿀팁 > PHP' 카테고리의 다른 글
PHP 간편 등록 로그인 상세 전체 코드 (0) | 2022.06.25 |
---|---|
php 학생정보관리시스템(소스) (0) | 2022.06.25 |
php에서 \r\n과 \n의 치환되지 않는 오류 해결 (0) | 2022.06.24 |
[PHP] Check for the existence of a variable, Isset() Empty() (0) | 2018.01.19 |
[PHP] Decimal point conversion, truncation, rounding, and rounding of numeric type variables (0) | 2018.01.19 |