1 minute read

객체지향 프로그래밍

SOLID

SRP

책임이라는 것은 역할에 따라 부여받은 기대되는 행동이다.

하나의 클래스에는 하나의 책임을 수행하는것이 결국 이상적이지만, 우리가 어떠한 행동을 ‘하나’로 규정짓느냐 또는 ‘하나’라고 부르느냐는 각 프로그래머 자신의 규정이 의미가있다.

OCP

확장에는 열려있지만 변경에는 폐쇄적이어야한다.

확장에 열려있다는것은 철학적으로 생각하면 그 프로그램의 진리 또는 진의에 가까운것을 하나의 인터페이스로 규정하고 그에따른 구현체를 점차점차 늘려나간다는 것이다. 이 모든것은 유지보수성을 위해서이기도 하고, 프로그램의 일관성을 유지하기위해서기도 하다. 이런 의미를 위해서는 논리적으로 어떤것의 의미를 중요하게 생각할 것이냐하는 문제에 달려있다.

LSP

리스코프 치환원칙은 잘 만든 마트료시카이다.

마트료시카의 형태나 기능은 그것을 까기전에도 동일하고 까고나서도 동일하다. 우리가 만약 마트료시카를 안다고 한시점에서 마트료시카라는 인형을 열어제낄때, 그속에는 똑같이 생긴 조그마한 마트료시카가 존재할 것이라고 기대하는 부분이 바로 그렇다.

ISP

클라이언트는 원하는 것만 쓸수 있어야한다.

우리가 노력해서 맛집을 간다손치고, 그 맛집에 가면 항상 공통적인 특징이 있다. 기대했던 음식이 맛있다! 라는 공통점을 지니고 있다. 맛집의 요소가 정갈한 분위기, 깨끗한 위생, 친절한 종업원등 여러요소가 될수있지만, 맛집은 기본적으로 음식이 맛있어야 맛집으로 쳐준다. 만약에 우리가 어떤 서비스를 사용한다고 했을때, 의도치않은 메소드에 종속이 된다면 위 예처럼 시키지 않은 메뉴가 결제금액에 포함되어있어서 맛집으로 생각할수 없게 된다는 점이다.

DIP

관심사는 분리해야한다.

물론 관심사의 분리와 크게 상이한 개념은 아니지만 비슷한 개념이긴 하다. 우리가 만약에 커피를 마실때, 카페라떼하고 카페오레중 둘중 하나를마신다고 가정을 해보자, 카페라떼던 카페오레던 우리가 생각했던 사고의 흐름은 ‘커피를 뭐마실까’이다. ‘카페라떼를 마실까 (X)-> 카페오래를 마실까’가 아니란 이야기이다. 더불어서 만약에 후자의 생각을 한다치더라도, 우리는 어떠한 개념을 추구함에있어 상위개념에서 하위개념으로 간다는건 기본적인 상식이다. 그렇지않더라면 우리는 아메리카노에 투샷 에스프레소를 집어넣었으니, 아메리카노랑 에스프레소는 서로 의존한다는 결론을 내릴수도 있을테니..

Categories:

Updated:

Leave a comment