PHP에서 객체 지향 프로그래밍

객체 지향 개념

객체 지향 프로그래밍(OOP)은 "객체"를 사용하여 애플리케이션과 소프트웨어를 설계하는 프로그래밍 패러다임입니다. 이러한 객체는 클래스의 인스턴스로, 필드로서의 데이터를 포함할 수 있으며, 이는 속성(attributes)으로도 알려져 있으며, 코드로서의 절차를 포함할 수 있으며, 이는 메서드(methods)로도 알려져 있습니다. OOP의 주요 원칙은 캡슐화(encapsulation), 상속(inheritance), 다형성(polymorphism)입니다.

PHP - Object Oriented Programming

PHP 클래스 정의

PHP에서는 class 키워드를 사용하여 클래스를 정의합니다. 클래스는 특정 유형의 모든 객체에 공통된 속성과 메서드를 정의하는 블루프린트입니다.

class Car {
// 클래스 속성과 메서드가 여기에 들어갑니다.
}

PHP에서 객체 생성

클래스에서 객체를 생성하려면 new 키워드 뒤에 클래스 이름을 사용합니다.

$myCar = new Car();

멤버 함수 호출

멤버 함수는 클래스 내부에 정의되며, 객체의 속성에 대한 연산을 수행하는 데 사용됩니다. 객체의 멤버 함수는 객체 연산자 ->를 사용하여 호출합니다.

$myCar->drive(); // $myCar 객체에서 drive 메서드 호출

생성자 함수

생성자는 객체가 클래스에서 생성될 때 자동으로 호출되는 특별한 메서드입니다. 이는 객체의 속성을 초기화하는 데 사용됩니다.

class Car {
public function __construct() {
// 속성 초기화
}
}

데스트ラ이어

데스트라이어는 객체가 파괴되거나 범위를 벗어났을 때 자동으로 호출되는 특별한 메서드입니다. 이는 데이터베이스 연결을 닫거나 메모리를 해제하는 등 정리 작업을 수행하는 데 사용됩니다.

class Car {
public function __destruct() {
// 정리 작업
}
}

상속

상속은 클래스가 다른 클래스에서 속성과 메서드를 상속할 수 있게 합니다. 상속되는 클래스는 부모 클래스로, 상속하는 클래스는 자식 클래스로 불립니다.

class ElectricCar extends Car {
// ElectricCar는 Car에서 속성과 메서드를 상속합니다.
}

메서드 오버라이딩

메서드 오버라이딩은 자식 클래스가 부모 클래스에서 이미 정의된 메서드를 다른 구현으로 제공할 수 있게 합니다.

class ElectricCar extends Car {
public function drive() {
// drive 메서드의 다른 구현
}
}

공개 멤버

공개 멤버는 클래스 내부와 외부 모두에서 접근할 수 있습니다.

class Car {
public $color; // 공개 속성
public function drive() { // 공개 메서드
// 코드가 여기에 들어갑니다.
}
}

사적인 멤버

사적인 멤버는 정의된 클래스 내부에서만 접근할 수 있습니다. 외부에서는 접근할 수 없습니다.

class Car {
private $color; // 사적인 속성
private function drive() { // 사적인 메서드
// 코드가 여기에 들어갑니다.
}
}

보호된 멤버

보호된 멤버는 정의된 클래스 내부와 하위 클래스 내부에서 접근할 수 있습니다.

class Car {
protected $color; // 보호된 속성
protected function drive() { // 보호된 메서드
// 코드가 여기에 들어갑니다.
}
}

인터페이스

인터페이스는 클래스가 구현해야 할 메서드 set을 정의하는 계약입니다. 클래스가 인터페이스를 구현하면, 그 클래스는 인터페이스에 선언된 모든 메서드를 제공해야 한다는 약속을 합니다.

interface Drivable {
public function drive(); // 메서드 선언
}

class Car implements Drivable {
public function drive() {
// drive 메서드 구현
}
}

상수

상수는 정의된 후에는 변경할 수 없는 이름이 지정된 값입니다. 이는 프로그램 실행 중 변하지 않아야 할 값들을 정의하는 데 유용합니다.

class Car {
const MAX_SPEED = 100; // 상수 값
}

추상 클래스

추상 클래스는 인스턴스화할 수 없는 클래스로, 다른 클래스에 의해 확장될 목적으로 사용됩니다. 추상 클래스는 추상 메서드(구현이 없는 메서드)와 구현된 메서드를 포함할 수 있습니다.

abstract class Vehicle {
abstract public function move(); // 추상 메서드
public function stop() { // 구현된 메서드
// 코드가 여기에 들어갑니다.
}
}

정적 키워드

정적 키워드는 클래스 자신에 속하는 속성이나 메서드를 선언하는 데 사용됩니다. 정적 멤버는 클래스 인스턴스를 생성하지 않고도 접근할 수 있습니다.

class Car {
public static $count = 0; // 정적 속성
public static function getCount() { // 정적 메서드
return self::$count;
}
}

최종 키워드

최종 키워드는 클래스가 확장되지 않도록 하거나 메서드가 오버라이드되지 않도록 합니다.

final class Car {
// 이 클래스는 확장할 수 없습니다.
}

부모 생성자 호출

자식 클래스를 생성할 때, 부모 클래스의 생성자를 호출하여 부모 클래스의 속성을 초기화하고 싶을 수 있습니다. 부모 클래스의 생성자를 호출하려면 parent 키워드와 :: 연산자를 사용합니다.


class ElectricCar extends Car {
public function __construct() {
parent::__construct(); // 부모 생성자 호출
// 추가 초기화 작업
}
}

Credits: Image by storyset