객체란 변수와 함수의 추상화 과정을 통합하여 표현 대상(문제 해결 대상)을 좀 더 모듈화 하기 쉽게 도와주는 일종의 도구이며 객체지향 프로그래밍은 객체의 디자인을 한 뒤에 이들의 데이터 플로우를 짜고 진행 시나리오를 설계해나가는 방식의 개발 방법론입니다. 객체지향은 코드의 재사용성이 높습니다.
객체지향은 절차를 간소화하는 것이지, 결코 절차를 무시하는 게 아닙니다.
절차지향은 데이터와 함수가 분리되고 통일성이 없지만, 객체지향은 좀 더 모듈화 되어 체계적입니다.
절차지향은 과도한 전역 변수의 사용, 스파게티 소스, 변경과 확장, 프로그램에 대한 이해가 어렵지만, 객체지향은 코드의 재사용성이 높습니다.
절차지향은 프로그램의 순서와 흐름을 먼저 세우고 필요한 자료구조와 함수들을 설계하는 방식이고, 객체지향은 반대로 자료구조와 이를 중심으로 한 모듈들을 먼저 설계한 다음에 이들의 실행 순서와 흐름을 짜는 방식입니다.
/* 클래스 */
public class Animal {
...
}
/* 객체와 인스턴스 */
public class Main {
public static void main(String[] args) {
Animal cat, dog; // '객체'
// 인스턴스화
cat = new Animal(); // cat은 Animal 클래스의 '인스턴스'(객체를 메모리에 할당)
dog = new Animal(); // dog은 Animal 클래스의 '인스턴스'(객체를 메모리에 할당)
}
}
https://gmlwjd9405.github.io/2018/09/17/class-object-instance.html
클래스는 ‘설계도’, 객체는 ‘설계도로 구현한 모든 대상’을 의미한다.
클래스의 타입으로 선언되었을 때 객체라고 부르고, 그 객체가 메모리에 할당되어 실제 사용될 때 인스턴스라고 부른다.
추상 클래스는 일종의 미완성 설계도로 추상 메소드가 존재하는 클래스로 구현부가 없는 메소드를 추상 메소드라고 합니다. 상속을 통해 하위 클래스에서 확장해서 사용하는 느낌입니다.
구현부는 하위 클래스에서 합니다. 추상 클래스는 객체를 만들 수 없는 클래스이며 하위 클래스에서 구현을 강제 해야합니다.
인터페이스는 아무것도 없고 밑그림만 그려져 있는 기본 설계로 하위 클래스에서 각 클래스의 목적에 맞게 기능을 구현합니다.
인터페이스는 다중 상속을 하기 위해 사용한다. 추상 클래스에서 기능을 확장하고 인터페이스를 통해 어떤 기능을 할지 정의합니다.
참조
https://gmlwjd9405.github.io/2018/09/17/class-object-instance.html