1. a.k.a Object-Oriented Programming, OOP
객체지향 프로그래밍은 객체들의 유기적인 협력과 결합으로 프로그래밍하는 것이다. 우선 프로그램의 아주 작은 부품이라고 할 수 있는 객체를 만들고, 여러 객체를 결합해 하나의 프로그램을 완성하는 것을 의미한다.
*객체 : 속성과 기능을 가지는 프로그램 단위
장점
- 변경이 용이해 유연한 프로그램을 짤 수 있다.
- 코드 재사용을 통한 반복/변경 코드 최소화로 간결하게 표현 가능하다. 이로인해 유지보수에 유리하다.
필요한 부분만 고쳐 원하는 결과물을 작업할 수 있다는 점이 정말 흥미롭다.
마치 레고처럼

2. 객체지향 사황
1. 추상화
핵심적이거나 공통되는 속성 및 기능을 간추리는 것
- 중복 코드 줄일 수 있다.
- 코드의 재사용성이 증가한다.
- 유지보수, 가독성을 높일 수 있다.
2. 상속
두 클래스 사이에 부모-자식 관계를 설정
- 코드의 재사용성을 높인다.
- 중복을 제거해 프로그래밍 생산성과 유지보수에 크게 기여한다.
3. 다형성
동일한 코드이지만 동작방법, 결과가 다른 것
- 다형성은 코드의 양을 줄이고, 여러 객체 타입을 하나의 타입으로 관리가 가능해 유지보수에 유리하다.
- 대표적으로 오버로딩과 오버라이딩
*오버로딩 : 메서드의 이름은 같고 매개변수의 유형과 개수가 다르도록 하는 것
*오버라이딩 : 상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의해서 사용
다형성을 단숨에 이해할 수 있는 사진↓

4. 캡슐화
데이터와 메서드를 하나의 단위로 묶어 외부에서 직접 접근하지 못하도록 보호
- 데이터 보호 : 외부로부터 클래스에 정의된 속성과 기능들을 보호
- 데이터 은닉 : 내부의 동작을 감추고 외부에는 필요한 부분만 노출
- 코드의 안정성을 높일 수 있다.
- 코드의 재사용성을 높일 수 있다.
접근제어자 범위표는 다음과 같다.
*접근제어자 : 클래스 또는 클래스의 내부 멤버들에 사용되어
해당 클래스나 멤버들을 외부에서 접근하지 못하도록 접근 제한