객체 지향 프로그래밍이란

Voler Web·2022년 8월 18일

Word

목록 보기
5/23

객체지향 프로그래밍

Object Oriented Programming, OOP

  • 프로그램 설계방법론이자 개념의 일종으로 , 명령형 프로그래밍에 속합니다.
  • 프로그램을 단순히 데이터와 처리 방법으로 나누는 것이 아니라, 프로그램을 수많은 '객체(object)'라는 기본 단위로 나누고 이들의 상호작용으로 서술하는 방식이다. 객체란 하나의 역활을 수행하는 '메소드와 변수(데이터)'의 묶음으로 봐야 합니다.

    객체 지향 프로그래밍은 프로그래밍 구현에 필요한 객체를 파악하고 각각의 객체들의 역할이 무엇인지를 정의하여 객체들 간의 상호작용을 통해 프로그램을 만드는 것을 말한다. 객체는 클래스라는 틀에서 생겨난 실체(instance)이다. 따라서 객체 지향 프로그램은 객체와 객체간의 연결로 되어 있으며 각각의 객체 안에 자료구조와 알고리즘이 들어있는 것이다

절차지향과 객체지향

출처 : 이미지 출처 1
출처 : 이미지 출처 2

절차지향

절차 지향 모델링은 프로그램을 기능중심으로 바라보는 방식으로 "무엇을 어떤 절차로 할것인가?"가 핵심이 됩니다. 즉 , 어떤 기능을 어떤 순서로 처리하는가에 초점을 맞춘다

객체지향

객체 지향 모델링은 기능이 아닌 객체가 중심이 되며 "누가 어떤 일을 할 것인가?"가 핵심이 된다. 즉 , 객체를 도출하고 각각의 역활을 정의해 나가는 것에 초점을 맞춘다

예시 : 기억보다 기록을

절차지향 vs 객체지향

  • 대형 프로그래밍의 경우 많은 기능을 수반하기 때문에 절차 지향보다는 객체 지향이 적합
    • 각 객체가 하는 역할이 많아도 , 많은 역할을 객체로 묶을 수 있기 때문
  • 소형 프로그래밍의 경우 작은 기능을 수반하기 때문에 객체 지향보다는 절차 지향이 적합
    • 작은 기능을 객체별로 나눌 경우, 오히려 복잡해질 수 있기 때문

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

객체 지향 프로그래밍의 특징은 기본적으로 자료 추상화, 상속, 다형 개념, 동적 바인딩 등이 있으며 추가적으로 다중 상속 등의 특징이 존재한다. 객체 지향 프로그래밍은 자료 추상화를 기초로 하여 상속, 다형 개념, 동적 바인딩이 시스템의 복잡성을 제어하기 위해 서로 맞물려 기능하는 것이다.

사람이 말로 표헌 가능한 모든 것을 객체라 할 수 있다.

  • 자료 추상화(abstraction)
    • 불필요한 정보는 숨기고 중요한 정보만을 표현함으로써 프로그램을 간단히 만드는것입니다.
    • 객체들의 공통적인 특징(기능,속성)을 도출하는 것
    • 객체지향적 관점에서는 클래스를 정의하는 것을 추상화라고 할 수 있습니다.(클래스가 없는 객체 지향 언어도 존재 - Javascript)
  • 캡슐화(encapsulation)
    • 변수와 함수를 하나의 단위로 묶는것을 의미합니다. 즉 데이터의 번들링(bundling)입니다.
    • 실제로 구현되는 부분을 외부에 드러나지 않도록 하여 정보를 은닉할 수 있습니다.
    • 객체가 독립적으로 역할을 할 수 있도록 데이터와 기능을 하나로 묶어 관리하는 것
    • 코드가 묶여있어서 오류가 없어 편리합니다.
    • 데이터를 보이지 않고 외부와 상호작용을 할 때는 메소드를 이용하여 통신을 합니다. 보통 라이브러리로 만들어서 업그레이드 하여 사용 할 수 있습니다.
  • 상속(inheritance)
    • 상속은 자식 클래스가 부모 클래스의 특성과 기능을 그대로 물려받는 것을 말합니다. 기능의 일부분을 변경해야 할 경우 자식 클래스에서 상속받은 그 기능만을 수정해서 다시 정의하게 되는데 이러한 작업을 '오버라이딩(overriding)'이라고 합니다. 상속은 캡슐화를 유지하면서도 클래스의 재사용이 용이하도록 해줍니다.
    • 하나의 클래스가 가진 특징(함수,데이터)을 다른 클래스가 그대로 물려받는 것
    • 이미 작성된 클래스를 받아서 새로운 클래스를 생성하는 것
    • 기존 코드를 재활용해서 사용함으로써 객체지향 방법의 중요한 기능 중 하나에 속합니다.
  • 다중 상속
    • 다중 상속은 클래스가 2개 이상의 클래스로부터 상속 받을 수 있게 하는 기능입니다. 클래스들의 기능이 동시에 필요 할 때 용이하나 클래스의 상속 관예에 혼란을 줄 수 있고 프로그래밍 언어에 따라 사용 가능 유무가 다르므로 주의해서 사용해아 합니다.
  • 다형성(polymorphism)
    • 다형성 개념이란 어떤 한 요소에 여러 개념을 넣어 놓는 것으로 일반적으로 오버라이딩이나 오버로딩을 의미합니다. 다형 개념을 통해서 프로그램 안의 객체 간의 관계를 조직적으로 나타낼 수 있습니다.
    • 약간 다른 방법으로 동작하는 함수를 동일한 이름으로 호출하는 것
    • 동일한 명령의 해석을 연결된 객체에 의존하는 것

