1 분 소요

OOP의 특징

절차가 아닌 데이터를 중심으로 개발을 진행하는 객체 지향적 프로그래밍 (Object Oriented Programming) 방식이다. 문제의 핵심인 데이터를 정의하고 데이터에 절차를 결합하여 현실의 사물을 표현할 수 있는 객체를 만든다. 그리고 이런 독립적인 객체를 조립하여 프로그램을 완성해 나가는 방식이다.

  • 캡슐화(Encapsulation) : 표현하고자 하는 자료(Data)와 동작(Function)을 하나의 단위로 묶는 것이며 이렇게 묶어 놓은 것을 객체(Object)라고 한다. 대상의 특징을 나타내는 데이터와 이 데이터를 관리하는 함수가 항상 하나의 묶음으로 사용되므로 객체는 스스로 독립적이며 프로그램의 부품으로 활용될 수 있다. 그래서 객체를 소프트웨어 IC라고 부르기도 한다.

  • 정보 은폐(Information Hiding) : 객체는 자신의 상태를 기억하기 위한 속성과 속성을 관리하는 동작을 정의한다. 이 중 외부에서 사용하는 기능만 공개하고 나머지는 숨길 수 있는데 이를 정보 은폐라고 한다. 외부에서 객체의 상태를 마음대로 바꾸거나 허가되지 않은 동작을 요청하지 못하도록 함으로써 스스로의 안전성을 확보하는 수단이며 정보 은폐에 의해 객체는 더욱 견고하게 캡슐화된다.

  • 추상화(Abstraction) : 현실의 사물을 객체로 표현하기 위해서는 이 사물이 어떤 특징을 가지며 어떤 동작이 가능한지를 조사해야 하는데 이를 데이터 모델링이라고 한다. 모델링의 결과 필요한 자료와 동작의 목록이 작성되면 이들을 캡슐화하여 객체로 정의한다. 그리고 외부에서 사용해야 하는 기능은 공개하고 제한해야 하는 기능은 숨긴다. 추상화란 객체의 효율적이고도 안전한 사용을 위해 인터페이스를 설계하는 것이며 캡슐화와 정보 은폐에 의해 구현된다. 추상화에 의해 외부에서는 객체의 인터페이스만 볼 수 있으며 내부 구현은 볼 수 없다. 그래서 사용 방법이 간단 명료하고 외부의 조작에 대해 안전해지며 객체는 추상적인 인터페이스를 유지하는 한도내에서 숨겨진 내부 구현을 마음대로 수정할 수 있어 기능 개선이 쉬워진다. 개념화라고도 한다.

  • 상속(Inheritance) : 상속은 이미 만들어진 클래스를 파생시켜 새로운 클래스를 정의하는 기법이다. 파생된 클래스는 기존 클래스의 모든 속성과 동작을 물려받으며 여기에 더 필요한 기능을 추가하거나 필요없는 기능을 제거 또는 변경할 수 있다. 객체를 아무리 추상적으로 잘 정의해 놓았다 하더라도 현실의 문제는 특수하기 때문에 모든 경우에 일반적으로 적용되지는 않는다. 이럴 때는 객체를 상속받아 원하는 부분만 수정할 수 있으며 기존 객체를 최대한 재활용함으로써 시간과 노력을 절약할 수 있다.

  • 다형성(Polymorphism) : 똑같은 호출이라도 상황에 따라, 호출하는 객체에 따라 다른 동작을 할 수 있는 능력을 다형성이라고 한다. 실제 내부 구현은 다르더라도 개념적으로 동일한 동작을 하는 함수를 하나의 인터페이스로 호출할 수 있으므로 객체들을 사용하는 코드를 일관되게 유지할 수 있다. 다형성은 동적 바인딩을 하는 가상 함수에 의해 구현된다.