1. 객체지향 프로그래밍(OOP)
- 객체 및 이들간의 관계, 상호작용 등을 기반으로 프로그래밍
- 캡슐화, 상속, 추상화, 다형성 등의 요소가 있다.
2. 캡슐화
- 객체의 정보를 외부에서 직접 접근하지 못하게 보호하는 개념
- 접근제어자를 통해서 구현할 수 있다.
- 접근제어자는 클래스, 변수, 메서드, 생성자의 접근 범위를 제한하는 키워드이다.
- 캡슐화가 된 데이터는 게터와 세터로 접근이 가능하다.

3. 상속
- 클래스간의 관계를 부모, 자식의 관계로 보는 개념이다.
- 부모의 속성은 자식에게서 재사용되고 확장될 수 있다.
- extends 키워드를 사용해 상속관계를 구현한다.
3-1. 재정의(메서드 오버라이딩)
- @Override 키워드를 통해 부모 메서드를 자식 클래스에서 변경하여 재정의 할 수 있다.
3-2. 추상클래스
- abstract 키워드로 선언하며 하위 클래스에서 특정 메서드를 강제로 구현하기 위해 사용한다.
4. 추상화
- 불필요한 정보를 제거하고 본질적인 특징만을 남기는 것
5. 다형성
- 하나의 타입으로 여러 객체를 다룰 수 있는 객체지향의 특징
5-1. 형변환(캐스팅)
- 형변환이 자동으로 발생하여 부모타입, 자식타입을 다룰 수 있다.
- 업캐스팅 : 부모타입으로 자식타입을 다루는 것
- 다운캐스팅 : 부모타입으로 선언된 개체를 다시 자식타입으로 바꾸는 것 업캐스팅을 진행 시 자식타입의 고유 메서드를 사용하지 못하기 때문에 다운캐스팅을 진행해야 자식 타입의 고유 메서드를 사용할 수 있다.
6. 마무리
- 자바의 특징중 하나인 객체지향의 여러가지 요소에 대해서 알아보았다. 왜 프로그래밍 언어가 객체라는 기본단위로 나누고 상호작용하는 객체지향적 방식을 선호하게되었는지 알게되었다.