Java
레퍼런스 타입과 레퍼런스 변수
Ms.Pudding
2022. 1. 7. 03:16
A a = new A(1)
A는 레퍼렌스 타입 (객체x)
a는 레퍼렌스 변수 (객체 )
New A는 객체가 만들어지는게 아니라 , 메모리 공간을 만드는 것임 , 객체는 레퍼렌스 타입 앞에 있는 a를 객체로 부름
A a = new A(1);
A b = a;
로 정의하면 b의 값은 A라는 메모리안에 들어감 (레퍼렌스 )
그래서 a==b true 나옴
A a = new A(1) 도 만들고,
A b = new A(1);
로 b라는 객체를 또 만들면
a==b는 false임
New 로 b가 들어갈 메모리 공간을 하나 더 만들었움
a와 b의 겂이 같아도 메모리가 다른 공간이여서 , id값은 다르게 나옴
Public static void Reference(){
A a = new A(1);
A b = a;
b.id = 2;
A c = b;
c.id = 3;
System.out.println(a.id);
System.out.println(b.id);
System.out.println(c.id);
}
class A{
public int id;
A(int id){
this.id = id;
}
}
==> 3,3,3
레퍼렌스 타입은 같은 공간을 공유하고 있다, 만약 A라는 타입에 객체 a,b,c를 만든다면
모두 같은 공간이기 떄문에 어느 하나를 수정하면 모두의 값이 바뀌게 된다.
Nara Spain = new Nara();
여기서 레퍼렌스 타입은 Nara, 레퍼렌스 변수 (객체)는 Spain
public class Olympic {
public static void main(String[] args){
//referece variable( new nara까지만 ref varibale임)
//ref는 ref를 포함하고 있는 경우도 있음 new sudo를 더해줌
Nara Spain = new Nara(new Sudo("Barcelona"),1992);
Nara Ghana = new Nara(new Sudo("Akura"));
Nara Space = new Nara(10000000);
String first = Spain.say();
System.out.println(first);
int second = Spain.date();
System.out.println(second);
String third = Ghana.say();
System.out.println(third);
int fourth = Space.date();
System.out.println(fourth);
}
}
class Nara{
//private String capital = "";을 쓰려고 했는데,
//ref 를 만들 때는 ""를 쓸 수 없음
//""은 String에서만 쓸 수 있음
private Sudo capital = null;
private int year = 0;
public Nara(Sudo capital,int year){
this.capital = capital;
this.year = year;
}
//오버로딩
public Nara(Sudo capital){
this.capital = capital;
}
public Nara(int year){
this.year = year;
}
public String say(){
return capital.capital;
}
public int date(){
return year;
}
}
class Sudo{
public String capital = "";
public Sudo(String capital){
this.capital = capital;
}
}
위의 코드에서 say()메소드의 return capital.capitald은 sudo 레퍼런스 capital 변수에서 가져오는 과정임.
레퍼렌스 변수는 이런식으로 함 !!
레퍼렌스 변수를 사용하여 리스트를 만들어보자 !
public class SMent{
public static void main(String[] args){
//레퍼런스 객체 도안을 만들어줌, 아직 new SM으로 안했기 때문에 , 객체가 생성된 것이 아니다.
List<SM> aespa = new ArrayList<SM>();
//SM타입의 레퍼렌스 객체들이 생성되었다. 리스트에서 레퍼렌스 객체를 만들때는
//미리 new SM으로 하지않고 리스트에 넣어가면서 만들어준다.
aespa.add(new SM("Karina",1));
aespa.add(new SM("Ningning",2));
aespa.add(new SM("winter",3));
aespa.add(new SM("giselle",4));
for(SM item : aespa){
System.out.println(item.getName);
}
}
}
class SM{
private String name="";
private int number =0 ;
public SM(String name,int number){
this.name = name;
this.number = number;
}
public String getName() {
return this.name;
}
}