IT 개념 정리

[프로그래밍 패러다임] 객체 지향 프로그래밍

쫑인스 2021. 10. 9. 18:09

포스팅 목적

프로그래밍 패러다임 중 객제 지향이 무엇인지 정의하고, 객체 지향의 특징과 5원칙, 객체 지향 프로그래밍의 장단점에 대하여 알아보겠습니다. 

 

객체 지향이란?

객체 지향 프로그래밍(Object-Oriented Programming, OOP) 은 컴퓨터 프로그래밍의 패러다임 중 하나입니다. 객체 지향 프로그래밍은 프로그램을 상태(state)와 행위(behave)로 이루어진 객체라는 기본 단위로 나누고, 이 객체들간의 상호 작용을 통해 프로그램을 설계하고 개발하는 것 입니다.

객체 지향은 절차적 프로그래밍과 상반되는 개념은 아니며 아래와 같은 객체 지향의 특징이 드러나야 합니다. 객체 지향이라고 할 수 있습니다. 

 

객체 지향의 특징

1. 캡슐화 (Encapsulation)

캡슐화는 데이터(속성)와 데이터를 처리하는 함수를 하나로 묶은 것을 의미합니다.

  • 캡슐화된 객체의 세부 내용이 외부에 은폐(정보 은닉)되어, 변경이 발생할 때 오류의 파급 효과가 적습니다.
  • 캡슐화된 객체들은 재사용이 용이합니다.
  • 객체들 간의 메시지를 주고받을 떄 각 객체의 세부 내용은 알 필요가 없으므로 인터페이스가 단순해지고, 객체간의 결합도가 낮아집니다.

 

2. 추상화 (Abstraction)

추상화는 풀필요한 부분을 생략하고 객체의 속성 중 가장 중요한 것에만 중점을 두어 개략화하는것, 즉 모델화를 하는 것입니다.

  • 인간이 복잡한 문제를 다루는 데 가장 기본이 되는 방법으로, 완전한 시스템을 구축하기전에 그 시스템과 유사한 모델을 만들어 여러가지 요인들을 테스트할 수 있습니다.
  • 추상화는 최소의 비용으로 실제 상황에 대처할 수 있고, 시스템의 구조 및 구성을 가시적으로 볼수있습니다.

 

3. 상속성 (Inheritance)

상속성은 이미 정의된 상위 클래스(부모 클래스)의 모든 속성과 연산을 하위 클래스가 물려받는것을 의미합니다.

  • 상속성을 이용하면 하위 클래스는 상위 클래스의 모든 속성과 연산을 자신의 클래스 내에서 다시 정의하지 않고서도 즉시 자신의 속성으로 사용할 수 있습니다.
  • 하위 클래스는 상위 클래스로부터 상속받은 속성과 연산 외에 새로운 속성과 연산을 첨가하여 사용할 수 있습니다.
  • 상위 클래스의 속성과 연산을 하위 클래스가 공유할 수 있기 때문에 객체와 클래스의 재사용, 즉 소프트웨어 재사용을 증대시키는 중요한 개념이 됩니다.

 

4. 다형성 (Polymorphism)

다형성은 메시지에 의해 객체(클래스)가 연산을 수행하게 될 때 하나의 메시지에 대해 각 객체(클래스)가 가지고 있는 고유한 방법9특성)으로 응답할 수 있는 능력을 의미합니다.

  • 객체(클래스)들은 동일한 메소드명을 사용하며 같은 의미의 응답을 합니다.
  • 응용 프로그램 상에서 하나의 함수나 연산자가 두개 이상의 서로 다른 클래스의 인스턴스들을 같은 클래스에 속한 인스턴스처럼 수행할 수 있도록 하는것을 말합니다.

 

객체 지향의 5원칙 (SOLID)

SOLID란 로버트 마틴이 2000년대 초에 명명한 객체 지향 프로그래밍의 다섯 가지 기본 원칙을 마이클 페더스가 원칙의 앞 글자를 따서 다시 SOLID라는 이름으로 소개한 것입니다.

  • 단일 책임 원칙 (Single responsibility principle, SRP)
    : 모든 서비스는 단 하나의 책임을 수행하는데 집중하는 것으로 응집도는 높이고 결합도는 낮추는 것을 말합니다.

  • 개방 폐쇄 원칙 (Open/closed principle, OCP)
    : 확장에는 열려있고, 변경에는 닫혀 있어야 합니다. 재사용성을 높이는 것이며 추상화와 다형성을 기반으로 합니다.

  • 리스코프 치환 원칙 (Liskov substitution principle, LSP)
    : 부모 클래스를 상속한 자식 클래스는 기존 부모 클래스의 역할을 해낼 수 있어야 합니다.

  • 인터페이스 분리 원칙 (Interface segregation principle, ISP)
    : 인터페이스를 구체적이고 작은 단위로 분리시켜 꼭 필요한 인터페이스만 상속해야 합니다.

  • 의존관계 역전 원칙 (Dependency inversion principle, DIP)
    : 상위 모듈은 하위 모듈에 의존해서는 안되며 최대한 추상화한 클래스에 의존해야 합니다.

 

객체 지향 프로그래밍 장단점

  • 장점
    1. 코드 재사용하기 쉽기 때문에 생산성이 증가합니다.
    2. 프로그램을 객체들의 상호 작용으로 설계하기 때문에 실세계를 모델링하기에 용이합니다.
    3. 캡슐화와 다형성으로 인해 보안성이 향상됩니다.

  • 단점
    1. 캡슐화와 격리 구조로 인해 속도가 상대적으로 느립니다.
    2. 객체 생성으로 인해 많은 양의 메모리를 사용합니다.

 

참고 자료