프로그램의 설계방법론 중 하나이다
프로그램을 단순히 데이터와 처리 방법으로 나누는 절차적 방법이 아니라, 수많은 객체 (Object)라는 기본 단위로 나누고, 이들의 상호 작용으로 서술하는 방법 객체란 메소드, 변수등을 가지며 특정 역할을 수행하도록 인간이 정의한 추상적인 개념이다.
객체 지향 프로그래밍 방법에서는 4가지 요소가 존재한다.
캡슐화 (Encapsulation)
변수와 함수를 하나의 단위로 묶는 것을 말한다. 캡슐처럼 묶어진다고 해서 캡슐화이다. 클래스를 통해 구현되고 이 클래스를 실체화 한것이 객체이다.
상속 (Inheritance)
상속은 자식 클래스가 부모 클래스의 특성과 기능을 그대로 물려받는 것을 말한다. 기능의 일부분을 변경해야 할 경우 자식 클래스에서 상속받은 그 기능만을 수정해서 다시 정의하게 되는데, 이러한 작업을 오버라이딩(Overriding)이라고 하고, 상속은 캡슐화를 유지하면서 클래스의 재사용을 용이하게 한다.
정보 은닉 (Information Hiding)
프로그램의 세부 구현을 외부로 드러나지 않도록 특정 모듈 내부로 감추는 것 (내부에서의 구현은 감추고 모듈내에 응집도를 높이며 다른 모듈간의 결합도(커플링)을 떨어뜨려 유연함과 유지보수성을 높이는 개념.
일반적으로 세 종류의 접근 제한이 사용된다 (언어마다 차이는 있을수 있다, ex) C++ friend같은..)
여기서 public과 protected로 선언된 것은 자식들에게 상속 된다.
다형성 (Polymorphism)
하나의 변수, 또는 함수가 상황에 따른 다른 의미로 해석 될 수 있는 것을 말한다.
서브타입 다형성 (상속과 관련되어 있다)
기초 클래스 또는 어떠한 인터페이스를 구현하는 상위 클래스를 생성하고, 해당 클래스를 상속받는 다수의 하위 클래스들을 만들어서 상위 클래스의 포인터나 참조변수가 하위 클래스의 객체를 참조하게 만드는 것, 이때 상위 클래스 타입의 포인터라고 해도 실제 인스턴스는 하위 클래스이기 때문에 하위 클래스에서 특정 메서드가 오버라이드가 되어있다면 메소드의 내용은 달라질 수 있다.
매개변수 다형성
타입을 매개변수로 받아 그 타입에 따라 컴파일시 해석되는 것을 말한다.
C++ 에서는 템플릿(Template) , C#에서는 제네릭(Generic) 이 있다.
임시 다형성
함수 오버로딩과 연산자 오버로딩이 여기에 해당한다
함수 오버로딩은 동일한 이름의 함수를 매개변수에 따라 다른 기능으로 동작할 수 있도록 하는 것이다.
연산자 오버로딩은 > , <등 기본 연산자가 해당 클래스의 맞는 역할을 수행하는것
강제 다형성
묵시적 형 변환 (Implicit Type Coercion)
int a = 30;
double b = a;
이라는 식이 실행되면 int형 값 a는 b에 대입될때 묵시적 형 변환이 된다 왜냐하면 int보다 double은 더 큰개념이기 떄문이다.
명시적 형 변환 (Explicit Type Coercion)
int a = 30;
float b = (float)a;
명시적으로 float로 변환되도록 명시하는 것이다.