### OOP(Object-Oriented Programming) 란?
캡슐화, 다형성, 상속성, 추상화 4가지 특징을 이용해 코드의 재사용을 증가시키고 유지보수 빈도를 감소시키는 장점을 얻기 위해 객체들을 연결시켜 프로그래밍하는 것
1. 추상화 (Abstraction)
- 대상의 특성 중 불필요한 부분을 무시하고 필요한 공통점만을 다루어 현실의 복잡성을 극복하고 목적에 집중할 수 있도록 함
- 객체들의 공통된 특징을 파악해 정의해 놓은 설계 기법
- 공통의 속성이나 기능을 묶어 이름을 붙임 -> 객체를 만드는 과정
- 즉, Java에서 Class를 정의하는 것과 같음
2. 캡슐화 (Encapsulation)
- 실제 구현 부분을 외부에 드러내지 않도록 함
- 특정 역할을 하는 속성(멤버변수), 기능(메소드)을 객체로 묶은 것
- 데이터를 외부에서 접근하는 것을 방지하고 함수를 통해서만 접근할 수 있게 함
- 접근지정자
public
protected
default
private
3. 상속 (Inheritance)
- 부모클래스의 속성과 기능을 상속받아 동일하게 사용함
- 범용 클래스를 작성 후, 상속을 활용하면 여러클래스에서 중복되는 속성과 기능을 재사용할 수 있음
4. 다형성 (Polymorphism)
- 동일 요청에 대해 서로 다른 방식으로 응답할 수 있도록 만드는 것
- 같은 이름의 메소드가 클래스 혹은 객체에 따라 다르게 동작하도록 구현하는 것
- 오버라이딩과 오버로딩
- 오버라이딩 : 상속받은 동일한 메소드 재정의
- 오버로딩 : 동일한 이름의 메소드가 매개변수 타입, 개수 차이에 따라 다르게 동작