객체지향 프로그래밍(OOP)란? : 절차지향적 프로그래밍이 아닌 객체의 관점에서 프로그래밍을 하는 방법. 객체를 중심으로 프로그램을 설계, 개발함
클래스(Class)
class Car {
public $color;
public $brand;
public function drive() {
echo "Driving the car!";
}
}
객체(Object)
$car = new Car();
$car->color = "Red";
echo $car->color; // 출력: Red
$car->drive(); // 출력: Driving the car!
캡슐화(Encapsulation)
상속(Inheritance)
class Vehicle {
public $type;
public function move() {
echo "Moving!";
}
}
class Car extends Vehicle {
public $brand;
}
다형성(Polymorphism)
추상화(Abstraction)
예외처리란? : 객체 지향 프로그래밍(OOP)에서 오류 상황을 처리하는 방법중 하나. 예외처리를 통해 프로그램이 예상치 못한 상황을 제어하고 적절한 대응을 할 수 있음
예외(Exception)
예외는 프로그램의 실행 중 발생하는 에러나 상황을 나타내는 객체. 일반적으로 코드 실행 중에 발생하는 오류를 처리하기 위해 사용.
예외는 특정한 예외 클래스로 표현되고, 예외 클래스는 예외 발생 시 정보를 담고 있는 속성과 예외 처리를 위한 메서드를 가지고 있음.
예외 처리 방법
try-catch 문을 사용해 구현.
try 블록 내에서 예외가 발생할 수 있는 코드를 실행하고, catch 블록에서 예외를 처리하는 방식
예외 발생 시 try 블록의 실행이 중단되고, 해당 예외를 처리할 수 있는 catch 블록이 실행됨.
여러 개의 catch 블록을 사용하면 다양한 예외를 처리할 수 있음. 예외 클래스의 계층 구조를 활용해서 상위 예외 클래스부터 하위 예외 클래스로 처리 가능
예외 계층 구조
PHP 에서 예외 처리 계층은 아래와 같음.
Throwable -> Exception & Error -> 각각의 세부 클래스(RuntimeException, LoginException 혹은 TypeError, ParseError 등등)
try {
throw new Error("에러 출력");
} catch (Throwable $t) {
echo "출력 : " . $t->getMessage();
}
$t->getMessage() // 예외 혹은 에러의 메시지 반환
$t->getCode() // 예외 혹은 에러의 코드(정수)를 반환
$t->getFile() // 예외 혹은 에러가 발생한 파일 경로 반환
$t->getLine() // 예외 혹은 에러가 발생한 파일 라인 번호 반환
$t->getTrace() // 예외 혹은 에러의 스택 트레이스를 배열 형태 반환
$t->getTraceAsString() // 예외 혹은 에러의 스택 트레이스를 문자열 형태 반환
$t->__toString() // 예외 혹은 에러 객체를 문자열로 표현
Exception 클래스는 Throwable 에서 정의된 메서드 getMessage(), getCode() 등을 상속받아 사용 가능.
애플리케이션 실행 중에 발생하는 예외를 다루고 있는데, Error 는 치명적인 오류인데 반해 Exception 은 복구가 가능한 오류를 나타냄
Exception 클래스는 크게 LogicException 과 RuntimeException 이 있고 하위 클래스를 가진 계층 구조
// Exception 의 대표적인 클래스들 계층 구조
Exception
├── LogicException
│ ├── BadMethodCallException
│ ├── DomainException
│ ├── InvalidArgumentException
│ ├── LengthException
│ └── OutOfBoundsException
├── RuntimeException
├── OutOfRangeException
├── OverflowException
├── UnderflowException
└── UnexpectedValueException
Exception 클래스를 확장하면 사용자 정의 예외 클래스를 생성할 수 있음
Exception 클래스의 생성자
__construct(string $message = "", int $code = 0, ?Throwable $previous = null)
$message : 예외 메시지로 기본값은 빈 문자열
$code : 예외 코드(정수)로 기본값은 0
$previous : 이전 예외를 연결할 때 사용
예외 처리 키워드로는 try, catch, finally, throw 가 있음
- try : 예외 발생 가능성 있는 코드 실행 블럭
- catch : 발생한 예외 처리 블럭
- finally : 예외 발생 여부와 상관없이 실행되는 블럭
- throw : 예외를 명시적으로 발생
예외 체인(Previous Exception)을 사용해 여러 예외를 연결할 수 있음
try {
try {
throw new Exception("첫번째 예외");
} catch (Exception $e) {
throw new Exception("두번째 예외", 0, $e);
}
} catch (Exception $e) {
echo "Msg: " . $e->getMessage() . "\n";
echo "Previous: " . $e->getPrevious()->getMessage();
}
Exception 과 동일하게 Throwable 의 구현체이기 때문에 Throwable 의 메서드들을 사용 가능함
Error 클래스는 치명적인 오류를 객체로 처리할 수 있도록 제공되는 클래스라는 차이점이 있고 PHP 엔진에서 자동으로 발생하는 오류임. 나머지는 Exception 과 유사함
Exception 과 동일한 생성자 형태를 가지고 있음
Error 의 주요 하위 클래스
Throwable
└── Error
├── TypeError
├── ParseError
├── ArithmeticError
│ └── DivisionByZeroError
└── AssertionError