프로그래밍 패러다임 : 객체지향 프로그래밍(OOP)

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

프로그래밍 패러다임 중 하나로 프로그램을 객체라는 단위로 분해하고 이러한 객체들 간의 상호작용을 통해 프로그램을 구현하는 방식의 프로그래밍 접근 방법이다.
여기서 객체란 무언가를 만들 때 사용하는 부품이라고 할 수 있는데, 예를 들어 자동차를 만들 때 엔진, 바퀴, 핸들 등이 부품으로 사용된다고 치자. 이러한 부품들은 각자의 기능들이 있고, 함께 조립되어 자동차가 완성된다.
이렇게 부품을 하나하나 조립하여 더 큰 물건을 만드는 것이 객체 지향 프로그래밍이라고 할 수 있다.

각 객체는 자신만의 기능을 가지고 있고, 다른 객체와 정보를 주고받을 수 있다. 이렇게 객체가 서로 상호작용, 동작하면서 프로그램이 완성된다

특징

  • 캡슐화(Encapsulation)

    캡슐화는 마치 물건을 상자에 담는 것처럼, 데이터와 그 데이터를 다루는 코드를 하나로 묶는 것을 말한다. 관련된 데이터와 그 데이터를 다루는 코드를 함께 묶어서 외부로부터 감추어 보호하는 거라고 생각하면 된다.
    캡슐화를 사용하면 코드의 복잡성을 줄이고 코드를 보호하고 안전하게 사용할 수 있다. 또한 코드 변경 시에도 외부에 영향을 끼치지 않고 내부적으로 변경할 수 있어서 유지 보수에도 편리하다.

  • 상속(Inheritance)

    상속은 한 클래스가 다른 클래스의 특성과 기능을 물려받는 것을 뜻한다.
    흔히 가족에서 부모가 자식에게 유전적 특징을 물려주는 것을 비유하며 이야기한다.
    예를 들어 자동차 클래스가 있다고 가정했을 때 추가적으로 전기차를 만들어야 한다면,
    전기차 클래스를 몽땅 새로 그릴 필요 없이 상속을 사용하면 가존의 자동차 클래스를 확장해서 전기차 클래스를 만들 수 있다.
    상속을 사용하면 코드의 재사용성을 높일 수 있고 객체들 사이의 계층 구조를 잘 나타낼 수 있다. 또 유지 보수의 편리성과 코드의 가독성 또한 좋아진다.

  • 다형성(Polymorphism)

    하나의 메서드나 함수가 다양한 형태로 동작할 수 있는 능력. 즉 같은 이름의 메서드나 함수를 다양한 클래스에서 사용할 수 있고, 각 클래스마다 다르게 구현될 수 있다는 것이다. 만약에 도형 클래스가 있고, 거기에 넓이를 계산하는 메서드가 있다고 가정하면,
    사각형 클래스와 삼각형 클래스는 각각 다르게 넓이를 계산할 필요가 있는데
    이때 다형성을 사용하면 도형 클래스의 “넓이를 계산하는 메서드"를 오버라이딩 해서
    각 클래스에서 자신만의 구현을 할 수 있다.
    이렇듯 하나의 코드가 다양한 클래스들에 대해 다양한 동작을 수행할 수 있는 능력을 다형성이라고 하며
    다형성은 코드의 재사용 성과 유연성을 높여준다.

장점

객체 지향 프로그래밍을 사용하면 프로그램을 만들 때 부품처럼 세분화해서 만들 수 있다.
이렇게 개발을 하면 프로그램을 더 이해하기 쉽고 수정하기도 간편하다.
또 코드를 재사용해서 비슷한 기능을 가진 프로그램을 더 빨리 만들 수도 있다.