<aside> 💡 프로그램을 설계할 때 객체 단위로 파악하여 기능을 구현하는 프로그래밍 설계 방식
</aside>
**객체(Object)**란 생물, 무생물, 논리, 사상, 개념 등을 포함한 실재하는 모든 것을 말하고,
**객체 지향(OOP)**란 이러한 객체 개념에 기반한 프로그램 패러다임이다.
객체지향은 4가지 큰 기둥으로 이루어져 있다.
상속. 기존 클래스를 기반으로 새로운 클래스를 작성하는 것이다. 상위클래스-하위 클래스 관계로 확장성, 다형성과 관련이 깊다. extends 키워드로 부모를 상속받을 수 있다.
캡술화. 데이터 보호 및 데이터 은닉이 핵심이다. 분리시킨 객체를 외부 클래스에서 접근할 때, 접근 가능한 메서드를 통해서만(getter / setter) 해당 객체의 정보에 접근할 수 있다. 외부에서 함부로 접근하지 못하도록 하는 것.
다형성이란? 여러가지 형태를 가질 수 있는 능력. 같은 이름을 가진 변수, 함수, 클래스가 다양한 의미로 해석될 수 있는 것이다. 오버로딩, 오버라이딩, 상위 객체타입으로 하위 객체를 생성할 수 있는 것 모두 다형성을 의미한다.
추상화. 클래스 간 공통 속성을 찾아 공통의 조상을 만드는 작업이다. 구체화 된 클래스들 간에서 공통의 요소를 도출하여 의도적으로 추상화시키는 것이다.