본문 바로가기
Computer Science

[CS] 객체 지향 프로그래밍(OOP) 5원칙

by jyc_ 2025. 1. 9.

1. Single Responsibility Principle [단일 책임 원칙]

  • 하나의 클래스는 하나의 기능(책임)만을 가져야 한다.
  • 클래스를 수정할 때는 그 이유가 하나여야 한다. (다른 코드에 영향을 미치기 때문)

 

2. Open-Closed Principle [개방 폐쇄 원칙]

  • 소프트웨어 요소는 확장에는 개방되어 있어야 하지만, 변경에는 폐쇄적이어야 한다.
  • 즉, 기존 코드를 변경하지 않고 기능을 수정하거나 추가할 수 있도록 설계해야 한다.
  • 인터페이스를 구현한 새로운 클래스를 하나 만들어서 새로운 기능을 구현한다.
  • 기존 코드를 수정하게 된다면 재사용성, 유지보수성 등의 활용이 힘들어지기 때문이다.

 

3. Liskov Substitution Principle [리스코프 치환 원칙]

  • 하위 타입 객체는 상위 타입 객체에서 가능한 행위를 수행할 수 있어야 한다.
  • 즉, 상위 타입 객체를 하위 타입 객체로 대체하여도 동작하여야 한다.
  • 하위 클래스는 인터페이스의 규약을 모두 만족해야 한다.
  • 상속 관계에서는 꼭 일반화 관계(Is - A)가 성립해야 하며, 상속 관계가 아닌 클래스들을 상속 관계로 설정하면 리스코프 치환 원칙에 위배된다.

 

4. Interface Segregation Principle [인터페이스 분리 원칙]

  • 클라이언트는 자신이 사용하는 메소드에만 의존해야 한다.
  • 특정 클라이언트를 위한 여러 인터페이스가, 범용 인터페이스 한 개 보다 낫다.
  • 인터페이스는 클라이언트를 기준으로 잘게 분리되어야 한다.
  • 즉, 세부적인 인터페이스로 분리하여야 한다.

 

5. Dependency Inversion Principle [의존 역전 원칙]

  • 구체화가 아닌 추상화에 의존하여야 한다.
  • 변하기 쉬운 구체적인 것 보다, 변하기 어려운 추상적인 것에 의존해야 한다.
  • 즉, 구현 클래스에 의존하지 않고, 인터페이스에 의존해야 한다.