문제를 여러 개의 객체 단위로 나눠 작업하는 방식으로 객체들이 서로 상호작용하는 프로그래밍 이론이다. 위와 같이 프로그램을 "객체"들의 모임으로 파악하는 것에 의미를 둔다.
또한, OOP는 코드 재사용성과 생산성의 향상 효과를 볼 수 있고, 유지 보수의 편의성으로 인해 규모가 큰 프로젝트에 사용한다.
객체 지향 프로그래밍의 특징은 클래스를 이용하여 관련있는 처리 부분과 데이터 부분을 하나의 객체(인스턴스)로 묶어 생성하여 사용한다는 점이다.
객체 지향 프로그래밍은 아래와 같은 4가지의 특성이 있다.
캡슐화란 데이터와 코드의 형태를 함께 묶어 외부에서 알 수 없도록 하고, 데이터의 구조와 역할/기능을 하나의 캡슐 형태로 구현하는 방법이다.
캡슐화의 중요한 목적은 변수를 private으로 선언하여 데이터를 보호하고, 보호된 변수는 getter()/setter() 메소드를 통해서만 간접적으로 접근을 허용하는 것이다.
캡슐화를 하면 불필요한 정보를 감출 수 있다. 숨기는 목적은 내부 구현의 응집도를 높이고 외부 다른 클래스와의 결합도를 낮추는 데 있다.
상속이란 기존 상위 클래스의 기능을 가져와 재사용 할 수 있으면서도 동시에 새로운 하위 클래스에 새로운 기능도 추가 할 수 있는 것이다.
따라서 재사용성을 올리고, 코드의 중복을 줄일 수 있다
OOP에서는 이 관계를 부모클래스와 자식클래스 라고 표현한다
상속을 하게 되면 자식 객체를 생성할 때 부모 클래스의 속성들을 자동으로 물려받기 때문에 자식클래스에서 재 정의 할 필요가 없다.
추상화는 객체의 공통적인 속성과 기능을 추출하여 정의 하는 것을 말한다.
실제로 존재하는 객체들을 프로그램으로 만들기 위해 공통 특성을 파악해 필요없는 특성을 제거하는 과정을 뜻한다. 객체들은 실제의 모습이지만, 클래스는 객체들이 어떤 특징이 있어야 한다고 정의하는 추상화된 개념이다.
추상화는 객체들의 공통된 특징을 파악해 정의해 놓은 코드 설계도라고 이해하면 된다. (즉, 구체적인 개념을 정의하는 것이 아닌, 추상적 개념으로 작성하여 설계에 유연한 변경을 할 수 있도록 한다)
다형성이란 상속과 연관 있는 개념으로 한 객체가 상속을 통해 기능을 확정하거나 변경하여 다른 여러 형태(객체)로 재구성 되는 것을 의미한다.
즉, 한 부모 밑에서 태어난 자식들이 조금씩 다르다는 것이다.
그 예로, 오버로딩(Overloading), 오버라이딩(Orverriding)이 있다.
오버로딩(Overloading)이란?
하나의 클래스 안에서 같은 이름의 메소드를 사용하지만, 각 메소드마다 다른 용도로 사용되는 것이다.
(메소드 명은 같지만, 파라미터 타입/갯수가 다른 형태)
단, return타입은 같아야함
오버라이딩(Orverriding)이란?
하위 클래스가 상위 클래스에서 만들어진 메소드를 재 정의 하는것을 의미.