학습
PHP 클래스와 객체
PHP 클래스와 객체 — 중급
클래스와 객체
1. 도입 (왜 배워야 하는가)
PHP에서 클래스와 객체는 객체 지향 프로그래밍(Object-Oriented Programming, OOP)의 핵심 요소로, 복잡한 프로그램을 더 효과적으로 관리하고 재사용할 수 있게 해줍니다. 실무에서는 대규모 애플리케이션 개발 시 코드의 유지 보수성과 확장성을 높이는 데 필수적입니다. 클래스와 객체를 이해하지 못하면, 코드가 복잡해지고 중복이 많아져 결국 버그가 발생하기 쉬운 구조가 됩니다. 이는 협업 시 다른 개발자가 코드를 이해하기 어렵게 만들고, 새로운 기능을 추가하는 데 많은 시간을 소모하게 만듭니다.
2. 핵심 개념 설명
- 클래스(Class): 객체를 만들기 위한 설계도입니다. 예를 들어, '자동차'라는 클래스는 자동차의 속성과 행동(예: 색상, 속도, 주행하기)을 정의합니다.
- 객체(Object): 클래스의 인스턴스입니다. '자동차' 클래스에서 '내 차'라는 객체를 만들면, 그 객체는 자동차의 특정한 속성을 가집니다. 이건 마치 '과일'이라는 범주에서 '사과'라는 특정 과일을 만드는 것과 같습니다.
| 용어 | 설명 |
|---|---|
| 클래스 | 객체를 생성하기 위한 설계도 |
| 객체 | 클래스를 기반으로 생성된 실체 |
| 인스턴스 | 클래스의 구체적인 예, 즉 객체를 다른 말로 표현 |
3. 기본 코드 예제
아래는 간단한 클래스와 객체의 예제입니다.
<?php
class Car {
public $color;
public $model;
public function __construct($color, $model) {
$this->color = $color; // 색상 초기화
$this->model = $model; // 모델 초기화
}
public function drive() {
return "이 {$this->color} {$this->model} 차가 달립니다."; // 주행 메시지
}
}
$myCar = new Car("빨간색", "소나타"); // Car 클래스의 인스턴스 생성
echo $myCar->drive(); // 주행 메서드 호출
?>
실행 결과:
이 빨간색 소나타 차가 달립니다.
class Car { ... }: Car라는 클래스를 정의합니다.public $color;: Car 클래스의 속성 color를 선언합니다.public function __construct($color, $model) { ... }: 생성자를 통해 객체 생성 시 속성을 초기화합니다.$myCar = new Car("빨간색", "소나타");: Car 클래스의 새로운 객체를 생성합니다.echo $myCar->drive();: 생성된 객체의 메서드를 호출하여 결과를 출력합니다.4. 실전 활용 예제
1. 쇼핑몰에서 장바구니 구현
장바구니 기능을 구현할 때, Cart 클래스를 만들어 여러 아이템을 담고, 총합을 계산하는 메서드를 포함할 수 있습니다.
<?php
class Cart {
private $items = []; // 장바구니 아이템 목록
public function addItem($item, $price) {
$this->items[$item] = $price; // 아이템 추가
}
public function getTotal() {
return array_sum($this->items); // 총합 계산
}
}
$cart = new Cart();
$cart->addItem("사과", 1000);
$cart->addItem("바나나", 1500);
echo "총 금액: " . $cart->getTotal(); // 총 금액 출력
?>
실행 결과:
총 금액: 2500
2. 사용자 관리 시스템
사용자의 정보를 관리하는 User 클래스를 만들어 로그인 및 로그아웃 기능을 추가할 수 있습니다.
<?php
class User {
private $username;
public function __construct($username) {
$this->username = $username;
}
public function login() {
return "{$this->username}님, 로그인 되었습니다."; // 로그인 메시지
}
public function logout() {
return "{$this->username}님, 로그아웃 되었습니다."; // 로그아웃 메시지
}
}
$user = new User("홍길동");
echo $user->login(); // 로그인 호출
echo $user->logout(); // 로그아웃 호출
?>
실행 결과:
홍길동님, 로그인 되었습니다.홍길동님, 로그아웃 되었습니다.
5. 흔한 실수와 주의사항
- 속성 접근 오류
- 생성자 누락
- 메서드 호출 오류
- 클래스와 객체는 OOP의 기본으로, 코드의 재사용성을 높입니다.
- 객체는 클래스의 인스턴스로, 클래스는 객체의 설계도입니다.
- 실무에서는 장바구니, 사용자 관리 등 다양한 패턴으로 활용됩니다.
- 다음 학습 주제로는 상속(Inheritance)이나 다형성(Polymorphism)을 추천합니다. 이러한 주제들은 OOP의 더 깊은 이해를 도와줄 것입니다.
- 잘못된 코드: $myCar->color = "파란색"; (private 속성)
- 올바른 코드: echo $myCar->getColor(); (getter 메서드 사용)
- 주의: private 속성은 클래스 외부에서 직접 접근할 수 없습니다.
- 잘못된 코드: $myCar = new Car(); (매개변수 없음)
- 올바른 코드: $myCar = new Car("노란색", "아반떼");
- 주의: 생성자를 정의했으면 매개변수를 제공해야 합니다.
- 잘못된 코드: echo $myCar->run(); (존재하지 않는 메서드)
- 올바른 코드: echo $myCar->drive();
- 주의: 클래스 내 정의된 메서드만 호출할 수 있습니다.