현실 세계에 존재하는 객체를 프로그래밍의 세계의 객체로 만들기 위해서는 클래스라는 것을 만들어야 합니다. 클래스는 무엇일까요?
ㅤ
객체의 생성의 가장 첫 번째 단계는 클래스 생성입니다. 클래스는 class
키워드를 이용하여 클래스를 만들 수 있습니다.
class Person {
}
그리고 클래스를 통해 객체 인스턴스를 만들 수 있습니다.
Person person = new Person();
맨 앞의 Person을 참조 자료형이라고 부릅니다.
우리가 여태까지 배웠던 byte
, short
, int
, long
, float
, double
, char
, boolean
은 기본 자료형(primitive type) 이라 부르지만 class
를 통해 만들어진 자료형을 참조 자료형(reference type) 이라고 부릅니다. 참조 자료형은 우리가 알게 모르게 사용한 String
, Scanner
등이 있습니다.
Person person;
그리고 이러한 변수를 참조 자료형 변수라고 부릅니다.
int num;
이러한 변수는 기본 자료형 변수라고 부릅니다.
ㅤ
new
키워드를 통해 생성된 객체를 인스턴스라고 부르며 클래스를 인스턴스화했다고도 하고, 객체를 메모리에 적재했다고도 부릅니다. 다 유사한 의미입니다.
new Person();
new라는 키워드는 새로 만든다는 의미입니다. 인스턴스는 생성될 때 마다 별도의 메모리 공간에 적재됩니다.
Person person1 = new Person();
Person person2 = new Person();
// person1 참조 자료형 변수에 저장된 인스턴스 참조값과
// person2 참조 자료형 변수에 저장된 인스턴스 참조값은 서로 다르다.
// (인스턴스 끼리 적재된 메모리 공간이 다르다)
예시로 메모리 주소가 같은 인스턴스 인지 확인해 보는 방법은 일반적으론 비교 연산자(==
)를 통해 확인할 수 있습니다.
Person person1 = new Person();
Person person2 = new Person();
System.out.println(person1 == person2); // false
두 변수는 서로 다른 인스턴스를 참조하고 있으므로 false가 출력됩니다.
Person person1 = new Person();
Person person2 = person1;
System.out.println(person1 == person2); // true
person1 참조 자료형 변수와 person2 참조 자료형 변수는 같은 인스턴스를 참조하고 있으므로 true가 출력됩니다.
ㅤ
ㅤ
객체는 속성과 행위를 가지고 있는 물리적인 것을 포함하여 논리적인 어떤 것, 현실 세계에 존재하는 것을 프로그램으로 구현할 대상입니다.
ㅤ
클래스는 현실 세계의 객체를 프로그래밍의 세계로 가져와서 실제로 구현한 것입니다. 또한 클래스는 프로그램에서 사용할 인스턴스를 생성하기 위한 틀이라고 볼 수 있습니다.
ㅤ
클래스를 통해 객체를 메모리에 적재한 실체를 인스턴스라고 부릅니다. 그리고 참조 자료형 변수는 인스턴스에 접근할 수 있는 참조값을 저장할 수 있습니다.
ㅤ
현업에서 엄밀하게 구분해서 얘기하기도 하지만, 대체로 용어를 혼합해서 사용하는 경우가 많습니다.
그래도 대충 무슨 의미인지 알아들을 수 있습니다.
"객체를 생성해라" -> "인스턴스 생성해라 또는 클래스 생성해라"
"객체를 설계하라" -> "클래스 설계해라"
"A객체의 B변수를 가지고.." -> "A클래스의 B변수를 가지고.."
등..
객체와 클래스와 인스턴스는 엄밀하게 구분하여 말해야 하는 상황이 아닌 이상 서로 간의 관계는 떼려야 뗄 수 없는 관계이기 때문에 머릿속에는 커다란 하나의 의미나 그림으로 인식됩니다. 그러므로 엄밀하게 구분하지 않아도 알아들을 수 있습니다.
ㅤ
배열과 메모리 강의에서 배열 변수에는 하나의 값을 저장하고 배열 인스턴스에는 배열에 저장하는 값들이 저장된다고 했었는데요.
배열 변수에 저장되는 것은 인스턴스에 접근할 수 있는 참조값을 저장합니다. 이 원리는 객체 배열(참조 자료형 배열)에서도 동일합니다.
배열을 선언 시에 기본 자료형(int, long, double, boolean 등)뿐만 아니라 참조 자료형(String, Person, 그 외) 배열을 만들 수 있습니다.
일반적으론 Person 참조 자료형 배열을 만들면 Person 인스턴스만 배열에 저장할 수 있으며 다른 자료형 인스턴스를 저장할 수 없습니다.
만약에 아래와 같은 예시 코드를 작성하고 실행한다면 다음과 같은 상황이 됩니다.
예시 코드
Person[] array = new Person[6];
array[0] = new Person();
array[1] = new Person();
array[2] = new Person();
또는
Person[] array = new Person[] {new Person(), new Person(), new Person(), null, null, null};
Person[] array
변수는 Person 인스턴스를 저장할 수 있는 배열 인스턴스 new Persion[6]
에 접근할 수 있는 참조값을 저장하며 배열 인스턴스의 각 공간은 여러 개의 Person 인스턴스의 참조값을 저장합니다.
참조 자료형 배열 인스턴스에 아무것도 저장하지 않은 경우는 기본적으로 null
값을 저장하고 있습니다.
Person[] array = new Person[6];
System.out.println(array[0]);
System.out.println(array[1]);
System.out.println(array[2]);
System.out.println(array[3]);
System.out.println(array[4]);
System.out.println(array[5]);
// 출력 시
null
null
null
null
null
null
현실 세계에 존재하는 객체를 프로그래밍의 세계의 객체로 만들기 위해서는 클래스라는 것을 만들어야 합니다. 클래스는 무엇일까요?
ㅤ
객체의 생성의 가장 첫 번째 단계는 클래스 생성입니다. 클래스는 class
키워드를 이용하여 클래스를 만들 수 있습니다.
class Person {
}
그리고 클래스를 통해 객체 인스턴스를 만들 수 있습니다.
Person person = new Person();
맨 앞의 Person을 참조 자료형이라고 부릅니다.
우리가 여태까지 배웠던 byte
, short
, int
, long
, float
, double
, char
, boolean
은 기본 자료형(primitive type) 이라 부르지만 class
를 통해 만들어진 자료형을 참조 자료형(reference type) 이라고 부릅니다. 참조 자료형은 우리가 알게 모르게 사용한 String
, Scanner
등이 있습니다.
Person person;
그리고 이러한 변수를 참조 자료형 변수라고 부릅니다.
int num;
이러한 변수는 기본 자료형 변수라고 부릅니다.
ㅤ
new
키워드를 통해 생성된 객체를 인스턴스라고 부르며 클래스를 인스턴스화했다고도 하고, 객체를 메모리에 적재했다고도 부릅니다. 다 유사한 의미입니다.
new Person();
new라는 키워드는 새로 만든다는 의미입니다. 인스턴스는 생성될 때 마다 별도의 메모리 공간에 적재됩니다.
Person person1 = new Person();
Person person2 = new Person();
// person1 참조 자료형 변수에 저장된 인스턴스 참조값과
// person2 참조 자료형 변수에 저장된 인스턴스 참조값은 서로 다르다.
// (인스턴스 끼리 적재된 메모리 공간이 다르다)
예시로 메모리 주소가 같은 인스턴스 인지 확인해 보는 방법은 일반적으론 비교 연산자(==
)를 통해 확인할 수 있습니다.
Person person1 = new Person();
Person person2 = new Person();
System.out.println(person1 == person2); // false
두 변수는 서로 다른 인스턴스를 참조하고 있으므로 false가 출력됩니다.
Person person1 = new Person();
Person person2 = person1;
System.out.println(person1 == person2); // true
person1 참조 자료형 변수와 person2 참조 자료형 변수는 같은 인스턴스를 참조하고 있으므로 true가 출력됩니다.
ㅤ
ㅤ
객체는 속성과 행위를 가지고 있는 물리적인 것을 포함하여 논리적인 어떤 것, 현실 세계에 존재하는 것을 프로그램으로 구현할 대상입니다.
ㅤ
클래스는 현실 세계의 객체를 프로그래밍의 세계로 가져와서 실제로 구현한 것입니다. 또한 클래스는 프로그램에서 사용할 인스턴스를 생성하기 위한 틀이라고 볼 수 있습니다.
ㅤ
클래스를 통해 객체를 메모리에 적재한 실체를 인스턴스라고 부릅니다. 그리고 참조 자료형 변수는 인스턴스에 접근할 수 있는 참조값을 저장할 수 있습니다.
ㅤ
현업에서 엄밀하게 구분해서 얘기하기도 하지만, 대체로 용어를 혼합해서 사용하는 경우가 많습니다.
그래도 대충 무슨 의미인지 알아들을 수 있습니다.
"객체를 생성해라" -> "인스턴스 생성해라 또는 클래스 생성해라"
"객체를 설계하라" -> "클래스 설계해라"
"A객체의 B변수를 가지고.." -> "A클래스의 B변수를 가지고.."
등..
객체와 클래스와 인스턴스는 엄밀하게 구분하여 말해야 하는 상황이 아닌 이상 서로 간의 관계는 떼려야 뗄 수 없는 관계이기 때문에 머릿속에는 커다란 하나의 의미나 그림으로 인식됩니다. 그러므로 엄밀하게 구분하지 않아도 알아들을 수 있습니다.
ㅤ
배열과 메모리 강의에서 배열 변수에는 하나의 값을 저장하고 배열 인스턴스에는 배열에 저장하는 값들이 저장된다고 했었는데요.
배열 변수에 저장되는 것은 인스턴스에 접근할 수 있는 참조값을 저장합니다. 이 원리는 객체 배열(참조 자료형 배열)에서도 동일합니다.
배열을 선언 시에 기본 자료형(int, long, double, boolean 등)뿐만 아니라 참조 자료형(String, Person, 그 외) 배열을 만들 수 있습니다.
일반적으론 Person 참조 자료형 배열을 만들면 Person 인스턴스만 배열에 저장할 수 있으며 다른 자료형 인스턴스를 저장할 수 없습니다.
만약에 아래와 같은 예시 코드를 작성하고 실행한다면 다음과 같은 상황이 됩니다.
예시 코드
Person[] array = new Person[6];
array[0] = new Person();
array[1] = new Person();
array[2] = new Person();
또는
Person[] array = new Person[] {new Person(), new Person(), new Person(), null, null, null};
Person[] array
변수는 Person 인스턴스를 저장할 수 있는 배열 인스턴스 new Persion[6]
에 접근할 수 있는 참조값을 저장하며 배열 인스턴스의 각 공간은 여러 개의 Person 인스턴스의 참조값을 저장합니다.
참조 자료형 배열 인스턴스에 아무것도 저장하지 않은 경우는 기본적으로 null
값을 저장하고 있습니다.
Person[] array = new Person[6];
System.out.println(array[0]);
System.out.println(array[1]);
System.out.println(array[2]);
System.out.println(array[3]);
System.out.println(array[4]);
System.out.println(array[5]);
// 출력 시
null
null
null
null
null
null