[자바 무료 강의] 현실 세계에 존재하는 것을 객체로 만들다 - 클래스 - 코드라떼
Lesson List button
코스자바로 배우는 프로그래밍
hamburger button
강의현실 세계에 존재하는 것을 객체로 만들다 - 클래스최종수정일 2021-11-21
아이콘약 3분

현실 세계에 존재하는 객체를 프로그래밍의 세계의 객체로 만들기 위해서는 클래스라는 것을 만들어야 합니다. 클래스는 무엇일까요?

추가 노트

목차


  1. 클래스

  2. 인스턴스

  3. 객체, 클래스, 인스턴스의 차이

  4. 객체와 배열 인스턴스

1. 클래스


객체의 생성의 가장 첫 번째 단계는 클래스 생성입니다. 클래스는 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;

이러한 변수는 기본 자료형 변수라고 부릅니다.


2. 인스턴스


자바 인스턴스

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가 출력됩니다.


3. 객체, 클래스, 인스턴스의 차이


객체, 클래스, 인스턴스


객체

객체는 속성과 행위를 가지고 있는 물리적인 것을 포함하여 논리적인 어떤 것, 현실 세계에 존재하는 것을 프로그램으로 구현할 대상입니다.


클래스

클래스는 현실 세계의 객체를 프로그래밍의 세계로 가져와서 실제로 구현한 것입니다. 또한 클래스는 프로그램에서 사용할 인스턴스를 생성하기 위한 틀이라고 볼 수 있습니다.


인스턴스

클래스를 통해 객체를 메모리에 적재한 실체를 인스턴스라고 부릅니다. 그리고 참조 자료형 변수는 인스턴스에 접근할 수 있는 참조값을 저장할 수 있습니다.


관용적으로..

현업에서 엄밀하게 구분해서 얘기하기도 하지만, 대체로 용어를 혼합해서 사용하는 경우가 많습니다.

그래도 대충 무슨 의미인지 알아들을 수 있습니다.

"객체를 생성해라" -> "인스턴스 생성해라 또는 클래스 생성해라"

"객체를 설계하라" -> "클래스 설계해라"

"A객체의 B변수를 가지고.." -> "A클래스의 B변수를 가지고.."

등..

객체와 클래스와 인스턴스는 엄밀하게 구분하여 말해야 하는 상황이 아닌 이상 서로 간의 관계는 떼려야 뗄 수 없는 관계이기 때문에 머릿속에는 커다란 하나의 의미나 그림으로 인식됩니다. 그러므로 엄밀하게 구분하지 않아도 알아들을 수 있습니다.


4. 객체와 배열 인스턴스


배열과 메모리 강의에서 배열 변수에는 하나의 값을 저장하고 배열 인스턴스에는 배열에 저장하는 값들이 저장된다고 했었는데요.

배열 변수에 저장되는 것은 인스턴스에 접근할 수 있는 참조값을 저장합니다. 이 원리는 객체 배열(참조 자료형 배열)에서도 동일합니다.

배열을 선언 시에 기본 자료형(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};

image

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
도전자 질문
아이콘chipmunk(2022-09-22 20:30 작성됨)
array의 2번 index의 메모리주소가 f가 아니라 10아닌가용?
아이콘으르르릉(2022-08-05 16:19 작성됨)
	Person person1 = new Person();
	Person person2 = new Person();
	Person person3 = new Person();
그럼 new Person(); 이 부분으로 참조형변수 Person1,2,3에 각각 Person이란 클래스의 메모리 주소를 저장해서 그 주소를 통해 클래스를 사용한다 이것으로 이해했는데 맞을까요??
그리고 혹시 참조형변수 Person person1 부분을 다른 자료형 person1로 변환도 가능한가요??
아이콘코드라떼(2022-08-06 15:34 작성됨)
안녕하세요. 코드라떼입니다.
다른 자료형 변환과 관련된 것은 상속 파트와 다형성 파트를 공부하시면 해결될 것으로 보입니다 :)

그리고 클래스의 메모리 주소라기보다는 엄밀하게 클래스라는 틀을 이용하여 만들어진 결과물이 힙이라는 메모리에 저장되며 저장된 결과물을 인스턴스라고 부릅니다.

이 인스턴스에 접근하기 위해서는 참조값이 필요한데, new Person()을 통해 인스턴스를 생성하고 참조값을 반환합니다. 반환된 참조값이 참조 자료형 Person person1, Person person2, Person person3에 저장됩니다. 

또한 다음과 같은 아래의 코드는
Person person1 = new Person();
Person person2 = new Person();
Person person3 = new Person();

new Person() 코드를 세 번 작성했으므로 세 개의 인스턴스가 만들어지며 각 인스턴스는 각 참조 자료형 변수에 저장됩니다.

감사합니다.
이용약관|개인정보취급방침
알유티씨클래스|대표, 개인정보보호책임자 : 이병록
이메일 : cs@codelatte.io
사업자등록번호 : 824-06-01921
통신판매업신고 : 2021-성남분당C-0740
주소 : 경기도 성남시 분당구 대왕판교로645번길 12, 9층 24호
파일
파일파일
Root
파일

