단일 책임 원칙
모듈, 클래스, 함수는 하나의 파트에서만 책임을 가져야 한다는 원칙
객체는 단 하나의 책임만 가져야 한다
// bad
class Calculator {
add(a, b);
sub(a, b);
mul(a, b);
div(a, b);
playMusic();
}
// good
class Calculator {
add(a, b);
sub(a, b);
mul(a, b);
div(a, b);
}
class MusicPlayer {
play();
}
// bad
class Light {
on() {
console.log("빨간색 불이 켜졌습니다");
}
}
// good
interface Light {
on();
}
class BlueLight implements Light {
on() {
console.log("파란색 불이 켜졌습니다");
}
}
class RedLight implements Light {
on() {
console.log("빨간색 불이 켜졌습니다");
}
}
// e.g.,
abstract class Animal {
abstract sound();
}
class Cat extends Animal {
sound() {
console.log("meow");
}
}
// bad
interface Phone {
call();
sms();
internet();
}
class OldPhone implements Phone {
call();
sms();
internet(); // old phone에서 지원하지 않는데 구현해야되는 오류가 생김
}
class NewPhone implements Phone {
call();
sms();
internet();
}
// good
interface Call {
call();
}
interface SMS {
sms();
}
interface Internet {
internet();
}
class OldPhone implements Call, SMS {
call();
sms();
}
class NewPhone implements Call, SMS, Internet {
call();
sms();
internet();
}
// bad
class Car {
tire: SnowTire = new SnowTire();
}
class SnowTire {}
// also bad
class Car {
tire: Tire = new SnowTire();
}
interface Tire {}
class SnowTire implements Tire {}
// good : 의존성 주입(Dependency Injection)
class Car {
tire: Tire;
constructor(tire: Tire) {
this.tire = tire;
}
}
interface Tire {}
class SnowTire implements Tire {}
const snowTireCar = new Car(new SnowTire());