본문 바로가기

학부/AI 관련 공부

객체 지향 프로그래밍(Object-oriented programming)

728x90
반응형

Python에 대한 공부를 하던 중에, 객체 지향 프로그래밍(Object-oriented programming)이라는 단어가 많이 나오길래 어떤 의미인지 궁금했다.

공부를 한 내용들을 간단하게 정리해두면 좋을 것 같아서 이렇게 기록을 남긴다.

 


객체 지향 프로그래밍(Object-oriented programming)이란?


컴퓨터 프로그래밍의 패러다임 중 하나로, 컴퓨터 프로그램을 명령어의 목록으로 보는 시각이 아니라 여러 개의 독립된 단위인 “객체”들의 모임으로 파악하는 것을 의미한다.

 

프로그램 구현에 필요한 객체를 파악하고, 각각의 객체들의 역할이 무엇인지를 정의하여 객체들간의 상호작용을 통해 프로그램을 만드는 것이 바로 “객체 지향 프로그래밍”이다.

ex) C++, C#, Java, Python, etc.

  • 일반적으로 데이터는 변수에 넣어서 사용하며 데이터를 조작하는 일은 함수로 구성해서 쉽게 실행할 수 있도록 만들어 놓는다.
  • 객체(Obejct, instance)는 서로 연관된 데이터와 그 데이터를 조작하기 위한 함수를 하나의 집합에 모아 놓은 것을 말한다.
    • 이 때, 집합의 원소가 되는 변수나 함수를 멤버(member) 혹은 속성(attribute)이라고 부른다.
    • 특히 객체의 속성인 함수는 메서드(method)라고 한다.

 


객체 지향 VS 절차 지향


  • 객체 지향
    • 기능보다 ‘객체(object)’ 가 중심이 되며 “누가, 어떤 일을 할 것인가?”에 초점을 두고 있다. 객체를 도출하고 각각의 역할을 정의해 나가는 것. 따라서 객체 지향은 대규모 소프트웨어 개발에 용이하다, 많은 역할들을 객체로 묶을 수 있기 때문이다.
  • 절차 지향
    • 프로그램을 ‘기능’ 중심으로 바라보며, “무엇을, 어떤 절차로 할 것인가?” 가 핵심이 된다. 어떤 기능을 어떤 순서로 처리하는가. 따라서 소규모 프로그래밍에 적합하다, 작은 기능을 객체별로 나눴을 때, 더 복잡해질 수 있기 때문이다.


기본 구성 요소


  • 클래스(Class)
    • 같은 종류의 집단에 속하는 속성(attribute)와 행위(behavior)를 정의한 것으로, 기본적인 사용자 정의 데이터형이라고 할 수 있다. 클래스는 다른 클래스 또는 외부 요소와 독립적으로 디자인해야 한다. 일반적으로 추상 자료형을 “클래스”라고 지칭한다.
  • 객체(Object)
    • 클래스의 인스턴스 (실제 메모리상에 할당된 것)이다. 객체는 자신 고유의 속성(attribute)를 가지며 클래스에서 정의한 행위(behavior)를 수행할 수 있다. 일반적으로 추상 자료형의 인스턴스(instance)를 ‘객체’ 라고 한다.
  • 메서드(Method) / 메시지(Message)
    • 클래스로부터 생성된 객체를 사용하는 방법을 의미한다. 메서드(Method)는 한 객체의 서브루틴(subroutine)형태로 객체의 속성을 조작하며, 객체 간의 통신은 메시지(Message)를 통해 이루어진다. 일반적으로 추상 자료형에서 정의된 연산을 “메서드(Method)”라고 하며, 메서드의 호출을 “생성자” 라고 한다.


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


  • 추상화(abstraction)
    • 객체들의 공통적인 특징(기능,속성)을 도출하는 것
    • 객체지향적 관점에서 클래스를 정의하는 것을 ‘추상화’라고 한다. (클래스가 없는 객체지향 언어도 있다 >> JavaScript)
  • 캡슐화(encapsulation)
    • 실제로 구현되는 부분을 외부에 드러나지 않도록 하여 정보를 은닉할 수 있다.
    • 객체가 독립적으로 역할할 수 있도록 데이터와 기능을 하나로 묶어 관리하며, 코드가 묶여있어서 오류가 없기 때문에 편리하다.
    • 데이터를 보이지 않고 외부와 상호작용을 할 때는 메소드를 이용하여 통신을 한다. 보통 라이브러리로 만들어서 업그레이드해 사용할 수 있다.
  • 상속성(inheritance)
  • 하나의 클래스가 가진 특징 (함수, 데이터)을 다른 클래스가 그대로 물려받는 것을 의미한다. 이미 작성된 클래스를 받아 새로운 클래스를 생성하는 것도 이에 해당한다.
  • 기존 코드를 재활용한다는 점이 객체지향 방법의 중요한 기능 중 하나에 속한다.
  • 다형성(polymorphism)
    • 약간 다른 방법으로 동작하는 함수를 동일한 이름으로 호출하는 것을 의미한다.
  • 오버라이딩(Overriding) : 같은 이름의 메소드가 여러 클래스에서 다른 기능을 하는 것 / 부모클래스의 메소드와 같은 이름을 사용하며, 매개변수도 같지만 내부 소스를 재정의 하는 것
  • 오버로딩(Overloading) : 같은 이름의 메소드가 인자의 개수나 자료형에 따라 다른 기능을 하는 것 / 같은 이름의 함수를 여러 개 정의한 후, 매개변수를 다르게 하여 같은 이름을 경우에 따라 호출해서 사용하는 것
  • 동적바인딩(Dynamic Binding)
    • 가상 함수를 호출하는 코드를 컴파일할 때, 바인딩을 실행시간에 결정하는 것. 즉, 실행 시간 중에 일어나거나 실행 과정에서 변경될 수 있는 바인딩을 의미한다.
    • 파생 클래스의 객체에 대해, 기본 클래스의 포인터로 가상 함수가 호출될 때 일어난다.

 ※ 바인딩이란? ) 프로그래밍 언어가 해당 언어에 네이티브하지 않는 외부 라이브러리나 운영 체제 서비스를 사용할 수 있도록 만들어주는 API (Application Programming Interface, 컴퓨터나 컴퓨터 프로그램 사이의 연결로써, 일종의 소프트웨어 인터페이스이다. 다른 종류의 소프트웨어에 서비스를 제공한다.)

 

728x90
반응형