본문 바로가기
프로그래밍 언어/java

[java] this와 참조자료형

by m2162003 2021. 2. 24.

자바뿐만 아니라 다른 프로그래밍 언어에서도 this를 사용한다.

this의 정확한 역할에 대해 알아보자

 

this의 역할

자신의 메모리를 가리킨다.

생성자에서 다른 생성자를 호출한다.

인스턴스 자신의 주소를 반환한다.

 

 

1. 자신의 메모리를 가리킨다.

패캠 자료

day는 참조 변수로 인스턴스의 주소값을 가리킨다.

day의 메서드인 setYear에서 this를 사용한다.

 

public class MyDate {
	
	private int year;
	
	public void setYear(int year) {
		this.year = year;
	}
}

이 때 this를 사용하는 이유는 매개변수와 멤버변수를 구분하기 위해서이다.

만약 매개변수가 year이 아니라 y였다면 this를 붙이지 않고 year = y가 가능하다.

하지만 매개변수가 year라면 year = year이 되어 구분이 되지 않는다.

 

2. 생성자에서 다른 생성자 호출


public class Person {
	String name;
	int age;
	
	public Person() {
		this("초기값 없음", 1);
	}
	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}

}

이런 식으로 this를 사용해서 초기값 설정이 가능하다.

 

3. 자기 주소를 반환하는 this

public class Person {
	String name;
	int age;
	
	public Person() {
		this("초기값 없음", 1);
	}
	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}

	public Person getSelf() {
		return this;
	}
}

이렇게 된다.

 

 

참조자료형

int, long, double 등등..은 기본 자료형이다.

대문자로 시작하는 String, Data 는 참조자료형으로 클래스형으로 변수를 선언한다.

 

자료형을 커스텀할 수 있다는 것이다. c의 구조체와 유사하다고 보면 될 것 같다.

참조 자료형을 사용하기 위해선 생성자에서 인스턴스 생성을 해줘야 한다. 클래스형이기 때문!

 

Integer, Double 등 대문자로 시작하는 자료형은 전부 참조 자료형이다. java 라이브러리에 선언된 데이터 타입

왜 쓸까?

call by reference로 사용하기 위함이다.

기본 자료형은 call by value지만 참조 자료형은 call by reference로 작동한다.

 

package referenced;

public class Student {

	int studentId;
	String studentName;
	
	Subject korea;
	Subject math;
	
	public Student(int id, String name) {
		studentId = id;
		studentName = name;
		korea = new Subject();
		math = new Subject();
	}
}
public class Subject {
	int subjectID;
	int score;
}

댓글