Search
Duplicate

객체지향 개발 5대원리(SOLID)

간단소개
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
CS
Scrap
태그
Object Oriented Programming
9 more properties
SOLID 객체지향 5대 원칙그냥 매번 달달 외우는식으로 공부를 했었는데, 개발을 진행하며 해당 원리들을 어떻게 지키는지 실습하고나니, 제대로 이해가되어 다시 한 번 정리해보았다. Single Responsibility Principle 단일 책임 원칙 하나의 클래스는 하나의 책임만을 가져야한다. Open - Closed Principle 개방 - 폐쇄 원칙 확장에 열려있어야하고, 변경에 닫혀있어야한다. 이 원칙과 아래에 나올 DIP 원칙이 가장 중요하다고 생각이 든다. 인터페이스 구현 -> 구현체 적용 과 같은 방식으로 개발을하게 되는데, 인터페이스를 잘 구현해 두면 따로 인터페이스 수정 없이 구현체를 바꾸는것으로 다양하게 개발을 할 수 있게 된다. 해당 원칙이 지켜지지 않으면 인터페이스를 계속해서 변경해야하므로 클라이언트 코드를 자주 수정하는일이 벌어진다. Liskov Substituion Principle 리스코프 치환 원칙 상위 객체를 하위 타입의 객체로 바꾸어도, 프로그램의 실행에는 문제가 없어야한다.당연한 소리인것 같다. 결국 하위 타입의 객체를 상위 객체를 상속해 만든 클래스의 객체이기 때문에, 추가적인 메소드가 있을 뿐 상위 클래스의 메소드들도 정상적으로 작동해야하기 때문. Interface Segregation Principle 인터페이스 분리 원칙 하나의 범용 인터페이스보다, 특정 클라이언트를 위한 여러개의 인터페이스가 더 낫다.쉽게 말해서, 하나의 인터페이스가 여러 타입의 기능들을 모두 갖고있어서는 안 된다. 자동차에대한 인터페이스들을 만든다고 생각해보면, 운전 인터페이스 + 정비 인터페이스와 같이 각각의 역할에따라 인터페이스들을 나누는것이 자동차 인터페이스 하나로 사용하는것보다 더 좋다.이렇게 인터페이스들을 따로 나누어 놓게 되면, 사용자를 정비사/운전자와 같이 역할을 분리해서 저장 할 수 있고 이후에 기능이 늘어 코드를 수정해야하는 경우가 생기면, 해당 부분들만 건드리면 되기 때문에 운용도 더 편해진다. ++ 인터페이스의 역할이 명확해지고, 대체 가능성이 높아진다. Dependency Inversion Principle 의존관계 역전 원칙 프로그래머는 추상화에 의존해야하고, 구체화에 의존하면 안 된다.구현체는 언제든지 바뀔 수 있으므로, 해당 구현체를 보고 개발을하면 안 된다. 같은 기능을 하는 구현체들을 보고 개발을 하는것이 아닌, 인터페이스를 기준으로 개발을 진행해야 후에 다른 구현체로 바뀌었을 때에도 정상적으로 동작 할 것이다.다형성만으로는 개방 - 폐쇄 원칙과 의존관계 역전 원칙을 지킬 수 없다. 인터페이스를 만들어두고 구현체를 선택하는방식으로 다형성을 지켜도, 결국 해당 인터페이스를 구현체와 함께 가져다 쓰는 부분에서 코드로 구현체를 지정하기 때문에 해당 원칙들을 지킬 수 없다. 동적으로 컨테이너에서 구현체를 선택하는 방식으로 구현해야 한다. Spring에서는 AppConfig 클래스와 같이 객체를 생성하고 할당해주는 클래스는 따로 만들어 구현이 가능하다.
Plain Text
복사
출처:
[Tempo:티스토리]