SOLID μμΉμ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μμ μ€μν μ€κ³ μμΉμΌλ‘, μννΈμ¨μ΄ κ°λ°μ μ μ§λ³΄μμ±, νμ₯μ± λ° κ΄λ¦¬ κ°λ₯μ±μ μ¦μ§μν€λ λ° λμμ΄ λ©λλ€. μλμμλ κ° μμΉμ PHP μμ μ½λμ ν¨κ» μ€λͺ νκ² μ΅λλ€:
1. λ¨μΌ μ± μ μμΉ (SRP)
ν΄λμ€λ λ³κ²½λμ΄μΌ νλ ν κ°μ§ μ΄μ λ§ κ°μ ΈμΌ νλ©°, μ¦ νλμ μμ λ§ λ΄λΉν΄μΌ ν©λλ€.
μμ: OrderProcessor
ν΄λμ€λ μ£Όλ¬Έ μ²λ¦¬λ§ λ΄λΉνκ³ , λ‘κΉ
μ΄λ λ°μ΄ν°λ² μ΄μ€ κ΄λ¦¬μ κ°μ λ€λ₯Έ μ±
μμ μ²λ¦¬νμ§ μμμΌ ν©λλ€.
class OrderProcessor {
public function process(Order $order) {
// μ£Όλ¬Έ μ²λ¦¬ λ‘μ§
}
}
class OrderLogger {
public function log(Order $order) {
// μ£Όλ¬Έ μΈλΆμ¬ν λ‘κΉ
}
}
2. κ°λ°©-νμ μμΉ (OCP)
ν΄λμ€λ νμ₯μλ μ΄λ € μμ΄μΌ νμ§λ§, μμ μλ λ«ν μμ΄μΌ ν©λλ€. μ¦, κΈ°μ‘΄ μ½λλ₯Ό λ³κ²½νμ§ μκ³ λ μλ‘μ΄ κΈ°λ₯μ μΆκ°ν μ μμ΄μΌ ν©λλ€.
μμ: κΈ°λ³Έ νν° ν΄λμ€λ₯Ό νμ₯νλ λ€μν μ νμ νν°λ₯Ό ꡬνν©λλ€.
interface Filter {
public function apply(array $items);
}
class NameFilter implements Filter {
public function apply(array $items) {
// μ΄λ¦ νν°λ§ λ‘μ§
}
}
class AgeFilter implements Filter {
public function apply(array $items) {
// λμ΄ νν°λ§ λ‘μ§
}
}
3. 리μ€μ½ν μΉν μμΉ (LSP)
μνΌν΄λμ€μ κ°μ²΄λ κ·Έ μλΈν΄λμ€μ κ°μ²΄λ‘ λ체ν μ μμ΄μΌ νλ©°, μ΄λ₯Ό ν΅ν΄ μ ν리μΌμ΄μ μ μμμν€μ§ μμμΌ ν©λλ€.
μμ: Bird
ν΄λμ€μ κ·Έ μλΈν΄λμ€ Duck
μ
λλ€. Bird
κ°μ²΄κ° μ¬μ©λλ λͺ¨λ κ³³μμ Duck
κ°μ²΄λ‘ λ체ν μ μμ΄μΌ ν©λλ€.
class Bird {
public function fly() {
// λΉν λ‘μ§
}
}
class Duck extends Bird {
// Duckμ Birdμ fly λ©μλλ₯Ό μ¬μ©ν©λλ€.
}
4. μΈν°νμ΄μ€ λΆλ¦¬ μμΉ (ISP)
ν΄λΌμ΄μΈνΈλ μ¬μ©νμ§ μλ λ©μλμ μμ‘΄νλλ‘ κ°μλμ΄μλ μ λ©λλ€. μΈν°νμ΄μ€λ μ¬μ©νλ ν΄λΌμ΄μΈνΈμ νΉνλμ΄μΌ ν©λλ€.
μμ: ν° μΈν°νμ΄μ€λ₯Ό λ μκ³ κ΅¬μ²΄μ μΈ μ¬λ¬ μΈν°νμ΄μ€λ‘ λΆν ν©λλ€.
interface WorkerInterface {
public function work();
}
interface EaterInterface {
public function eat();
}
class HumanWorker implements WorkerInterface, EaterInterface {
public function work() {
// μμ
ꡬν
}
public function eat() {
// μμ¬ κ΅¬ν
}
}
5. μμ‘΄μ± μμ μμΉ (DIP)
κ³ μμ€ λͺ¨λμ μ μμ€ λͺ¨λμ μμ‘΄ν΄μλ μ λ©λλ€. λ λ€ μΆμνμ μμ‘΄ν΄μΌ ν©λλ€. μΆμνλ μΈλΆ μ¬νμ μμ‘΄νμ§ μμμΌ νλ©°, μΈλΆ μ¬νμ μΆμνμ μμ‘΄ν΄μΌ ν©λλ€.
μμ: DatabaseConnection
μΈν°νμ΄μ€κ° MySQLConnection
ν΄λμ€μ μν΄ κ΅¬νλ©λλ€. κ³ μμ€ λͺ¨λμ ꡬ체μ μΈ MySQLConnection
μ΄ μλ DatabaseConnection
μΈν°νμ΄μ€μ μμ‘΄ν©λλ€.
interface DatabaseConnection {
public function connect();
}