Computer-Sience/Etc

[CS] 객체 지향 프로그래밍 (Object-Oriented Programming) / SOLID

dev_ss 2023. 4. 22. 01:13

프로그래밍을 시작하면서, 객체 지향과 절차 지향과 같은 용어에 대하여 많이 접해봤을 것이다.

 

프로그래밍을 하는 관점에서 어떠한 기준을 두고 프로그래밍을 할 지에 관한 것이기에

다소 낯선 개념으로 느껴질 수도 있을 것이다.

 

그중 객체 지향 프로그래밍(OOP)과 그 원칙인 SOLID에 관하여 다루어 볼 것이다.

 

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

객체 지향 프로그래밍은 말 그대로 프로그래밍에서 모든 관점을 객체 중심으로 설계하여 프로그래밍하는 것을 의미하며, 이는 사람이 사물을 하나의 객체로 이해하는 것처럼, 이를 프로그래밍에 도입한 개념이다. 

 

객체 지향 프로그래밍에서 큰 개념은 3가지로 나뉘어서 구분할 수 있다.

 

객체 자체를 의미하는 Object,

객체를 추상화한 청사진을 나타내는 Class,

Class를 통해 생성된 개체를 의미하는 Instance

로 구분하여 볼 수 있다.

 

많은 사람들이 붕어빵과 그 틀을 예시로 하여,

붕어빵을 찍어내는 틀을 Class로 볼 수 있고,

붕어빵이라는 사물을 Object로,

실제 찍어낸 붕어빵들을 각각의 Instance로 볼 수 있다는 것이다.

 

객체 지향 프로그래밍을 지향하는 언어는 대표적으로 Java나 Python이 있고,

특수한 케이스로 Rust나 Scala 등은 개발자의 의도대로 객체 지향으로 개발이 가능하다.

 

1-1. OOP의 특성

  • 상속 : 기존의 클래스를 하위 클래스가 물려받아 코드 중복을 방지하고 코드를 간결하게 유지
  • 추상화 : 상속을 통하여 불필요한 코드를 은닉함으로 깔끔한 코드 설계가 가능
  • 캡슐화 : 클래스를 통한 접근만 가능하게 하여 정보의 은닉과 제한이 가능
  • 다형성 : 상황에 걸맞은 코드를 구현하여 다양한 상황에 적용이 될 코드를 구현이 가능(Overload)

 

이러한 OOP의 개념들을 접했을 때, 직관적으로 이해하고 프로그래밍을 하기는 어려울 것이다.

그렇게 때문에 OOP의 개념들을 잘 지키기 위해서 SOLID라는 원칙이 나오게 되었다.

 

2. SOLID

SOLID는 각각의 알파벳에 따른 원칙을 나타내고 있으며 총 5개의 원칙을 나타낸다.

 

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

클래스(객체)는 하나의 책임(목적/역할)을 지녀야 한다.

 

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

클래스(객체)는 확장에는 개방되어 있어야 하나, 기존의 클래스를 수정에는 폐쇄되어야 한다.

 

3) 리스코프 치환 원칙(Liskov's Substitution Principle)

상속한 클래스(자식 클래스)는 상속된 클래스(부모 클래스)를 교체할 수 있다. 

 

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

사용자는 관련없는 인터페이스에 대한 의존을 강요하지 않아야 한다.

 

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

계층이 높은 모듈/클래스는 낮은 모듈/클래스에 의존하면 안 되고,

세부 사항은 추상화에 의존되어야 한다.

 

얼핏 보면 당연한 원칙이나, 실제로 코드로 구현 시 준수하는데 어려움을 느낄 수 있을 것이다.

객체 지향 프로그래밍 시 항상 의식하여 더 나은 프로그래밍을 할 수 있도록 참고해야 할 것이다.

반응형