REPORT객체 지향 프로그래밍객체 지향 프로그래밍은 절차 지향 프로그래밍과 마찬가지로 컴퓨터 프로그래밍의 패러다임 중 하나이다. 기존의 절차 지향 프로그래밍은 단순히 코드들을 나열했다고 하면은 객체 지향 프로그래밍은 프로그램 안에 필요한 내용을 객체화시키는 것이다. 객체를 만들기 위해서는 하나의 클래스가 필요하다. 클래스는 자료를 추상화한 것으로 하나의 클래스는 객체의 제작도가 되어 여러 객체들을 생성한다.클래스는 다음과 같은 특징을 갖는다. 첫째로, 캡슐화는 객체에 포함된 내용 중 외부에 공개할 것과 감출 것을 결정하는 것이다. 이것은 정보의 은닉화와 관련이 있다. 두 번째로, 상속이라는 것을 할 수 있는데 코드의 재사용을 줄일 수 있고 클래스의 계층 구조를 표현하기에 유용하다. 셋째로, 다형성이라는 한 요소에 여러 개념을 넣은 것이 있다. 이러한 다형성은 프로그램 안의 객체 간의 관계를 조직적으로 나타낼 수 있다. 마지막으로 동적 바인딩은 프로그램의 동작이 프로그램을 실행하는 과정에 변경될 수 있는 것을 의미한다. 이는 프로그램의 한 개체나 기호를 실행과정에 여러 속성이나 연산에 바인딩함으로써 다형성 개념을 실현한다.객체 지향 프로그래밍은 현실에 있는 개념 혹은 물체를 프로그램상에서 표현하기에 좋은 방법이다. 예를 들어 각각의 손님들의 데이터를 가져야 하는 가게 프로그램이 있다면 손님이라는 클래스를 만들고 한 명씩 생길 때마다 객체를 생성해주면 된다. 또한, 손님의 행동들은 클래스의 메서드로 넣으면 되고, 손님의 레벨을 나눈다면 상속을 이용하여 구현하면 될 것이다. 하지만 객체 지향 프로그래밍을 이용하지 않는다면 각각의 손님들의 데이터를 관리하는 것도 손님의 행동을 구분하기도 쉽지 않을 것이다.이러한 패러다이밍은 하나의 문제를 해결하기 위한 데이터를 클래스에 모아놓고 사용함으로써 응집력을 높이며 클래스간에 독릭적인 디자인은 결합력을 약화시키는 장점을 갖는다. 또한 클래스가 관련 데이터만 정의하는 것은 클래스의 한 인스턴스(객체)가 작동할 때 다른 프로그램의 데이터를 건드릴 수 없어 높은 시스템 보안을 제공하며 자료 훼손을 방지한다. 클래스 특징인 상속은 개발 시간을 단축해주고 면밀한 자료 분석을 돕는 장점을 준다.하지만 상속은 코드의 난이도를 상승시키며 어렵게 만든다. 상속이 중첩될수록 점점 복잡해지며 현재 다중 상속을 지원하지 않는 객체 지향 언어가 대부분이다. 심지어 다중 상속을 지원하는 C++에서도 다중 상속을 최대한 사용하지 않는 것을 권장하고 있다. 다중 상속을 이렇게 금지하려는 이유는 순환 상속의 문제 때문이다. 이 문제는 2개의 부모를 가진 클래스의 조상이 부모 클래스끼리 겹치는 경우 발생한다.예를 들어 ‘사람’이라는 ‘말하다’, ‘먹는다’를 메서드로 갖는 클래스가 있다고 하자. 이 ‘사람’ 클래스를 상속받은 ‘아빠’, ‘엄마’ 클래스가 있고, 이 둘을 동시에 상속받은 ‘아들’ 클래스가 있을 때 바로 위에서 얘기한 순환 상속의 문제가 발생한다. 이렇게 되면 ‘아들’ 클래스에서 상속받은 메서드를 호출할 때 어느 부모의 메서드를 따라야 하는지 명확하지가 않다. 이를 상속 관계가 다이아몬드처럼 생겨서 ‘죽음의 다이아몬드’라고 부르기도 한다.