인스턴스에 대하여 알아볼 차례다. 음... 인스턴스라... 영어를 배웠지만 일상용어는 아닌 것 같다.
TOEIC 에서 for instance : 예를 들면 이라고 배운 것 같기도 하다.
dictionary.com 의 정의는 이렇다.
1. a case or occurrence of anything
- 어떤 사건, 케이스
2. an example put forth in proof or illustration
- 증명이나 보여주기 위한 예시
네이버 사전에는 '사례' 혹은 '경우' 라고 나와있다.
위키백과의 정의는
객체 지향 프로그래밍에서 인스턴스(instance)는 해당 클래스의 구조로 컴퓨터 저장공간에서 할당된 실체를 의미한다.
라고 한다.
사건, 케이스, 예시, 경우, 실체 정도의 단어가 관련되어 있는 것 같다.
자바에서 인스턴스는 new 키워드로 메모리에 생성된 상태를 말한다.
Object op1 = new Object( );
new 키워드로 생성하여 Object 형 참조 변수 op1 에 할당한다.
인스턴스는 여러개 만들 수 있다.
Object op2 = new Object( );
Object op3 = new Object( );
Object op4 = new Object( );
이렇게 하면 op1 부터 op4 까지 서로 다른 메모리 주소를 가지는 4개의 인스턴스가 생성된다. 4개의 예시이자 4개의 경우가 실체가 된다.
4개의 인스턴스가 생긴 것이다. 클래스는 Object 클래스 하나이고 이 클래스는 객체를 코드로 옮겨 놓은 것이다.
*객체는 객체와 클래스에 이야기 한 것 처럼 대상이 되는 사물을 말한다.
https://digiconfactory.tistory.com/39
* 객체를 코드로 구현해 놓으면 클래스이다. (붕어빵틀 비유도 많이 한다.)
* 클래스를 메모리에 생성하면 인스턴스가 된다. 클래스는 한개지만 인스턴스는 여러개 만들 수 있다.
* 메모리의 인스턴스도 프로그램안에서 작용의 대상이 되므로 객체라고 부른다.
인스턴스가 뭔지 알기 위해서 객체, 클래스를 먼저 알아야 한다.
다음 예제에서 클래스의 인스턴스를 생성해 본다.
<예제>
OppLesson 이란 클래스 안에 a1,b1,c1 세개의 클래스 변수를 선언한다.
public static void main 함수는 자바의 출발점이다. JVM (자바가상머신)이 자바 프로그램을 시작할때 가장 먼저 실행하는 클래스 함수이다. 첫번째 줄에서 new 키워드로 opp1 클래스를 메모리에 만든다. opp1 은 이 인스턴스를 가리키는 변수이다 (참조 변수) opp1을 가지고 이 클래스를 조작할 수 있게된다.
아래 화면 처럼 setter와 getter를 만들었다. (이클립스에서 해당 클래스 파일 오른쪽 클릭 Source -> Generate Getters and Setters 를 클릭 후 멤버변수들의 체크박스를 누르면 쉽게 만들어진다. 타자 칠 필요가 없다)
opp1.메서드 처럼 사용하면 된다.
setter 로 멤버변수의 값을 할당하고 getter 로 main 함수 내의 지역변수에 할당한다. 주의할 점은 main 함수내 선언된 a1,b1,c1과 바깥쪽 a1,b1,c1 은 같은 변수가 아니다. 설명을 위해 일부러 같게 만들었다. 두번 선언되도 컴파일이 되는 것은 한쪽은 클래스 변수들이고 한쪽은 main 함수의 지역변수이기 때문이다.
결과값이 잘 나왔다. 지금 이것은 하나의 파일(클래스)에서 만들었다. 이렇게 자신의 클래스를 자신의 main 함수에서 생성할 수도 있지만 프로그램과 객체의 성격에 따라 클래스를 잘 분리하는 것이 중요하다.