본문 바로가기
Computer Science/Other

객체 지향 프로그래밍 : Object-Oriented Programming(OOP)

by matters_ 2019. 10. 22.

객체 지향 프로그래밍(Object Oriented Programming:OOP)이란?

  기존의 절차 지향형 프로그래밍 방식에서 벗어나 프로그램을 객체라는 기본 단위로 나누고 추상화하여 이 객체들의 상호작용으로 서술하는 프로그램 설계 방법론이자 개념의 일종

 

 

 


클래스 (Class)

  어떤 문제를 해결하기 위한 데이터를 만들기 위해 현실 사물을 추상화를 거쳐 객체의 속성과 행위를 변수와 메서드로 정의한 것 

  객체를 정의하는 틀, 혹은 설계도

 

객체 (Object)

  속성과 행위를 가진 객체 지향 프로그램의 기본단위

  클래스에 의해 정의되어 프로그램이 실행되는 동안 실존하는 실체 혹은 인스턴스

  

추상화 (Abstraction)

  현실의 사물들을 객체라 생각하고 상태, 행위 등 객체의 특징점을 선별하여 프로그래밍하는 것

 

캡슐화 (encapsulation)

  추상화를 통해 얻어진 공통의 속성과 행위를 한 클래스로 묶는 작업, 실제 구현 내용을 외부에 감추는 것(은닉화)

 

상속 (Inheritance)

  자식(하위,파생) 클래스가 부모(상위) 클래스의 멤버를 물려받는 것

 

다형성(polymorphism)

  같은 모양의 코드가 다른 행위를 하는 것

 

오버 라이딩 (Overriding) :
기본클래스를 상속받은 파생 클래스에서 기본클래스의 완전히 동일한 메서드 로직들을 새롭게 정의하는 것
자신의 목적에 맞게 가상함수를 재정의 하는 것

- 가상함수 ( 상속받는 파생 클래스에서 구현해야 할 일종의 함수 인터페이스를 제공하는 역할 )로  구현
- 파생 클래스의 객체에 대해, 기본 클래스의 포인터(업캐스팅)로 가상함수가 호출될 때 동적바인딩이 일어난다.
- 기본 클래스 객체에 대해서는 가상함수가 호출된다고 하더라도 동적바인딩은 일어나지 않는다.
- 메서드 이름, 리턴형, 파라미터 갯수, 자료형이 같아야 한다.
- 동적 바인딩, 모든 호출될 함수는 실행시간에 결정

오버 로딩 (Overloading) : 클래스나 외부에서 같은 이름의 메서드들을 여러 개 가질 수 있게 하는 것
- 함수들 사이에서 발생
- 메서드 이름만 같고 파라미터 갯수와 자료형이 완벽하게 일치하면 안된다.(단, 상속관계에서는 가능) 리턴형은 같아도 달라도 된다.
- 정적바인딩, 컴파일 시간에 호출될 함수가 결정

 

 


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


장점

  • 코드 재사용이 용이하며 코드 신뢰성을 확보할 수 있다.
    • 이미 작성한 코드를 상속 등을 이용해 계속 사용할 수 있으며 그 신뢰성도 높아진다. 
  • 디버깅 등 유지보수가 쉽다.
    • 절차 지향 프로그래밍에서는 문제가 발생한 코드를 직접 따라가며 찾아야 하지만 객체 지향 프로그래밍에서는 비슷한 일을 하는 객체들을 하나의 추상 클래스로 만들어 비교적 쉽게 오류를 찾아 수정할 수 있다. 
가상 함수 (Virtual Function) : 기본 클래스(상속되지 않은 클래스) 내에서 선언되어 파생 클래스에 의해 재정의될 수 있는 함수

순수 가상 함수 (Pure Virtual Function) : 구현이 없는 가상 함수

추상 클래스(Abstract Class) : 순수 가상 함수를 포함하는 클래스

  • 여러 사람이 참여하는 대형 프로젝트에 용이하다.
    • 클래스 단위로 모듈화 시켜서 개발할 수 있으므로 업무 분담하여 개발할 수 있다.

단점

  • 처리속도가 상대적으로 느리다.
  • 객체가 많으면 용량이 커질 수 있다.
  • 설계 시 많은 시간과 노력이 필요하다.

 

 


Reference

댓글