[OOP] 객체 지향 설계의 5가지 원칙 feat. SOLID

박상군·2024년 10월 18일
1

Software

목록 보기
8/9
post-thumbnail

기본기를 탄탄하게~

우선 OOP(Object-Oriented Programming, 객체 지향 프로그래밍)이란, 프로그램을 여러 개의 객체(object)로 나누어 이를 상호 작용하게 하여 설계하고 구현하는 프로그래밍 패러다임입니다. 객체는 데이터를 저장하는 속성(attribute)과 그 데이터를 처리하는 메서드(method)로 구성됩니다. OOP의 핵심 개념은 크게 다음 네 가지로 요약할 수 있습니다.

  • 캡슐화(Encapsulation): 객체의 상태(데이터)를 외부에서 직접 접근하지 못하고, 메서드를 통해서만 접근할 수 있게 하는 것. 이를 통해 데이터를 보호하고, 객체의 내부 구현을 숨길 수 있다.
  • 상속(Inheritance): 기존 클래스(부모 클래스)의 속성과 메서드를 새로운 클래스(자식 클래스)가 물려받아 사용할 수 있게 하는 개념. 이를 통해 코드의 재사용성을 높일 수 있다.
  • 다형성(Polymorphism): 같은 이름의 메서드가 서로 다른 클래스에서 다르게 동작할 수 있는 성질을 의미한다. 즉, 하나의 인터페이스로 여러 가지 다른 형태의 객체를 처리할 수 있게 한다.
  • 추상화(Abstraction): 복잡한 시스템을 단순하게 표현하여 불필요한 세부사항을 감추고, 중요한 부분만 남기는 개념이다. 이를 통해 프로그램의 복잡성을 줄이고 유지보수성을 높일 수 있다.

그렇다면 SOLID 원칙이란?

SOLID 원칙은 객체 지향 프로그래밍(OOP)에서 소프트웨어 설계를 보다 유연하고 유지보수하기 쉽게 만들기 위한 다섯 가지 주요 설계 원칙이다. 이 원칙들은 소프트웨어 개발 시 의존성을 최소화하고, 확장성재사용성을 높이는 데 초점을 맞춘다. SOLID는 다음과 같은 다섯 가지 원칙의 첫 글자를 따서 만들어진 용어이다.

1. 단일 책임 원칙(Single Responsibility Principle, SRP)

클래스는 하나의 책임만 가져야 하며, 클래스가 변경되는 이유는 하나뿐이어야 한다. 즉, 하나의 클래스는 하나의 기능이나 역할만을 수행해야 하며, 그 기능과 관련된 변경 사항만 있을 때 수정되어야 한다.

2. 개방-폐쇄 원칙(Open-Closed Principle, OCP)

소프트웨어 요소는 확장에는 열려 있어야 하고, 변경에는 닫혀 있어야 한다. 즉, 새로운 기능을 추가할 때 기존 코드를 수정하는 대신, 기존 클래스나 모듈의 동작을 확장하는 방식으로 변경해야 한다.

3. 리스코프 치환 원칙(Liskov Substitution Principle, LSP)

자식 클래스는 언제나 부모 클래스를 대체할 수 있어야 한다. 자식 클래스가 부모 클래스의 기능을 상속받는 경우, 부모 클래스의 동작과 일관되게 동작해야 하며, 이를 위반하면 객체 지향 설계에서의 다형성(polymorphism)이 깨지게 된다.

4. 인터페이스 분리 원칙(Interface Segregation Principle, ISP)

클라이언트는 자신이 사용하지 않는 인터페이스에 의존하지 않아야 한다. 즉, 큰 인터페이스보다는 더 작은 인터페이스들로 분리해서, 클라이언트가 불필요한 메서드나 의존성을 가지지 않도록 해야 한다.

5. 의존성 역전 원칙(Dependency Inversion Principle, DIP)

고수준 모듈(상위 수준의 정책을 결정하는 모듈)은 저수준 모듈(구체적인 구현 세부사항)에게 의존하지 말아야 하며, 둘 다 추상화된 인터페이스에 의존해야 한다. 이를 통해 상위와 하위 모듈 간의 결합도를 낮추고, 코드의 유연성과 재사용성을 높일 수 있다.


결론

위의 5가지 원칙들이 종합적으로 말하고자 하는 핵심은 "의존성 최소화, 확장성과 재사용성을 높인다."추상화다형성에 초점을 두고 있다.

0개의 댓글