[C++] 객체 지향 프로그래밍이란?
■ 절차 지향 프로그래밍의 한계점
1. 데이터와 데이터를 다루는 함수가 분리되어 있다.
어떤 타입을 설계할 때, 그 타입을 다루는 함수를 작성할 때마다 첫 번째 인자로 어떤 데이터를 다룰 것인지 주소값을 받아야 했다. 이는 쓸데없이 함수가 길어지게 하는 요인이 되며, 함수 내부에서도 포인터로 데이터를 다뤄야 하는 불편함이 있다.
2. 함수의 이름을 항상 다르게 작성해야 한다.
C언어에서 함수의 이름은 전역 이름공간을 사용하기 때문에 모든 함수마다 이름을 다르게 지어줘야 한다.
3. 프로그램을 확장하기 불편하다.
항상 어떤 함수가 필요한지 명확하게 호출해야 했기 때문에 프로그램에 수정 사항이 생기면 변경 사항이 많아졌다. 그래서 이를 최대한 줄이기 위해 함수 포인터를 사용하거나 같은 카테고리의 타입에서 특정 타입이 무엇인지 가려내기 위해 추가적인 데이터가 필요하다.
■ 객체 지향 프로그래밍의 특징
- 절차 지향 프로그래밍은 확장성이 떨어지게 되어 객체 지향 프로그래밍이 나오게 되었다.
데이터 부분을 필드(Feld), 함수를 메소드(Method)라고 합니다.
1. 캡슐화
- C언어와 다르게 데이터와 데이터함수를 따로 적지 않고 한 번에 작성할 수 있다.
2. 코드의 재사용
- 코드를 상속 받을 수 있다.
3. 추상화
- 데이터를 다루기 쉬워지고 프로그램을 더 빠르고 안전하게 작성할 수 있도록 인터페이스를 정의하는 것.
4. 다형성
- 코드 결과의 내용이 바뀌더라도 인터페이스는 바뀌지 않는다는 것인데, 다형성을 이용하려면 가상 함수(Virtual Function)가 필요하다(OverLoadding 유무) C언어에서는 함수 포인터로 비슷한 효과를 볼 수 있다.