<aside> 👉 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 객체들 간의 유기적인 상호 작용을 통해 로직을 구성하는 프로그래밍 방법.
</aside>
<aside> 👉 많은 객체들이 모여서 상호협력하여 데이터를 처리하는방식의 프로그래밍 설계방법
👉 더 쉽게 말하면 프로그램을 묶음 단위로 나누어 추후에 가져다 쓰기 편하게 만들어 놓은 프로그래밍이다!
</aside>
<aside> 💡 객체 지향 프로그래밍의 장점? - 다른 클래스를 가져와 사용할 수 있고, 상속 받을 수 있어 코드의 재사용성이 증가한다.
</aside>
※디버깅이란?
→ 버그를 고치는 행위로, 프로그램의 결함을 고치는 행위를 말한다.
<aside> 👉 객체 지향의 4대 요소에는 캡슐화, 추상화, 다형성, 상속 이 있다.
</aside>
<aside> 👉 대상의 공통적인 속성과 본질적인 특징을 정의하고 이것에 기반하여 대상을 객체로 구현하는것.
💡 이때, 대상의 본질적인 특징을 정의하는 프로그래밍 개념이 **추상클래스(abstract class)와 인터페이스(interface)**이다.
</aside>
<aside> 👉 기존의 클래스를 재활용하여 새로운 클래스를 구현하는것을 의미한다. 따라서 코드의 재사용성이 올라간다.
💡 클래스간 공유될 수 있는 속성과 공통적 기능들을 상위 클래스로 추상화 시켜 해당 상위 클래스로부터 확장된 여러 개의 하위 클래스들이 모두 상위 클래스의 속성과 기능들을 간편하게 사용 할 수 있도록 한다.
</aside>
<aside> 👉 어떤 객체의 속성이나 기능이 상황에 따라 여러 형태로 변할 수 있는 것을 의미
💡 다형성을 구현하는 예시로는 메서드 오버라이딩/오버로딩이 있다. 또한 다형성이 구현된 구조에서는 상위 객체 타입이 하위 객체 타입을 참조 가능하다.
</aside>
<aside> 👉 외부로부터 클래스에 정의된 속성과 기능들을 **보호(데이터 보호)**하고, 필요한 부분만 **외부로 노출(데이터 은닉)**될 수 있도록 하여 각 객체 고유의 독립성과 책임 영역을 안전하게 지키고자 하는 목적이다. 💡 모든 속성 값들이 private 접근 제어자로 선언되어있고, getter/setter 메서드의 접근제어자만이 public 으로 열려있다.
</aside>