[Java] this 키워드

임혜정 ·2021년 5월 17일
1

Java

목록 보기
9/16
post-thumbnail

this : 자기 자신을 나타낸다.


This의 역할


  • 자기 자신의 메모리를 가리키는 역할을 한다.
  • 생성자에서 다른 생성자를 호출 하는 역할을 한다
  • 인스턴스가 자기 자신의 주소를 반환할 때 사용한다


자기 자신의 메모리를 가리키는 this


Student s1 = new Student(); 라는 인스턴스를 생성시켜서 this 를 사용한다면,

  • s1는 heap 메모리에 있는 해당 인스턴스의 메모리 위치를 가리키고있다
  • this는 s1이 가리키는 인스턴스의 메모리 위치를 똑같이 가리키는 역할을 한다.
  • this는 하나의 클래스에 멤버변수명과 파라미터변수명이 같을 경우에 멤버변수를 가리키는 용도로 사용된다.
    • this.변수명 으로 접근한다.



생성자에서 다른 생성자를 호출하는 this


  • Person class 에서 name, age 멤버 변수를 선언한다.
  • 1번 : 생성자 안에 this() 처럼, 2번의 생성자를 호출하는 역할로 this를 사용할 수 있다.
    • 이때 this() 괄호 안에는 호출하는 생성자의 매개변수인 String name과 int age가 들어가야한다.
    • 초기화 값을 주기 위해 "이름없음"과 1을 입력해 주었다.
  • 2번 : 자기 자신을 가리키는 this 이다.
class Person{
	String name;
	int age;
    
	//1번
	public Person() {
		this("이름없음 ", 1);
	}
	
    	//2번
	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}
	
	public void showPersononInfo() {
		System.out.println(name+","+age);
	}
}

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Person p1 = new Person();
		p1.showPersononInfo(); // 이름없음, 1 
		
		Person p2 = new Person("이매정 ", 10 );
		p2.showPersononInfo(); // 이매정, 10  

	}

}

호출을 위해 사용하는 this()는 항상 첫 문장으로 사용 되어야 한다.

아래와 같은 경우는 에러가 발생한다.

public Person() {
		age=10; // 땡 !!!!!!
		this("이름없음 ", 1);
	}



자기 자신의 주소를 가리킬 때의 this


this : 자기 자신을 가리킨다.

public Person getSelf() {
		return this;
	}
  • Person은 참조형이다
  • p1, p2는 객체의 주소를 담고있는 참조변수 이다.
  • 따라서 p1, p2를 출력해주면 heap 메모리의 주소가 나온다
  • p2.getself() 또한 p2의 객체를 의미하므로 p 참조변수도 p2가 가리키는곳과 동일한 곳을 가리키도록 한다.

전체코드

class Person{
	String name;
	int age;
	
	public Person() {
		this("이름없음 ", 1);
	}

	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}
	
	public void showPersononInfo() {
		System.out.println(name+","+age);
	}
	
	public Person getSelf() {
		return this;
	}
}

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Person p1 = new Person();
		p1.showPersononInfo(); // 이름없음, 1 
		
		Person p2 = new Person("이매정 ", 10 );
		p2.showPersononInfo(); // 이매정, 10  
		
        //2번 
		System.out.println(p2);
		
        //1번 
		Person p = p2.getSelf();
		System.out.println(p);

	}

}

this

  • 해당 클래스에 이미 작성된 생성자를 호출할 때 사용 된다.
  • 가장 입력 인자가 많은 생성자를 this로 호출해 필요한 부분만 따로 초기화 값을 지정해준다.
  • 생성자를 호출하는 경우로 this()를 사용하는경우, 실행문에 첫 줄에만 사용 가능하다.
    • 다른코드 아래에 사용할 경우 에러가 발생한다
  • this();는 기본생성자를 호출하는 것이고, 파라미터 생성자 호출시 ()안에 입력변수를 입력해야한다
  • this를 사용하는 이유 : 코드 중복을 최소화하여 실수를 방지 하기 위하여 사용한다
    • 코드의 중복은 최소화 할 수록 좋은 코드가 된다.
profile
포기하지 않고 끝까지 🐥

0개의 댓글

관련 채용 정보