[CS] OOP 5가지 설계 기본 원칙 - SOLID

륜재·2023년 1월 3일
0

1. 객체지향 프로그래밍 (Object-Oriented Programming,OOP)

객체지향 프로그래밍은 컴퓨터 프로그래밍 패러다임 중 하나이다. 객체지향 프로그래밍은 프로그램을 명령어의 목록으로 보는 시각에서 벗어나, 여러개의 독립된 단위인 '객체'들의 모임으로 본다. 객체들의 집합으로 프로그램의 상호작용을 표현하며 데이터를 객체로 귀급하여 객체 내부에 선언된 메서드를 활용한다. 하나의 프로그램을 위한 인스턴스를 객체에 모아놓기 때문에 응집력(Cohession)은 높지만, 각 객체간의 독립성이 높아 결합력(Coupling)은 낮다. 따라서, 객체지향 프로그래밍은 절차형 프로그래밍에 비하여 재사용성이 높고, 유지보수가 쉬운 편이다.

2. 객체지향 프로그래밍의 특징

1) 추상화(abstraction)

추상화는 불필요한 정보를 숨기고 핵심적인 정보만을 추려내 프로그램을 간단하게 만드는 것이다. 추상화된 자료형을 일반적으로 클래스라고 표현하고 클래스의 인스턴스를 객체라고 한다. 추상화된 클래스는 새로운 객체를 추가할 때 필요한 특성만을 추가하면 되기 때문에 편리하다.

2) 캡슐화(encapsulation)

캡슐화는 객체의 속성과 메서드를 하나로 묶고, 일부를 외부에 감추어 은닉하는 것이다. 캡슐화를 통해 객체 간의 독립성을 높혀, 한 곳에서 일어나는 변화가 다른 곳에 미치는 사이드 이펙트를 줄인다. 이를 통해 객체지향 프로그래밍은 높은 응집력과 낮은 결합력을 유지할 수 있다.

3) 상속성(inheritance)

새로운 클래스가 상위 클래스의 특성을 이어받아 재사용하거나 추가, 확장하는 것이다. 코드의 재사용성과 유지 보수성 측면에서 중요하다.

4) 다형성(polymorphism)

하나의 메서드나 클래스가 다양한 방법으로 동작하는 것으로, 오버로딩과 오버라이딩이 있다.

오버로딩(overloading) : 오버로딩은 같은 이름을 가진 메서드를 여러개 두는 것이다. 매개 변수의 개수나 자료형을 다르게 하여 구분한다.
오버라이딩(overriding) : 상위 클래스가 가지고 있는 메서드를 하위 메서드가 재정의해서 사용하는 것이다.

3. 객체지향 프로그래밍의 5가지 설계 기본 원칙 - SOLID

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

모든 클래스는 각각 하나의 책임을 가져야 한다. 하나의 클래스가 여러개의 책임을 갖는다면, 한 책임의 변경에 의해 다른 책임이 수정되어야 할 수 있다. 따라서, 유지보수성을 높이기 위해 하나의 클래스는 하나의 책임을 가져야 한다.

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

유지 보수 사항이 생긴다면 코드를 쉽게 확장할 수 있어야 하고, 수정할 때는 닫혀있어야 한다. 기존의 코드를 수정하지 않고 새로운 기능을 추가할 수 있어야 한다.

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

프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다. 즉, 부모 객체와 자식 객체를 바꾸어도 문제가 없어야 한다.

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

클라이언트는 자신이 사용하는 메서드에만 의존해야 한다. 따라서, 하나의 클래스는 하나의 일반적인 인터페이스보다 구체적인 여러개의 인터페이스를 만들어야 한다.

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

자신보다 변하기 쉬운 것에 의존하던 것을 추상화된 인터페이스나 상위 클래스를 두어 변하기 쉬운 것의 변화에 영향받지 않게 한다. 즉, 상대적으로 변화기 어려운 것을 상위 계층에 두어 하위 계층의 변화로 부터 자유로워야 한다.

참고자료

  1. https://ko.wikipedia.org/wiki/객체_지향_프로그래밍
  2. Blog - 해로, 객체지향 프로그래밍 제대로 이해하기
    https://velog.io/@haero_kim/객체지향-프로그래밍-이해하기
  3. 주홍철, 면접을 위한 CS 전공지식 노트, 길벗출판사, p41-46

0개의 댓글