클래스와 인스턴스
클래스
변수와 함수를 묶어놓은 것을 클래스라고 한다.
- 클래스 안의 변수를 멤버변수라고 한다.
- 클래스 안의 함수를 메소드라고 한다.
java
class newclass {
int x;
int y;
}
- 사용자가 정의한 클래스가 있는 반면,
- 자바에서 기본으로 제공하는 클래스도 있다.
인스턴스
mermaid
graph LR
클래스 -->|instantiate| 인스턴스
- 클래스를 실제로 쓸 수 있게 선언한 것을 인스턴스(instance)라고 부른다.
- 이러한 선언과정을 인스턴스화(instantitate)라고 한다.
예시코드를 보자.
java
class TV {
int channel;
channelup();
channeldown();
}
class test
{
public static void main(String args[]) {
TV tv; // TV 클래스 타입의 참조변수 선언
tv = new tv(); // 연산자 new를 통해 인스턴스 선언
tv.channelup();
tv.channeldown();
TV tv2 = new tv2(); // 참조변수 선언 & 인스턴스 생성
}
}
- new 연산자는 인스턴스를 heap 영역에 할당한다.
- 인스턴스는 참조변수를 통해서만 다룰 수 있다.
인스턴스의 배열
인스턴스의 배열 역시 만들 수 있다.
java
TV[] tvArr = new TV[3];
객체와 객체지향
객체란?
우선 객체의 정의는 다음과 같다.
객체의 정의는 실 세계에서 존재하거나 생각할 수 있는 것을 통틀어서 이야기한다. 가령, 책상, 의자, 자동차 뿐만 아니라, 수강 신청, 수업 등 모두 객체가 될 수 있다.
프로그래밍 관점에서 다시 보자면,
- 클래스로 생성된 인스턴스가 객체.
- 객체라는 추상적인 대상을 실제화한 것이 인스턴스라고 생각하자.
객체지향
- 프로그램의 모든 함수와 변수를 객체 안에 넣었다고 생각해 보자.
- 이 경우, 프로그램은 객체들의 집합일 것이다.
- 이러한 방식으로 프로그램을 설계하는 것을 객체지향 프로그래밍(OOP) 라고 한다.
왜 객체지향인가?
- 코드의 재사용성이 높다.
- 함수나 변수를 또 만들지 않고, 이미 있는 클래스에서 가져올 수 있다.
- 코드의 관리가 용이하다.
- 코드 중에서 잘못된 부분이 있다고 하자.
- 이때, 클래스 중 일부만 고치면 된다.
- 신뢰성이 높은 프로그래밍을 가능하게 한다.