Java는 객체 지향 프로그래밍(OOP) 언어로 실제 세계는 객체로 이루어져 있으며 발생하는 모든 사건은 객체 간의 상호작용이라는 생각을 기반으로 한다.
이 생각을 구현할 수 있도록 하는 Java의 클래스, 객체, 인스턴스에 대해 알아보자.
Java 클래스, 객체, 인스턴스 정의
클래스는 객체를 정의해 놓은 것이다. 객체를 만드는 일종의 틀로 객체를 의미하는 것이 아니다.
객체는 실제로 존재하는 것이다. 책, 모니터, 자동차부터 눈에 보이지 않는 숫자 계산 등도 객체로 바라본다.
즉, 위 둘은 설계도와 제품의 관계를 가진다.
클래스를 구현해 객체를 만드는 이유는 틀만 만들어 놓으면 언제든지 동일한 객체를 만들 수 있기 때문이다.
클래스로부터 객체를 만드는 과정을 인스턴스화라고 하며
인스턴스는 실제 클래스로부터 만들어진 객체를 의미한다.
객체와 인스턴스의 의미가 유사해 헷갈릴 수 있다.
모니터를 예로 위 셋을 정리하자면
클래스는 모니터를 만드는 설계도,
객체는 모니터(개념의 의미),
인스턴스는 실제로 만들어진 모니터이다.
속성과 기능
객체는 속성과 기능으로 이루어져 있다.
사용하는 단어가 다를 뿐이지 간단히 말하자면 속성은 변수, 기능은 함수를 의미한다.
Monitor를 예로 들었을 때 간단히 생각해 본 클래스이다.
class Monitor {
String color;
int light;
int size;
boolean power;
public void powerOnOff() {
power = !power;
}
}
여기서 위의 변수가 속성, 함수가 기능이다.
Java에선 함수를 메서드라고 지칭한다.
인스턴스 선언 및 사용
인스턴스를 사용하기 위해선 먼저 선언을 해야 한다.
모니터를 예로 들었을 때
가장 먼저 Monitor m; (클래스명 변수명;)과 같이하여 클래스 객체 참조를 위한 참조변수를 선언해야 한다.
다음으로 m = new Monitor();(변수명 = new 클래스명();)처럼 클래스 객체를 생성해 참조변수에 저장하면 된다.
위 두 문장을 하나로 줄여
Monitor m = new Monitor(); 와 같이 사용한다.
인스턴스는 위처럼 참조변수를 이용해 접근할 수 있다.
만약, Monitor 클래스에 color, light, size 등의 변수가 있다고 가정하면
m.color = "black"; 과 같이 사용한다.
만약 모니터가 2대라면
Monitor m1 = new Monitor();
Monitor m2 = new Monitor();
처럼 인스턴스를 각각 만들 수 있다.
m1.color = "black";
m2.color = "white";
이 경우 사용하는 참조변수가 다르므로 첫 번째 모니터는 black, 두 번째 모니터는 white를 color로 가진다.
만약 m1 = m2; 와 같이 한다면 m1과 m2는 하나의 인스턴스만을 가리키게 된다.
이를 그림으로 보면 아래와 같다.
이렇게 되면 m2가 가리키고 있던 인스턴스는 더 이상 접근할 수 없으며 메모리만 차지하는 "가비지(garbage)"로 구분되어 JVM의 가비지 컬렉터에 의해 사라진다.
여러 객체 변수가 하나의 인스턴스를 가리키는 것은 가능하지만
하나의 변수가 여러 개의 인스턴스를 가리키는 것은 불가능하다.
객체 배열 선언
위의 예에선 모니터가 2대만 사용되었지만 만약 10대, 100대인 경우 하나하나 참조변수를 선언하기엔 시간이 너무 오래 걸린다.
이를 편하게 하기 위해 객체에 대해서도 배열 선언이 가능하다.
만약 100대의 모니터 인스턴스를 만들고자 한다면 아래와 같이 할 수 있다.
Monitor[] mArr = new Monitor[100];
이것은 참조변수만 만들어진 것이므로 객체를 생성해줘야 한다.
보통 숫자가 트면 for문을 이용한다.
for(int i = 0; i < mArr.length; i++)
mArr[i] = new Monitor();
만약 수가 작으면 아래처럼 간단히 객체를 생성할 수 있다. 3대 정도를 예로 들면
mArr[0] = new Monitor();
mArr[1] = new Monitor();
mArr[2] = new Monitor();
혹은
처음부터 Monitor[] mArr = { new Monitor(), new Monitor(), new Monitor() }
와 같이 선언할 수 있다.
'Java > Java' 카테고리의 다른 글
Java - sort() (Comparator & Comparable) (0) | 2023.08.31 |
---|---|
Java - 중위 - 후위 표기법 변환 & 후위 표기법 계산 (0) | 2023.08.24 |
Java - Java 배열 (0) | 2023.02.10 |
Java - Java 조건문과 반복문 (0) | 2023.02.10 |
Java - Java 연산자 (0) | 2023.02.09 |