SRP(Single Responsibility Principle)
A class should have only one reason to change. // ν΄λμ€κ° λ³κ²½λ μ΄μ λ λ¨ νλμ¬μΌ νλ€.
Example
μλμ Book
μ΄λΌλ ν΄λμ€λ λ§€μ° λ
Όλ¦¬μ μ΄κ³ κ°λ¨ν ν΄λμ€μ²λΌ 보μ
λλ€. ν΄λμ€λ₯Ό ν΅ν΄ μ λͺ©μ μ»μ μλ μκ³ , μκ°, λ€μνμ΄μ§, νμ¬ νμ΄μ§ λ΄μ©μ μ»μ μ μμ΅λλ€.
class Book {
function getTitle() {
return "A Great Book";
}
function getAuthor() {
return "John Doe";
}
function turnPage() {
// pointer to next page
}
function printCurrentPage() {
echo "current page content";
}
}
νμ§λ§ μμ λ¬Έμ κ° μμ΅λλ€. μ°λ¦¬κ° μ½κ² μκ°ν΄λ³΄μμλ Book
ν΄λμ€λ₯Ό λ€λ£¨λ νμμκ° μ±
μ κ΄λ¦¬νλ μ¬λμ΄κ±°λ, μ±
μ 보μ¬μ£Όλ μ¬λ λ λΆλ₯λ‘ λλ μ μμ΅λλ€.
λ λΆλ₯μ νμμκ° μνλ bussiness logic
μ΄ Book
ν΄λμ€μ μμ¬μμ΅λλ€. μ΄λ° κ²½μ°λ SRP
λ₯Ό μλ°ν κ²½μ°λΌκ³ λ³Ό μ μμ΅λλ€.
class Book {
function getTitle() {
return "A Great Book";
}
function getAuthor() {
return "John Doe";
}
function turnPage() {
// pointer to next page
}
function getCurrentPage() {
return "current page content";
}
}
interface Printer {
function printPage($page);
}
class PlainTextPrinter implements Printer {
function printPage($page) {
echo $page;
}
}
class HtmlPrinter implements Printer {
function printPage($page) {
echo '<div style="single-page">' . $page . '</div>';
}
}
λ κ°μ§μ bussiness logic
μ λΆλ₯ν¨μΌλ‘μ¨ design
μ μ μ°μ±μ μ»μ μ μμ΅λλ€.
μλμ κ²½μ° μ μ₯νλ κΈ°λ₯μ΄ μΆκ°λ Book
μ
λλ€.
class Book {
function getTitle() {
return "A Great Book";
}
function getAuthor() {
return "John Doe";
}
function turnPage() {
// pointer to next page
}
function getCurrentPage() {
return "current page content";
}
function save() {
$filename = '/documents/'. $this->getTitle(). ' - ' . $this->getAuthor();
file_put_contents($filename, serialize($this));
}
}
μ°λ¦¬κ° μ μ₯νλ λ°©λ²μ λ°κΏλ Book
ν΄λμ€λ₯Ό λ°κΏμΌ ν©λλ€. λν μ°λ¦¬κ° λ€μ νμ΄μ§λ₯Ό λκΈ°λ κ³Όμ μ λ°κΏλ Book
ν΄λμ€λ₯Ό λ°κΏμΌ ν©λλ€. μ΄ ν΄λμ€λ₯Ό λ°κΏμΌνλ μ΄μ λ μ¬λ¬κ°μ§μ λ³κ²½μ μΆμ΄ μ‘΄μ¬ν©λλ€.
save
λ₯Ό SimpleFilePersistence
ν΄λμ€λ‘ λΆλ¦¬μμΌ κ° ν΄λμ€κ° λ³κ²½λ μ΄μ λ₯Ό μ΅μνν©λλ€.
class Book {
function getTitle() {
return "A Great Book";
}
function getAuthor() {
return "John Doe";
}
function turnPage() {
// pointer to next page
}
function getCurrentPage() {
return "current page content";
}
}
class SimpleFilePersistence {
function save(Book $book) {
$filename = '/documents/' . $book->getTitle() . ' - ' . $book->getAuthor();
file_put_contents($filename, serialize($book));
}
}
κ²°λ‘
SRP
μ μ§ν΄μΌλ‘μ¨low coupled design
μ μ»μ μ μλ€.- νμ§λ§ κ³Όλν
SRP
λ μ΅μ ν λμμΈ λμ λ―Έμμ±λ μ΅μ ν λμμΈμΌλ‘ μ΄λ μ μλ€. - λν λΆμ°λ μμ
class
λ‘ μΈν΄ μ΄ν΄νκΈ° νλ λμμΈμ΄ λ μ μλ€.