오버라이딩이란 같은 이름의 메소드가 여러 클래스에서 다른 기능을 하는것
오버로딩이란 같은 이름의 메소드가 인자의 개수나 자료형에 따라서 다른 기능을 하는 것

  • 동적바인딩(Dynamic Binding)
    • 동적 바인딩은 실행 시간 중에 일어나거나 실행 과정에서 변경될 수 있는 바인딩으로 컴파일 시간에 완료되어 변화하지 않는 정적 바인딩과 대비되는 개념입니다. 동적 바인딩은 프로그램의 한 개체나 기호를 실행 과정에 여러 속성이나 연산에 파인딩함으로써 다형 개념을 실현합니다.
    • 가상 함수를 호출하는 컴파일 할 때 , 바인딩을 실행 시간에 결정하는 것
    • 파생 클래스의 객체에 대해 , 기본 클래스의 포인터로 가상 함수가 호출 될 때 일어납니다.
    • 함수를 호출하면 동적 바인딩을 통해 파생 클래스에 오버라이딩 된 함수가 실행
    • 프로그래밍의 유연성을 높여주며 파생 클래스에서 재정의한 함수의 호출을 보장합니다.
      (다형 개념 실현)

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

소프트웨어의 생산성 향상

객체지향 프로그래밍은 다형성 객체 캡슐화 등 소프트웨어의 재사용을 지향합니다. 이미 만들어진 클래스를 상속받거나 객체를 가져다 재사용하거나 , 부분 수정을 통해 소프트웨어를 작성하는 부담을 대폭 줄일 수 있다.

  • 신뢰성 있는 소프트웨어를 손쉽게 작성할 수 있다. ( 개발자가 만든 데이터를 사용하기 때문에 신뢰할 수 있습니다. )
  • 코드를 재사용하기 쉽습니다 ( 상속 , 캡슐화 , 다형성으로 인해 재사용 할 수 있습니다. )
  • 업그레이드가 쉽습니다.
  • 디버깅이 쉽습니다.

실세계에 대한 쉬운 모델링

컴퓨터가 산업 전반에 다양하게 활용되는 요즘 시대에는 응용 소프트웨어를 하나의 절차로 모델링하기 어렵다. 산업 전반에서 요구되는 응용 소프트웨어 특성상 , 절차나 과정보다 관련된 많은 물체(객체)들의 상호 작용으로 묘사하는 것이 더 쉽고 적합합니다.

  • 실세계에 대한 모델링을 좀 더 쉽게 해줍니다( 모든 것을 객체들의 상호작용으로 생각 )

보안성 향상

객체 지향적 프로그래밍의 캡슐화 특징으로 실제로 구현되는 부분을 외부에 드러나지 않도록 하여 정보를 은닉할 수 있습니다.

  • 보안성이 높습니다( 캡슐화 , 데이터 은닉 , 다형성으로 인해 필요한 정보를 재정의 하거나 getter , setter 를 이용하기 때문에 보안성이 높습니다. )

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

느린 실행 속도

객체 지향 프로그래밍은 캡슐화와 격리구조 때문에 절차지향 프로그래밍과 비교하면 실행 속도가 느립니다. 또한 , 객체지향에서는 모든 것을 객체로 생각하기 때문에 추가적인 포인터 크기와 메모리와 연산에 대한 비용이 들어가게 됩니다.

  • 절차지향 프로그래밍에 비해 느린 실행 속도
  • 필요한 메모리양의 증가

출처 : 인코덤
출처 : 나무위키
출처 : 위키백과

profile
공부하려 끄적이는 velog

0개의 댓글