Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP 캡슐화(Encapsulation) 완벽 정리: 개념부터 ATM 실전 예제까지

PHP 객체 지향 프로그래밍과 캡슐화

객체 지향 프로그래밍(OOP)은 PHP5에 도입된 소프트웨어 개발 방식으로, 복잡한 애플리케이션을 체계적이고 손쉽게 구축할 수 있도록 도와줍니다. PHP5에서 새롭게 추가된 주요 OOP 개념으로는 추상화(Abstraction), 인터페이스(Interface), 정적 메서드(Static Method), 정적 클래스(Static Class) 등이 있습니다.

이 글에서는 그중에서도 캡슐화(Encapsulation)가 무엇인지, 그리고 실제 코드에서 어떻게 구현하는지 예제를 통해 자세히 살펴보겠습니다.

캡슐화란 무엇인가?

캡슐화는 데이터와 메서드를 하나의 단위, 즉 클래스(Class)로 묶는 것을 의미합니다. 동시에 캡슐화는 클래스 내부의 데이터 멤버와 메서드를 보호하는 보안 메커니즘이기도 합니다. 캡슐화 기법을 활용하면 외부 사용자가 클래스의 데이터 멤버에 직접 접근하는 것을 제한할 수 있습니다.

PHP에서 캡슐화는 코드를 더욱 안전하고 견고하게 만드는 데 핵심적인 역할을 합니다. 캡슐화를 적용하면 다음과 같은 효과를 얻을 수 있습니다.

  • 데이터의 실제 구현 내용을 외부 사용자로부터 숨길 수 있습니다.
  • 원하는 연산(메서드 호출)을 통해서만 데이터 멤버에 접근하도록 강제할 수 있습니다.
  • 임의적인 값 조작으로 인한 오류와 보안 취약점을 줄일 수 있습니다.

캡슐화 예제: ATM 클래스

실생활에서 친숙한 ATM 클래스 예제를 통해 캡슐화를 이해해 보겠습니다.

<?php
class ATM {
private $custid;
private $atmpin;

public function PinChange($custid, $atmpin) {
// 필요한 작업 수행
}

public function CheckBalance($custid, $atmpin) {
// 필요한 작업 수행
}

public function miniStatement($custid) {
// 필요한 작업 수행
}
}

$obj = new ATM();
$obj->CheckBalance(10005285637, '1**3');
?>

예제 설명

위 예제에서 ATM 클래스의 모든 데이터 멤버(변수)는 private 접근 제어자로 선언되어 있습니다. 이는 클래스 외부에서 ATM 클래스의 프로퍼티에 직접 접근할 수 없으며, 값을 임의로 변경하는 것도 불가능하다는 의미입니다.

클래스 프로퍼티(데이터 멤버)를 다룰 수 있는 유일한 방법은 메서드(함수)를 호출하는 것입니다. 바로 이러한 이유로 ATM 클래스의 모든 메서드는 public 접근 제어자로 선언되어 있습니다. 사용자는 클래스 메서드에 필요한 인수를 전달함으로써 특정 작업을 수행할 수 있습니다.

예를 들어 누군가 잔액을 조회하고 싶다면, CheckBalance() 메서드를 호출하면서 $custid = "10005285637"$atmpin = "1**3"이라는 필수 인수를 함께 전달해야 합니다. 이처럼 외부에서는 오직 허용된 메서드를 통해서만 데이터에 접근할 수 있도록 만드는 것을 캡슐화를 통한 데이터 은닉(Data Hiding)이라고 부릅니다.

참고 사항

PHP에서 캡슐화는 접근 지정자(Access Specifier)를 구현함으로써 달성할 수 있습니다. PHP에서 사용할 수 있는 대표적인 접근 제어자는 세 가지입니다.

  • public: 클래스 외부 어디에서나 접근 가능
  • private: 해당 클래스 내부에서만 접근 가능
  • protected: 해당 클래스 및 상속받은 하위 클래스에서만 접근 가능

이러한 접근 제어자를 상황에 맞게 적절히 활용하면, 데이터를 효과적으로 보호하면서도 안전하고 유지보수하기 좋은 객체 지향 코드를 작성할 수 있습니다.