C++ 객체지향 프로그래밍

1 minute read


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

C++는 C언어를 기반으로 객체 지향 프로그래밍의 개념을 추가해서 만든 언어이다.

객체 지향 프로그래밍이란 프로그램을 구성할 때 필요한 데이터를 추상화하여 객체를 만들고 그 객체들이 서로 유기적으로 동작하도록 프로그래밍하는 것을 말한다.


장점

  • 코드의 재사용이 용이하다. 다른 사람이 만들어 놓은 클래스를 가지고 와서 사용할 수 도 있고 상속을 통해 확장하여 쓸 수 도 있다.
  • 유지보수가 편리하다. 코드를 하나하나 찾아가면서 고칠 필요없이 클래스 멤버 변수나 함수의 해당부분만 수정하면 된다.
  • 협업에 유리하다. 클래스 단위로 작업하기 때문에 분담하여 작업하고 하나로 합치는게 가능하다.
  • 직관적인 코드 분석이 가능하다. 각 객체들이 어떻게 상호작용 하는지 사용자가 정의하기 때문에 작업이 직관적으로 진행된다.

단점

  • 코드의 진행이 대부분 함수이기 때문에 처리속도가 느리다.
  • 객체가 많아질수록 용량이 커진다.
  • 객체들이 유기적으로 연결될 수 있어야 하므로 설계시 시간과 노력이 많이 필요하다.


특징

  • 추상화(abstraction)
    객체가 가진 공통된 특징이나 속성, 기능 등을 한 곳에 모아 이름을 붙여 작성하는 것이다.

  • 캡슐화(encapsulation) 공통의 속성이나 기능 등을 하나의 클래스로 묶는 것을 말한다. 캡슐화는 재사용을 원활하게 하며 정보은닉의 기능도 한다.

  • 상속성(inheritance)
    상위 클래스인 부모와 하위 클래스인 자식이 있다면 더 포괄적이고 추상적인 부모 클래스를 구체적으로 좁히면서 자식 클래스를 만든다. 자식 클래스는 여러개를 생성할 수 있으며 자식들은 공통되는 특징이나 속성을 부모로 부터 가져올 수도 있고 그 기능을 변경하거나 확장시킬 수 도 있다.

  • 다형성(polymorphism)
    동일한 함수명을 상황에 따라 다른 기능을 하도록 하는것을 말한다. 즉 오버로딩(overloading)과 오버라이딩(overriding)이 가능함을 말한다.

    • 오버로딩 : 같은 이름의 함수가 매개변수에 따라 다르게 정의되는걸 말한다.
    • 오버라이딩 : 부모로 부터 상속받은 함수를 자식 클래스에서 재정의하는 것을 말한다.


처음부터 객체 지향 프로그래밍을 해야지라는 생각으로 코드를 작성하려고 하면 막막하고 좀 처럼 진행이 되질 않는다. 우선 만들고자하는 기능들을 구현하고 나서 원하는대로 동작하는지 확인한 다음 객체 지향으로 코드를 수정하면서 연습하는게 좋을거 같다.