
객체지향 프로그래밍이란?
- 필요한 부품들을 만들고 하나씩 조립해서 하나의 완성된 프로그램을 만드는 기법
특징
캡슐화
- 캡슐화란 속성(필드)와 행위(메서드)를 하나로 묶어 객체로 만든 후 실제 내부 구현 내용은 외부에서 알 수 없게 감추는 것을 의미
- 외부 객체에서는 캡슐화된 객체의 내부 구조를 알 수 없기 때문에 노출시켜 준 필드 혹은 메서드를 통해 접근 가능
- 필드와 메서드를 캡슐화 하여 숨기는 이유는 외부 객체에서 해당 필드와 메서드를 잘못 사용하여 객체가 변화하지 않게 하는데 있음
- Java에서는 캡슐화된 객체의 필드와 메서드를 노출 시킬지 감출 지 결정하기 위해 접근 제어자를 사용
상속
- 부모 객체는 가지고 있는 필드와 메서드를 자식 객체에 물려주어 자식 객체가 이를 사용할 수 있도록 만들 수 있다.
- 장점
- 각각의 객체들을 상속 관계로 묶음으로써 객체 간의 구조를 파악하기 쉬워짐
- 필드와 메서드를 변경하는 경우 부모 객체에 있는 것만 수정하게 되면 자식 객체 전부 반영이 되기 때문에 일관성을 유지하기 좋습니다.
- 자식 객체가 부모 객체의 필드와 메서드를 물려받아 사용할 수 있기 때문에 코드의 중복이 줄어들며 코드의 재사용성이 증가

다형성
- 객체가 연산을 수행할 때 하나의 행위에 대해 각 객체가 가지고 있는 고유한 특성에 따라 다른 여러가지 형태로 재구성되는 것을 의미

추상화
- 객체에서 공통된 부분들을 모아 상위 개념으로 새롭게 선언하는 것
- 공통적이고 중요한 것들을 모아 객체를 모델링
ex. 현실세계의 여러 종류의 자동차들이 공통적으로 가지고 있는 가속, 브레이크, 속도와 같은 것들을 모아 자동차라는 객체를 모델링

객체란?
- 세상에 존재하는 물체를 뜻하며 식별이 가능한 것을 의미
- 객체는 속성과 행위(메서드)로 구성
ex. 자동차의 속성 : 회사, 모델, 가격, 속도 등
ex. 자동차의 행위 : 가속, 브레이크, 기어변속, 조명, 경적 등
객체 간의 협력
- 행위를 정의하는 Java의 메서드를 통해 이뤄짐
ex. 사람 객차가 자동차 객체가 가지고 있는 가속 페달 메서드를 호출

객체 간의 관계
사용 관계
- ex. 사람 객체는 자동차 객체를 사용

포함 관계
- ex. 타이어 객체, 차문 객체, 핸들 객체는 자동차 객체에 포함

상속 관계
- 공장에 자동차만 생산하는게 아니라 기차도 생산한다고 가정
- 자동차와 기차 객체는 하나의 공통된 기계시스템 객체를 토대로 만들어진다고 가정
→ 자동차 객체와 기차 객체는 기계시스템 객체를 상속 받는 상속 관계
객체와 클래스
클래스란?
- 객체를 생성하기 위한 설계도
- 동일한 클래스로 여러 개의 인스턴스를 만들 수 있음
인스턴스란?
- 클래스를 토대로 생성된 객체
- 클래스를 토대로 인스터스를 만드는 과정을 인스턴스화라고 부름
- 클래스를 통해 만들어진 인스턴스들을 통틀어서 객체라고 표현할 수 있음