객체 지향 프로그래밍은 소프트웨어 개발에서 유지보수가 쉽고 확장 가능한 시스템을 구축하기 위한 강력한 방법론으로 인정받고 있습니다. 객체 지향 설계 원칙은 소프트웨어 시스템을 설계하고 구축할 때 유용한 지침을 제공합니다. 이러한 설계 원칙은 소프트웨어 시스템의 유연성, 재사용성, 확장성을 향상시키는 데 도움이 됩니다.
1. SRP (Single Responsibility Principle)
SRP는 “단일 책임 원칙”을 의미하며, 클래스나 모듈은 하나의 책임만을 가져야 한다는 원칙입니다. 이를 통해 코드의 응집성을 높이고 변경 사항의 파급 효과를 줄일 수 있습니다.
// 예제 코드
typedef struct {
char* name;
int age;
} Person;
void saveToDatabase(Person person) {
// 데이터베이스에 저장하는 로직
}
void printToConsole(Person person) {
// 콘솔에 출력하는 로직
}
2. OCP (Open/Closed Principle)
OCP는 “개방-폐쇄 원칙”으로, 소프트웨어 개체(클래스, 모듈, 함수 등)는 확장에는 열려 있고 수정에는 닫혀 있어야 한다는 원칙입니다. 이를 통해 기존의 코드를 변경하지 않고도 새로운 기능을 추가할 수 있습니다.
3. LSP (Liskov Substitution Principle)
LSP는 “리스코프 치환 원칙”을 나타내며, 하위 타입은 상위 타입에서 대체 가능해야 한다는 원칙입니다. 이를 통해 상속 관계를 효과적으로 활용할 수 있고, 다형성을 지원합니다.
4. ISP (Interface Segregation Principle)
ISP는 “인터페이스 분리 원칙”으로, 클라이언트는 자신이 사용하지 않는 인터페이스에 의존하지 않아야 한다는 원칙입니다. 인터페이스를 작고 명확하게 만들어서 클라이언트가 필요한 메서드만 이용할 수 있게 합니다.
5. DIP (Dependency Inversion Pinciple)
DIP는 “의존성 역전 원칙”으로, 고수준 모듈은 저수준 모듈에 의존해서는 안 되며, 둘 다 추상화에 의존해야 한다는 원칙입니다. 이를 통해 소스 코드 간의 의존성을 줄이고 유연한 구조를 유지할 수 있습니다.
객체 지향 설계 원칙은 소프트웨어 시스템을 유연하고 확장 가능하게 만드는 데 중요한 역할을 합니다. 이러한 원칙을 준수함으로써 더 나은 구조의 소프트웨어를 개발할 수 있습니다.
참조:
- https://dzone.com/articles/solid-principles-in-c-programming-language
- https://www.inflearn.com/course/%EC%9E%90%EB%B0%94-java-coding-%EA%B0%9C%EB%B0%9C/lecture/69331