Output
root$
Lesson List button
코스자바로 배우는 프로그래밍
hamburger button
강의현실 세계에 존재하는 것을 객체로 만들다 - 클래스최종수정일 2021-11-21
아이콘약 3분

현실 세계에 존재하는 객체를 프로그래밍의 세계의 객체로 만들기 위해서는 클래스라는 것을 만들어야 합니다. 클래스는 무엇일까요?

추가 노트

목차


  1. 클래스

  2. 인스턴스

  3. 객체, 클래스, 인스턴스의 차이

  4. 객체와 배열 인스턴스

1. 클래스


객체의 생성의 가장 첫 번째 단계는 클래스 생성입니다. 클래스는 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;

이러한 변수는 기본 자료형 변수라고 부릅니다.


2. 인스턴스


자바 인스턴스

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가 출력됩니다.


3. 객체, 클래스, 인스턴스의 차이


객체, 클래스, 인스턴스


객체

객체는 속성과 행위를 가지고 있는 물리적인 것을 포함하여 논리적인 어떤 것, 현실 세계에 존재하는 것을 프로그램으로 구현할 대상입니다.


클래스

클래스는 현실 세계의 객체를 프로그래밍의 세계로 가져와서 실제로 구현한 것입니다. 또한 클래스는 프로그램에서 사용할 인스턴스를 생성하기 위한 틀이라고 볼 수 있습니다.


인스턴스

클래스를 통해 객체를 메모리에 적재한 실체를 인스턴스라고 부릅니다. 그리고 참조 자료형 변수는 인스턴스에 접근할 수 있는 참조값을 저장할 수 있습니다.


관용적으로..

현업에서 엄밀하게 구분해서 얘기하기도 하지만, 대체로 용어를 혼합해서 사용하는 경우가 많습니다.

그래도 대충 무슨 의미인지 알아들을 수 있습니다.

"객체를 생성해라" -> "인스턴스 생성해라 또는 클래스 생성해라"

"객체를 설계하라" -> "클래스 설계해라"

"A객체의 B변수를 가지고.." -> "A클래스의 B변수를 가지고.."

등..

객체와 클래스와 인스턴스는 엄밀하게 구분하여 말해야 하는 상황이 아닌 이상 서로 간의 관계는 떼려야 뗄 수 없는 관계이기 때문에 머릿속에는 커다란 하나의 의미나 그림으로 인식됩니다. 그러므로 엄밀하게 구분하지 않아도 알아들을 수 있습니다.


4. 객체와 배열 인스턴스


배열과 메모리 강의에서 배열 변수에는 하나의 값을 저장하고 배열 인스턴스에는 배열에 저장하는 값들이 저장된다고 했었는데요.

배열 변수에 저장되는 것은 인스턴스에 접근할 수 있는 참조값을 저장합니다. 이 원리는 객체 배열(참조 자료형 배열)에서도 동일합니다.

배열을 선언 시에 기본 자료형(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};

image

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
도전자 질문
아이콘chipmunk(2022-09-22 20:30 작성됨)
array의 2번 index의 메모리주소가 f가 아니라 10아닌가용?
아이콘으르르릉(2022-08-05 16:19 작성됨)
	Person person1 = new Person();
	Person person2 = new Person();
	Person person3 = new Person();
그럼 new Person(); 이 부분으로 참조형변수 Person1,2,3에 각각 Person이란 클래스의 메모리 주소를 저장해서 그 주소를 통해 클래스를 사용한다 이것으로 이해했는데 맞을까요??
그리고 혹시 참조형변수 Person person1 부분을 다른 자료형 person1로 변환도 가능한가요??
아이콘코드라떼(2022-08-06 15:34 작성됨)
안녕하세요. 코드라떼입니다.
다른 자료형 변환과 관련된 것은 상속 파트와 다형성 파트를 공부하시면 해결될 것으로 보입니다 :)

그리고 클래스의 메모리 주소라기보다는 엄밀하게 클래스라는 틀을 이용하여 만들어진 결과물이 힙이라는 메모리에 저장되며 저장된 결과물을 인스턴스라고 부릅니다.

이 인스턴스에 접근하기 위해서는 참조값이 필요한데, new Person()을 통해 인스턴스를 생성하고 참조값을 반환합니다. 반환된 참조값이 참조 자료형 Person person1, Person person2, Person person3에 저장됩니다. 

또한 다음과 같은 아래의 코드는
Person person1 = new Person();
Person person2 = new Person();
Person person3 = new Person();

new Person() 코드를 세 번 작성했으므로 세 개의 인스턴스가 만들어지며 각 인스턴스는 각 참조 자료형 변수에 저장됩니다.

감사합니다.
이용약관|개인정보취급방침
알유티씨클래스|대표, 개인정보보호책임자 : 이병록
이메일 : cs@codelatte.io|운영시간 09:00 - 18:00(평일)
사업자등록번호 : 824-06-01921|통신판매업신고 : 2021-성남분당C-0740
주소 : 경기도 성남시 분당구 대왕판교로645번길 12, 9층 24호(경기창조혁신센터)
파일
파일파일
Root
파일

Output
root$