PHP 객체 지향 프로그래밍(OOP) 개념 튜토리얼과 예제
OOP란 무엇입니까?
객체 지향은 직원, 자동차, 은행 계좌 등과 같은 실제 객체를 중심으로 애플리케이션을 모델링하는 소프트웨어 개발에 대한 접근 방식입니다. 클래스는 실제 객체의 속성과 메서드를 정의합니다. 객체는 클래스의 발생입니다.
객체 지향의 세 가지 기본 구성 요소는 다음과 같습니다.
- 객체 지향 분석 - 시스템 기능
- 객체 지향 설계 - 시스템 아키텍처
- 객체 지향 프로그래밍 – 애플리케이션 구현
객체지향 프로그래밍 원리
OOP의 세 가지 주요 원칙은 다음과 같습니다.
- 캡슐화 – 이는 구현 세부 사항을 숨기고 메서드만 노출하는 것과 관련이 있습니다. 캡슐화의 주요 목적은 다음과 같습니다.
- 소프트웨어 개발의 복잡성을 줄이세요. 구현 세부 사항을 숨기고 작업만 노출하면 클래스를 사용하기 쉬워집니다.
- 객체의 내부 상태를 보호합니다. 클래스 변수에 대한 액세스는 get 및 set과 같은 메소드를 통해 이루어지므로 클래스를 유연하고 유지 관리하기 쉽게 만듭니다.
- 클래스를 사용하는 코드가 손상될 염려 없이 클래스의 내부 구현을 변경할 수 있습니다.
- 계승 – 이것은 클래스 간의 관계와 관련이 있습니다. 관계는 부모와 자식의 형태를 취합니다. 자식은 부모 클래스에 정의된 메서드를 사용합니다. 상속의 주요 목적은 다음과 같습니다.
- 재사용성 – 여러 하위 항목이 동일한 상위 항목에서 상속될 수 있습니다. 이는 데이터베이스에서 데이터 추가, 업데이트 및 삭제와 같은 일반적인 기능을 제공해야 할 때 매우 유용합니다.
- 다형성 – 이는 단일 형식이지만 다양한 구현 방법을 갖는 것과 관련이 있습니다. 다형성의 주요 목적은 다음과 같습니다.
- 애플리케이션 유지 관리를 단순화하고 확장성을 높입니다.
OOP Concepts PHP에서
PHP는 객체 지향 스크립팅 언어입니다. 이는 위의 모든 원칙을 지원합니다. 위의 원칙은 다음을 통해 달성됩니다.
- 캡슐화 – "get" 및 "set" 메소드 등을 사용하여
- 계승 – 확장 키워드 사용을 통해
- 다형성 – Implements 키워드 사용을 통해
이제 우리는 OOP에 대한 기본 지식과 OOP가 어떻게 지원되는지 알게 되었습니다. PHP, 위의 원칙을 구현한 예를 살펴보겠습니다.
UML이란 무엇입니까?
통합 모델링 언어(Unified Modeling Language) UML은 객체 지향 시스템을 설계하고 문서화하는 데 사용되는 기술입니다.
UML은 많은 문서를 생성하지만 객체 지향 PHP 프로그래밍에 매우 중요한 클래스 다이어그램을 살펴보겠습니다.
클래스 다이어그램 예
클래스 다이어그램 키
- The 상단 상자 클래스 이름이 포함되어 있습니다.
- The 중간 상자 클래스 변수를 포함합니다
- The 아래 상자 클래스 메소드를 포함합니다
- The 빼기(-) 기호는 의미한다 개인 범위
- The 더하기 (+) 기호는 공개 범위를 의미합니다.
- The 해시(#) 기호는 보호된 범위를 의미합니다.
PHP에서 클래스를 만드는 방법
class 키워드는 PHP에서 클래스를 정의하는 데 사용됩니다. 다음은 PHP에서 클래스를 생성하는 규칙입니다.
- 클래스 이름은 문자로 시작해야 합니다.
- 클래스 이름은 PHP 예약어일 수 없습니다.
- 클래스 이름에는 공백이 포함될 수 없습니다.
동물을 표현하기 위한 클래스를 만들고 싶다고 가정해 보겠습니다.
우리는 모든 동물에게 공통적인 특징을 식별하는 것부터 시작하겠습니다.
- 모든 동물은 초식동물, 카니발동물 등의 과에 속합니다.
- 모든 동물은 음식을 먹는다
아래 그림은 동물의 그림을 보여줍니다.
이제 동물 클래스를 코딩해 봅시다.
<?php class Animal { private $family; private $food; public function __construct($family, $food) { $this->family = $family; $this->food = $food; } public function get_family() { return $this->family; } public function set_family($family) { $this->family = $family; } public function get_food() { return $this->food; } public function set_food($food) { $this->food = $food; } } ?>
이리,
- "private $family, $food"는 클래스 외부에서 변수에 직접 액세스할 수 없음을 의미합니다(캡슐화).
- "공용 함수 __construct($family…)"는 PHP 생성자 메서드입니다. 이 함수는 클래스의 인스턴스가 생성될 때마다 호출됩니다. 이 경우 가족과 음식을 설정합니다.
- "공용 함수 get…()"은 가족 또는 음식 값에 액세스하는 데 사용되는 방법입니다(캡슐화).
- "공용 함수 집합…()"은 가족 또는 음식 값을 설정하는 데 사용되는 방법입니다(캡슐화).
PHP에서 상속을 구현하는 방법
우리는 소와 사자와 함께 일할 것입니다. 소와 사자 모두 Animal 클래스를 상속받습니다.
아래 클래스 다이어그램은 관계를 보여줍니다.
소는 동물 클래스에서 상속받고 자체 변수와 메서드도 정의합니다.
이제 Cow 클래스를 코딩해 보겠습니다.
<?php class Cow extends Animal { private $owner; public function __construct($family, $food) { parent::__construct($family, $food); } public function set_owner($owner) { $this->owner = $owner; } public function get_owner() { return $this->owner; } } ?>
이제 Lion 클래스를 코딩해 보겠습니다.
<?php class Lion extends Animal { public function __construct($family, $food) { parent::__construct($family, $food); } } ?>
이리,
- “class…extends Animal”은 소와 사자가 Animal 클래스(상속)의 메서드를 사용하도록 만듭니다.
클래스의 객체를 생성하는 방법
단순화를 위해 Animal, Cow 및 Lion 클래스는 모두 동일한 디렉토리에 있어야 합니다.
이제 우리 클래스를 사용하는 애플리케이션을 만들어 보겠습니다.
PHP 클래스 예
<?php require 'Animal.php'; require 'Cow.php'; require 'Lion.php'; $cow = new Cow('Herbivore', 'Grass'); $lion = new Lion('Canirval', 'Meat'); echo '<b>Cow Object</b> <br>'; echo 'The Cow belongs to the ' . $cow->get_family() . ' family and eats ' . $cow->get_food() . '<br><br>'; echo '<b>Lion Object</b> <br>'; echo 'The Lion belongs to the ' . $lion->get_family() . ' family and eats ' . $lion->get_food(); ?>
응용 프로그램 테스트
이제 웹 브라우저에서 애플리케이션을 살펴보겠습니다.
정말 환상적이죠! 이제 OOP의 세 번째 원칙인 다형성을 살펴보겠습니다.
다음과 같은 다양한 데이터베이스 엔진에 연결하는 애플리케이션을 개발한다고 가정해 보겠습니다. MySQL and SQL 서버이지만 동일한 균일한 인터페이스를 사용합니다.
표준 메소드를 정의하는 인터페이스와 공통 메소드를 구현하는 추상 클래스를 생성할 수 있습니다.
- 인터페이스 – 수업과 비슷해요. 메소드와 매개변수만 정의합니다.
- 추상 클래스 – 객체를 직접 생성하는데 사용할 수 없는 클래스입니다. 그 목적은 일반적인 메서드의 부분 또는 전체 구현을 제공하는 것입니다.
아래 클래스 다이어그램은 추상 클래스, 인터페이스 및 구현 클래스 간의 관계를 보여줍니다.
이제 추상 클래스를 만들어 보겠습니다.
<?php abstract class DBCommonMethods { private $host; private $db; private $uid; private $password; public function __construct($host, $db, $uid, $password) { $this->host = $host; $this->db = $db; $this->uid = $uid; $this->password = $password; } } ?>
이리,
- "추상 클래스"는 해당 클래스를 PHP에서 객체 생성에 직접 사용할 수 없음을 의미합니다.
- "$host,$db..."는 모든 구현에 공통적인 클래스 변수입니다.
- "function __construct(…)"는 초기화 시 공통 변수 값을 설정하는 PHP 클래스 생성자 메서드입니다.
이제 데이터베이스 엔진에 따라 다르게 구현되는 표준 메서드를 포함하는 인터페이스를 만들어 보겠습니다.
<?php interface DBInterface { public function db_connect(); public function insert($data); public function read($where); public function update($where); public function delete($where); } ?>
이리,
- "인터페이스"는 인터페이스를 만드는 키워드입니다.
- "공용 함수...(...)"는 구현되어야 하는 표준 메서드입니다.
이제 DBCommonMethods 클래스를 확장하고 DBInterface 인터페이스를 확장하는 구체적인 클래스를 만들어 보겠습니다. MySQLDriver.php
<?php class MySQLDriver extends DBCommonMethods implements DBInterface { public function __construct($host, $db, $uid, $password) { parent::__construct($host, $db, $uid, $password); } public function db_connect() { //connect code goes here } public function delete($where) { //delete code goes here } public function insert($data) { //insert code goes here } public function read($where) { //read code goes here } public function update($where) { //update code goes here } } ?>
MSSQLServerDriver.php
<?php class MSSQLServerDriver extends DBCommonMethods implements DBInterface { public function __construct($host, $db, $uid, $password) { parent::__construct($host, $db, $uid, $password); } public function db_connect() { //connect code goes here } public function delete($where) { //delete code goes here } public function insert($data) { //insert code goes here } public function read($where) { //read code goes here } public function update($where) { //update code goes here } } ?>
이리,
- "class ... DBCommonMethods 확장"은 DBCommonMethods의 메소드를 사용합니다.
- "... DBInterface 구현"은 사용된 데이터베이스 드라이버에 관계없이 클래스가 표준 메서드를 제공하도록 보장합니다.
위 코드의 사용법 위 클래스를 사용하는 코드는 다음과 같습니다.
<?php $db = new MySQLDriver($host,$db,$uid,$password); ?>
Or
<?php $db = new MSSQLServerDriver ($host,$db,$uid,$password); ?>
나머지 코드는 다음과 같이 두 드라이버 모두 동일합니다.
<?php $db->db_connect(); $db->insert($data); ?>
요약
- 객체 지향 프로그래밍 OOP는 실제 객체를 따라 애플리케이션을 모델링하는 강력한 기술입니다.
- 클래스는 속성과 메서드를 가진 실제 객체를 표현한 것입니다.
- OOP의 세 가지 기본 원칙은 다음과 같습니다.
- 캡슐화
- 계승
- 다형성