(OOP, Object-oriented programming)
객체지향 프로그래밍은 실세계에 존재하고 인지하고 있는 객체(Object)를 소프트웨어의 세계에서 표현하기 위해 객체의 핵심적인 개념 또는 기능만을 추출하는 추상화(abstraction)를 통해 모델링하려는 프로그래밍 패러다임을 말한다. 다시 말해, 우리가 주변의 실세계에서 사물을 인지하는 방식을 프로그래밍에 접목하려는 사상을 의미한다.
-데이터와 기능을 단위로 묶는 것
-은닉 : 구현은 숨기고 동작은 노출시킴
-느슨한 결합에 유리 : 언제든 구현을 수정할 수 있음
캡슐화는 관련있는 멤버 변수와 메소드를 클래스와 같은 하나의 틀 안에 담고 외부에 공개될 필요가 없는 정보는 숨기는 것을 말하며 다른 말로 정보 은닉(information hiding)이라고 한다.
-내부 구현은 아주 복잡한데, 실제로 노출되는 부분은 단순하게 만든다는 개념
-클래스 정의 시, 메서드와 속성만 정의한 것을 인터페이스라고 부른다.
-부모 클래스의 특징을 자식 클래스가 물려받는 것
"기본 클래스(base class)의 특징을 파생 클래스(derived class)가 상속받는다"
-객체는 똑같은 메서드라 하더라도, 다른 방식으로 구현될 수 있다.
**캡슐화는 코드가 복잡하지 않게 만들고, 재사용성을 높입니다.
추상화는 마찬가지로 코드가 복잡하지 않게 만들고, 단순화된 사용으로 변화에 대한 영향을 최소화합니다.
상속 역시 불필요한 코드를 줄여 재사용성을 높입니다.
다형성으로 인해 동일한 메서드에 대해 if/else if와 같은 조건문 대신 객체의 특성에 맞게 달리 작성하는 것이 가능해집니다.**