IMCAT.DEV
로그인 가입
PHP 중급 객체지향

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으로 설정
    }
  • 설명: 외부에서 직접 접근하지 못하도록 private으로 설정해야 합니다.
  • 실수 2: 클래스 이름과 파일 이름 불일치

  • 잘못된 코드: Dog.php 파일에 Cat 클래스가 있을 경우
  • 올바른 코드: 클래스 이름과 파일 이름은 일치시켜야 함.
  • 설명: 자동 로딩이 제대로 작동하지 않을 수 있습니다.
  • 6. 정리

  • OOP는 코드의 재사용성과 유지보수성을 높여줍니다.
  • 핵심 개념인 클래스, 객체, 상속, 다형성, 캡슐화를 이해해야 합니다.
  • 실무에서 자주 사용하는 패턴으로 장바구니, 은행 계좌 등을 활용할 수 있습니다.
  • 다음에 학습하면 좋은 주제: 디자인 패턴, 인터페이스와 추상 클래스.