New 연산자
클래스를 사용하려면 클래스에 메모리를 할당하고 사용하여야 한다.
그 때 사용하는 연산자가 바로 new 이다.
형식은 아래와 같다.
new 클래스명()
그리고 이렇게 선언되어서 메모리가 부여된 하나의 클래스를 객체라고 말한다.
1) 클래스의 Type
자바에는 기본적인 자료형이 있다.
예를 들어 int a=3; 에서 int는 메모리 4바이트를 할당한다.
위에서 만들었던 Sungjuk() 클래스를 new 연산자로 선언하면 Sungjuk() 클래스에 메모리가 할당된다.
이런 형태로 메모리가 할당되는 것을 참조 자료형(reference)이라고 부른다.
이 참조 자료형에 메모리가 할당되는 방식은 RAM(Random Access Memory)의 heap 영역에 메모리가 할당되고 주소값이 발생되면서 진행이 된다.
2) 참조형에는 번지가 있어요
좀 더 쉽게 접근해보자.
int는 자료형이 정해져있다.
하지만 Sungjuk 클래스를 new Sungjuk()으로 메모리를 할당해서 선언했다.
이 클래스의 자료형은 무엇일까?
정답은 알 수 없다.
이것은 굉장히 획기적인 개념이다.
왜냐하면 기본형 변수에 넣어서만 사용했던 것들과는 달리 넣어지는 값들을 다양하게 사용할 수 있기 때문이고,
이렇게 되면 다양한 기능과 특성을 만들고 사용할 수 있다는 뜻이기 때문이기도 하다.
그래서 참조형 변수는 자료형(Date Type)이 아니라 그냥 형태, 즉 타입(Type)이라고 부른다.
int a = 10;
int b = 10;
a == b // 두 값이 10인지 비교
위의 int 자료형으로 선언된 a와 b는 각각의 값이 정수형 데이터인 10을 갖고 있고, 이 둘이 같은지 비교한다.
String a = "a";
a = a + "b";
String b = "ab";
a != b // a와 b 둘 다 "ab"라는 값을 갖지만, "ab"를 참조하는 메모리 주소값이 같은지 비교하기에 같지 않다고 나온다
하지만 String이라는 클래스로 선언된 a와 b이 갖고 있는 "ab"를 비교할 때는 달라진다.
데이터 값이 아니라 클래스가 갖고 있는 값이 가진 메모리의 주소값을 비교하기 때문이다.
이 주소값을 우리는 편하게 번지라고 부른다.
자 다시 돌아가서 new 연산자를 사용해서 sungjuk 클래스를 편하게 사용해보자.
// sj는 참조변수(reference) : 메모리가 할당된 곳의 주소를 기억한다
Sungjuk sj= new Sungjuk(); // 예) 50번지
sj.name="손흥민";
sj.kor=100;
sj.eng=95;
sj.mat=90;
// sj.aver 에러. private 속성은 클래스 외부에서 접근 불가능
sj.calc();
sj.disp();
// sj.view(); 에러. private 속성은 클래스 외부에서 접근 불가능
sj 라는 참조변수를 만들어 sungjuk 클래스의 주소를 기억시켰다(그것이 50번지라면 #50으로 기억한다).
이제부턴 sj. 만 사용해도 성적 안에 만들어둔 여러 요소들을 사용할 수 있다.
sj라는 변수가 sungjuk 클래스의 요소들의 주소값들을 모두 가지고 있기 때문이다.
위를 바탕으로 아래의 값을 입력했다.
Sungjuk one=new Sungjuk();
one.name="박지성";
one.kor=20;
one.eng=30;
one.mat=35;
one.calc();
one.disp();
Sungjuk two=new Sungjuk();
two.name="김연아";
two.kor=20;
two.eng=30;
two.mat=35;
two.calc();
two.disp();
이렇게 new를 사용하면 객체가 만들어지고 객체에 주소값을 부여하게 된다.
이것을 인스턴스, 라고 부른다.
'⁂ Java > : 기본 익히기' 카테고리의 다른 글
[JAVA] #5-4 String 메서드 (0) | 2022.09.08 |
---|---|
[JAVA] #5-3 생성자 함수(Constructor) (0) | 2022.09.08 |
[JAVA] #5-1 클래스(Class) (2) | 2022.09.08 |
[JAVA] #4-4 메인(main) (0) | 2022.09.07 |
[JAVA] #4-3 자바의 함수 호출 방식 (0) | 2022.09.07 |