학습
PHP 객체지향 프로그래밍 (OOP)
PHP 객체지향 프로그래밍 (OOP) — 중급
객체지향 프로그래밍 (OOP)
1. 도입 (왜 배워야 하는가)
객체지향 프로그래밍(OOP)은 현대 소프트웨어 개발에서 가장 보편적이고 강력한 프로그래밍 패러다임 중 하나입니다. OOP는 코드의 재사용성과 유지보수성을 높여주며, 복잡한 시스템을 더 쉽게 관리할 수 있도록 돕습니다.
실무에서 OOP를 사용하지 않으면, 코드가 길어지고 복잡해져 유지보수가 어려워질 수 있으며, 팀원 간의 협업도 원활하지 않게 됩니다. 예를 들어, 쇼핑몰과 같은 대규모 시스템에서는 각 기능을 모듈화하여 관리해야 하는데, OOP가 없으면 코드의 중복이 심해지고, 버그 수정이나 기능 추가 시 어려움을 겪게 됩니다.
2. 핵심 개념 설명
객체지향 프로그래밍의 주요 개념은 다음과 같습니다:
| 개념 | 설명 |
|---|---|
| 클래스 | 객체의 설계도, 객체를 생성하기 위한 틀 |
| 객체 | 클래스의 인스턴스, 실제로 메모리에 할당된 데이터 |
| 상속 | 기존 클래스를 기반으로 새로운 클래스를 만드는 것 |
| 다형성 | 동일한 인터페이스를 통해 다른 동작을 구현하는 것 |
| 캡슐화 | 변수와 메서드를 하나로 묶고 접근을 제한하는 것 |
이 개념들은 마치 자동차 공장과 같습니다. 자동차(객체)는 설계도(클래스)를 기반으로 만들어지며, 같은 플랫폼에서 여러 가지 모델(상속)이 나올 수 있고, 특정 연료(다형성)에 따라 다른 연산을 수행할 수 있습니다. 또한 엔진과 내부 부품(캡슐화)을 숨겨 사용자가 쉽게 다룰 수 있게 합니다.
3. 기본 코드 예제
다음은 PHP로 간단한 클래스를 정의하고 객체를 생성하는 예제입니다.
<?php
class Dog {
// 속성
public $name;
// 생성자
public function __construct($name) {
$this->name = $name;
}
// 메서드
public function bark() {
return $this->name . "가 멍멍 짖습니다.";
}
}
// 객체 생성
$myDog = new Dog("바둑이");
echo $myDog->bark(); // 실행 결과: 바둑이가 멍멍 짖습니다.
?>
- 1행: PHP 스크립트를 시작합니다.
- 2-7행:
Dog클래스를 정의하고,name이라는 속성을 선언하며, 생성자와bark메서드를 구현합니다. - 10행:
Dog클래스의 인스턴스를 생성하고 이름을 "바둑이"로 설정합니다. - 11행:
bark메서드를 호출하여 결과를 출력합니다.
실행 결과: 바둑이가 멍멍 짖습니다.
4. 실전 활용 예제
예제 1: 쇼핑몰 장바구니 구현
쇼핑몰에서 장바구니에 상품을 추가하고 삭제하는 기능을 OOP로 구현할 수 있습니다.
<?php
class Cart {
private $items = [];
public function addItem($item) {
$this->items[] = $item;
}
public function removeItem($item) {
$key = array_search($item, $this->items);
if ($key !== false) {
unset($this->items[$key]);
}
}
public function getItems() {
return $this->items;
}
}
$cart = new Cart();
$cart->addItem("사과");
$cart->addItem("바나나");
$cart->removeItem("사과");
print_r($cart->getItems()); // 실행 결과: Array ( [1] => 바나나 )
?>
Cart) 클래스에서는 상품 추가, 삭제 및 목록 조회 기능을 구현했습니다.예제 2: 은행 계좌 클래스
은행 계좌를 모델링한 클래스 예제입니다.
<?php
class BankAccount {
private $balance;
public function __construct($initialBalance) {
$this->balance = $initialBalance;
}
public function deposit($amount) {
$this->balance += $amount;
}
public function withdraw($amount) {
if ($amount <= $this->balance) {
$this->balance -= $amount;
} else {
echo "잔액이 부족합니다.";
}
}
public function getBalance() {
return $this->balance;
}
}
$account = new BankAccount(1000);
$account->deposit(500);
$account->withdraw(200);
echo $account->getBalance(); // 실행 결과: 1300
?>
BankAccount) 클래스는 입금, 출금 및 잔액 조회 기능을 포함합니다.5. 흔한 실수와 주의사항
실수 1: 접근 제어자 오용
class Example {
public $value; // 접근 제어자 설정 오류
}
class Example {
private $value; // 변수는 private으로 설정
}
실수 2: 클래스 이름과 파일 이름 불일치
Dog.php 파일에 Cat 클래스가 있을 경우