그림으로 이해하는 SOLID

SOLID는 객체지향을 공부하다보면 한번 쯤 듣게 되는 용어입니다. 하지만 다시 정리하지 않으면 쉽게 까먹기때문에 편하게 그림으로 쓱 보기만해도 다시 생각나게 하기위해서 집필하게 되었습니다.

💡 SRP(single responsibility princple)

단일 책임 원칙이라고 말하며 한 클래스는 하나의 책임만 가져야 한다는 의미입니다.
자동차의 핸들 객체가 하나 있다고 가정해봅시다. 핸들은 자동차의 방향만 결정할 뿐 다른 역할은 하지 않습니다.

만약 핸들에 엑셀 브레이크 같이 다른 기능이 있었다면 SRP 를 잘 지키지 않은겁니다.


💡 OCP(Open/Closed Principle)

확장에는 열려있으나 변경에는 닫혀있어야 한다는 의미입니다.
쉽게 이해하자면 역할(인터페이스)과 구현(클래스)을 나누어 구현을 통해 새로운 기능을 추가하는 것을 말합니다(다형성)

새로운 기능이 추가가 된다면 기존 마우스에 추가가 하는게 아닌 새로운 마우스에 적용하는걸 생각하시면 됩니다.

interface mouse {
	void leftClick();
    void rightClick();
    void midClick();
}

class MxVerticalMouse implements mouse {
	public void leftClick() {
    	...
    }
    public void rightClick() {
    	...
    }
    public void midClick() {
    	...
    }
}

💡 LSP (Liskov substitution principle)

리스코프의 치환 원칙이라고 부릅니다.
우리가 자동차를 예를 들어 인터페이스를 구현했을때 엑셀 기능이 있습니다. 우리는 당연히 엑셀을 밟으면 앞으로 나가야지 생각하는 것처럼 정해진 규약을 따라야한다는 원칙입니다.


💡 ISP (Interface segregation principle)

인터페이스 분리 원칙이라고 부릅니다.
하나의 인터페이스보다 여러개의 인터페이스가 낫다고 하는 걸 ISP 라고 합니다.
즉, 컴퓨터가 있으면 컴퓨터 하나의 인터페이스보다 CPU, 메모리 등등 세부적인 인터페이스가 있는게 더 좋습니다.


💡 DIP (Dependency inversion principle)

의존관계 역전 원칙이라고 부릅니다.
프로그래머는 추상화에 의존해야지 구체화에 의존하면 안된다 라는 말이 있습니다. 쉽게 이야기해서 구현 클래스에 의존하지 말고, 인터페이스에 의존하라는 의미입니다.

interface Actor {
	...
}
class 원빈 implements Actor{
	...
}
class 공유 implements Actor{
	...
}

public static void main(String[] args) {
	Actor actor; // <- 인터페이스에 의존
    Actor actor = new 공유() // <- 구현체에 의존했기때문에 DIP 위반
}


인터페이스에 의존을 했다면 공유 대신 원빈이라는 배우를 쓸수 있었지만 위 그림처럼 구현에 의존을 하게 되면 공유가 무대에 오르지 못하게 됩니다.

좋은 웹페이지 즐겨찾기