SOLID

2023. 2. 12. 16:50카테고리 없음

-단일책임 원칙

"어떤 클래스를 변경해야 하는 이유는 오직 하나 뿐이여야 한다"

 ex) 남자 사람이라는 클래스에 안에 많은 메소드들이 있다 ( 남자친구, 아들,군인, 직장인) 등 

그 메서드들을 다 때려 박아서 구현을하게 될시 한 책임의 변경에서 다른 책임의 변경으로 의 연쇄 작용이 발생한다.

그러므로 한책임만을 가져서 이러한 연쇄 작용으로 부터 자유로울 수 있게 된다 . 이는 곧 유지보수성에 좋다는 것을 의미한다.

 

-개방폐쇄 원칙(OCP)

"자신은 확장에는 열려 있고 주변 변화에는 닫혀 있어야 한다"

ex)자동차는 타이어를 필요로 한다. 타이어 종류는 아메리칸 타이어 , 코리아 타이어가 있다 근데 이둘은 타이어로서 역할은 같지만 사용하는 방식이  약간씩 조금 차이가 있다면 자동차는 타이어종류를 바꿀때 마다 영향을 받을 수 밖에 없다.

그래서 자동차 와 타이어 사이에 인터페이스를 두어서 인터페이스를 통해서 아메리칸 타이어, 코리아 타이어를 바꿀 수있는 확장성은 좋지만 자동차는 타이어가 변경되어도 인터페이스를 통해서 사용방법만 가져오기에 (캡슐화, 추상화) 하기에 

타이어가 변경되어도 자신의 코드에 변경이 되지는 않는다.

즉 자동차는 타이어를 사용하기만 하면 되지 굳이 어떻게 만들어졌고 어떻게 처리하는 것 까지는 알 필요가 없다.

변경을 위한 비용은 줄이고 확장을 위한 비용은 극대화 한다. 기존구성 요소는 수정이 일어나지 말아야 하며 기존 구성 요소를 쉽게 확장해서 재사용 가능하다. 

 

그러니 전역변수를 사용하는 것은 개방폐쇄 원칙에 위배 한다 , 언제 어디서 바뀌었는지 추적하기 쉽지 않다.

 

 

-리스코프 치환 원칙

"서브 타입은 언제나 자신의 기반 타입으로 교체 할 수 있어야한다"

ex) 고래는 포유류 이며 동물에 한 종류이다.  kind is a  여야 한다. 할아버지-> 아버지-> 딸 이런식의 상속은 아니다.

고래는 포유류 이다.(o)/ 할아버지는 아버지이다.(x)

인터페이스의 규약을 잘 지켜야 하며 

상위 타입 객체를 하위 타입 객체로 치환해도 정상적으로 동작해야 한다.

상속을 통한 재사용은 기반 클래스와 서브 클래스 사이에 is-a 관계가 있을 경우로만 제한한다.

 

-인터페이스 분리 원칙(ISP)

"클라이언트는 자신이 사용하지 않는  메서드에 의존 관계를 맺으면 안된다 "

단일책임 원칙가 비슷하다. 

범용 인터페이스 하나 보다는 특정 클라이언트를 위한 여러개의 인터페이스 분리가 더 좋다.

하지만 인터페이스는 (정책)이다 변하면 안된다, 변하게 될시 사용자코드( 클라이언트코드) 에 변화가 야기 되서는 안된다.

 

 

-의존역전원칙

"고차원모듈은 저차원모듈에 의존하면 안된다 "

위에  개방폐쇄 원칙과 비슷하다. 고급 모듈( 자동차)는 저급 모듈( 타이어) 에 의존한다 .

이것은 의존성( 결합도)를 낮추기위해 중간에 추상화를 두어서 의존을 역전 시킨다.

 

객체지향 개발 5대 원리: SOLID (nextree.co.kr)