SOLID 원칙 5

[12] 소프트웨어 디자인 원칙들 - SOLID 원칙들 - (D)

출처 : 디자인 패턴에 뛰어들기 - 알렉산더 슈베츠 도서D (Dependency Inversion Principle, 의존성 역전 원칙)상위 계층 클래스들은 하위 계층 클래스들에 직접 의존하지 않고, 둘 다 추상화에 의존해야 한다.추상화는 세부 정보에 의존해서는 안 되며, 세부 정보는 추상화에 의존해야 한다.소프트웨어 디자인 시 일반적인 클래스 분류하위 계층 클래스: 기본 작업(디스크 작업, 네트워크 통신, 데이터베이스 연결 등)을 구현한다.상위 계층 클래스: 복잡한 비즈니스 로직을 처리하며, 하위 계층 클래스들을 활용하여 동작한다.문제 상황 및 제안종종 하위 계층 클래스들을 먼저 디자인하고, 이후 상위 계층 클래스들을 디자인하기 시작한다.이는 시스템의 프로토타입을 개발할 때 흔한 상황이다.그러나 이런 ..

[11] 소프트웨어 디자인 원칙들 - SOLID 원칙들 - (I)

출처 : 디자인 패턴에 뛰어들기 - 알렉산더 슈베츠 도서I (Interface Segregation Principle, 인터페이스 분리 원칙)클라이언트들은 자신이 사용하지 않는 메서드들에 의존하도록 강요되어서는 안된다.클라이언트 클래스가 불필요한 행동을 구현할 필요가 없도록 당신의 인터페이스를 적당히 작게 만들어야한다.목적클라이언트가 자신이 사용하지 않는 메서드에 의존하지 않도록 하는 디자인 원칙이다.불필요한 의존성을 줄이고 클라이언트 클래스가 불필요한 행동을 구현하지 않도록 한다.주요 원칙클라이언트 클래스는 자신에게 필요한 메서드만을 의존해야 한다.따라서 인터페이스는 클라이언트에게 필요한 기능만을 제공해야 한다."뚱뚱한" 인터페이스보다는 세분화된 인터페이스를 사용해야 한다.각 인터페이스는 특정 기능에 ..

[10] 소프트웨어 디자인 원칙들 - SOLID 원칙들 - (L)

출처 : 디자인 패턴에 뛰어들기 - 알렉산더 슈베츠 도서L (Liskov Substitution Principle, 리스코프 치환 원칙)클래스를 확장할 때, 자식 클래스의 객체들을 부모 클래스의 객체들로 교체(치환)할 수 있어야 합니다. 이는 자식 클래스가 부모 클래스의 행동과 호환되어야 함을 의미한다.목적자식 클래스가 부모 클래스와 호환되도록 하여 기존 클라이언트 코드가 자식 클래스와도 잘 작동하게 하는 것이다.특히 라이브러리와 프레임워크 개발 시 중요하다.규칙메서드 매개변수의 유형자식 클래스의 메서드 매개변수는 부모 클래스의 것보다 더 추상적이거나 같은 수준이어야 한다.예시:좋은 코드: feed(Animal c)는 feed(Cat c)를 오버라이드하여 모든 동물에게 먹이를 줄 수 있다.나쁜 코드: f..

[9] 소프트웨어 디자인 원칙들 - SOLID 원칙들 - (O)

출처 : 디자인 패턴에 뛰어들기 - 알렉산더 슈베츠 도서O (Open/Closed Principle, 개방/폐쇄 원칙)클래스는 확장에는 열려있어야 하지만 변경에는 닫혀 있어야 한다.목적새로운 기능을 구현할 때 기존 코드가 깨지지 않도록 해야한다.설명확장에 개방(Open): 자식 클래스를 생성하거나, 기초 행동을 오버라이드하고 새로운 메서드나 필드를 추가할 수 있어야 한다.변경에 폐쇄(Closed): 클래스의 인터페이스가 명확하게 정의되어 있고, 미래에 변경되지 않아야 한다.클래스는 확장을 위해 개방됨과 동시에 변경에 대해 폐쇄될 수 있다.이미 개발, 테스트, 검토를 마친 클래스의 코드를 직접 변경하는 대신, 자식 클래스를 생성해 원래 클래스의 일부 동작을 오버라이드하면 기존 코드의 안정성을 유지하면서 새..

[8] 소프트웨어 디자인 원칙들 - SOLID 원칙들 - (S)

출처 : 디자인 패턴에 뛰어들기 - 알렉산더 슈베츠 도서SOLID 원칙들기본 디자인 원칙을 배웠으므로 이제 일반적으로 SOLID 원칙들이라고 알려진 5가지 원칙을 살펴본다.로버트 마틴은 자신의 책 『소프트웨어 개발의 지혜: 원칙, 디자인 패턴, 실천방법 6』에서 이 5가지 원칙들을 소개하였다.(참고용)SOLID는 소프트웨어 디자인을 보다 이해하기 쉽고 유연하며 유지 관리할 수 있도록 만드는 5가지 설계 원칙들에 대한 연상 기호이다.이러한 원칙들을 아무 생각없이 적용하면 득보다 실이 더 많을 수 있다.프로그램이 필요 이상으로 복잡해질 수 있다.이 모든 원칙이 동시에 적용되는 성공적인 소프트웨어 제품이 있는지도 의심스러울 수 있다.이러한 원칙들을 적용하기 위해 노력하는 것도 좋지만 항상 실용적이려고 노력해야..