OOP를 이해하기 위한 Class, Instance, Object의 간단한 개념
클래스
- 객체를 만들기 위한 설계도.
- 아래 사진을 보면 붕어빵 틀이라고 할 수 있다.
객체
- 구현할 대상(클래스에서 선언된 그대로 만들어진 것), 즉 붕어빵이다.
인스턴스
- 설계도를 바탕으로 객체를 실체화 하면 그것이 인스턴스 이다.
- 객체는 메모리에 할당되어 있지않으며, 단순히 클래스 내 함수로 선언 되어 있는 것이며, 클래스 밖에서 변수로 선언 되어 메모리가 할당되어지는 경우를 인스턴스라 한다.
또 다른 쉬운 그림을 보자면 아래와 같다.
객체vs 인스턴스
: 다시한번 살펴보자면, 객체는 클래스 타입으로 선언되엇을 때 객체라 하며, 해당 객체가 메모리에 할당되어 실제 사용 될 때 인스턴스 라고 한다. 헷갈리지 않게 주의하자. 크게 보자면 인스턴스는 객체에 포함관계이다.
코드로 보는 예시
// 클래스 //
public class snack_foods {
...
}
/* 객체와 인스턴스 */
public class Main {
public static void main(String[] args) {
snack_foods swingchip, potatochip; // '객체'
// 인스턴스화
swingchip = new snack_foods(); // swingchip snack_foods 클래스의 '인스턴스'(객체를 메모리에 할당)
potatochip = new snack_foods(); // potatochip snack_foods 클래스의 '인스턴스'(객체를 메모리에 할당)
}
}
OOP의 개념
: OOP란 프로그래밍 하는 방식 중 하나이며, 모든 물체를 클래스와 인스턴스, 함수, 변수 라는 obejct로 변환하여 프로그램을 구성한다. 즉, C언어같은 절차 지향적인 프로그래밍이 아닌 객체의 관점에서 프로그래밍을 한다는 의미이다.
목적(사용하는 이유)
: OOP를 통해 코드의 가독성을 높이고, 함수의 재사용, 재활용을 통해 코드의 중복 문제를 해결할 수 있다.
OOP의 구성
- 캡슐화
- 내부 속성(변수)와 함수(메소드 등)을 하나의 클래스로 묶는 것을 의미한다.
- 상속과 포함(Inheritance & Composition)
- 상속 : 상위 클래스의 모든 기능(함수, 변수)을 재사용하는 것.
- 포함 : 다른 클래스의 일부 기능(함수)만을 재사용 하는 것
- 추상화
- 추상화란 복잡한 내용에서 필요한 부분만을 요약하는 것을 의미한다.
- 즉 객체들의 공통적인 부분을 묶어 하나의 추상적인 객체로 크게 정의하는 것을 추상화라고 한다
- 다형성
- 상속과 유사하지만, 상위 클래스의 기능을 변경하여 사용하는 것을 말한다(그대로 재사용 되진 않는다)
- 이를 통해 코드의 재사용 및 코드 길이가 감소되어, 유지보수가 용이 해진다
- 간단하게 설명하면 동물은 움직임(A함수)과 울음소리(B함수)를 낸다 하지만 고양이와 개는 각기 다르게 움직이고(A) 다르게 울음소리를 낸다(B)