객체 지향 프로그래밍이란? 프로그램 구현에 필요한 객체를 파악하고 각각의 객체들의 역할이 무엇인지를 정의하여 객체들 간의 상호작용을 통해 프로그램을 만드는 것을 말한다.
이 상호작용이라는 것은 결국 객체 지향 프로그래밍의 핵심을 관통하는 말이라고 생각한다.
객체 지향 프로그래밍의 핵심은 객체가 중심이 되어 "어떤 객체가 어떤 일을 할 것인가?"로 말할 수 있다.
객체 지향 프로그래밍의 주요 특징은 다음과 같다.
이 중 연관, 집약, 구성은 객체 간의 관계와 관련된 특징이다.
객체 지향 프로그래밍의 핵심 개념 중 하나이다.
객체는 차, 탁자, 고양이와 같은 실세계의 개체(Entity)와 같다. 객체가 존재하는 동안 상태와 동작을 가진다.
예를 들어 자동차의 '상태'는 외장컬러, 타이어 크기 등이 있고, '동작'으로는 전진, 후진, 좌회전, 우회전 등이 있다.
자바에서 객체는 new 키워드를 통해 만들어진 클래스의 인스턴스로 필드(변수)에 상태를 저장하고, 메소드로 동작을 표현한다.
또한 다른 객체와 소통할 수 있다는 것이 하나의 특징이다.
예를 들어 '사람'이라는 다른 객체가 위에서 만든 자동차를 '사람'이 타서 발로 엑셀을 밟으면 차는 앞으로 전진하거나, 후진하게 된다.
클래스 또한 객체 지향 프로그래밍의 핵심 개념 중 하나이다.
클래스는 객체를 만드는 데 필요한 지침의 집합이면서 템플릿, 청사진 또는 객체를 만드는 방법을 담고 있는 설계도라고 표현할 수 있다.
new 키워드를 통해 클래스를 객체로 만들 수 있으며 이 과정을 '인스턴스화한다'라고 표현할 수 있으며,
동일한 클래스를 여러번 인스턴스화 시킬 수 있다.
또한 인스턴스화된 객체는 메모리의 힙 영역에 할당된다.
내용과 별개로 SOLID 원칙 중, 단일 책임 원칙에 의해 클래스는 하나의 일을 할 수 있도록 설계 및 작성되야 한다.