설계

객체 지향 프로그래밍

Sigfriede 2023. 12. 7. 00:10

  객체 지향 프로그래밍(Object-Oriented Programming, OOP)이란, 프로그램을 객체의 모임으로 구성하여 객체 간 상호작용을 통해 개발하고 구현하는 방법론 중 하나이다. 주요 언어로는 Java, C++, Python, Ruby 등이 있다. 절차 지향 프로그래밍과 반대된다.

  객체 지향 프로그래밍의 장점으로는 소프트웨어의 재사용 및 확장이 용이하여 고품질의 소프트웨어를 빠르게 개발할 수 있고 유지보수가 쉽다. 복잡한 구조를 단계적·계층적으로 표현하고, 멀티미디어 데이터 및 병렬 처리를 지원한다. 현실 세계를 모형화하므로 사용자와 개발자가 쉽게 이해할 수 있다.

  객체 지향 프로그래밍의 특징으로는 캡슐화(Encapsulation), 상속(Inheritance), 다형성(Polymorphism), 추상화(Abstraction)가 있다.

  또 객체 지향 설계 원칙은 시스템 변경이나 확장에 유연한 시스템을 설계하기 위해 지켜야 할 다섯 가지 원칙으로, 다섯 가지 원칙의 앞 글자를 따 SOLID 원칙이라고도 불린다.

 

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

특징 의미 장점
캡슐화
(Encapsulation)
데이터와 데이터를 처리하는 함수를 하나로 묶는 것 - 캡슐화된 객체는 재사용이 용이하고, 인터페이스를 제외한 세부 내용이 은폐되어 외부에서의 접근이 제한적이기 때문에 외부 모듈의 변경으로 인한 파급 효과가 적다.

- 객체들 간 메시지를 주고받을 때 상대 객체의 세부 내용은 알 필요가 없으므로 인터페이스가 단순해지고, 객체간의 결합도가 낮아진다.
상속
(Inheritance)
이미 정의된 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것 - 상속을 이용하면 하위 클래스는 상위 클래스의 모든 속성과 연산을 자신의 클래스 내에서 다시 정의하지 않고서도 즉시 자신의 속성으로 사용할 수 있다.

- 하위 클래스는 상위 클래스로부터 상속받은 속성과 연산 외에 새로운 속성과 연산을 첨가하여 사용할 수 있다.


- 상위 클래스의 속성과 연산을 하위 클래스가 사용할 수 있기 때문에 객체와 클래스의 재사용을 높인다.
다형성
(Polymorphism)
메시지에 의해 객체가 연산을 수행하게 될 때 하나의 메시지에 대해 각각의 객체가 가지고 있는 고유한 방법으로 응답할 수 있는 것 - 객체는 동일한 메소드명을 사용하며 같은 의미의 응답을 한다.

- 응용 프로그램 상에서 하나의 함수나 연산자가 두 개 이상의 서로 다른 클래스의 인스턴스들을 같은 클래스에 속한 인스턴스처럼 수행할 수 있도록 한다.
추상화
(Abstraction)
개념을 단순화하거나 일반화하여 중요한 부분을 강조하는 것 - 여러 객체 사이에서 공통된 특징을 식별하고 하나의 일반적인 개념으로 나타낸다. 

 

 

객체 지향 설계 원칙(SOLID 원칙)

단일 책임 원칙
(Single Responsibility Principle,
SRP)
한 클래스는 하나의 책임만 가져야 한다.
개방-폐쇄 원칙
(Open-Closed Principle,
OCP)
소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.
리스코프 치환 원칙
(Liskov Substitution Principle,
LSP)
프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.
인터페이스 분리 원칙
(Interface Segregation Principle,
ISP)
특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.
의존 역전 원칙
(Dependency Inversion Principle,
DIP)
프로그래머는 추상화에 의존해야지, 구체화에 의존하면 안된다.

 

  카테고리 분류가 애매하지만 설계에 두면 얼추 맞지 않을까 싶어 우선 여기에 작성하고자 한다. 추후 다른 카테고리로 변경될 수도 있다.