Java 기초 (14) this예약어

코린이서현이·2023년 7월 18일
0

Java

목록 보기
14/46

📕 this 예약어

  • 생성된 인스턴스 스스로를 가리키는 예약어이다.

📒 1. 메소드에서 인스턴스 변수 값 접근

메소드에서 인스턴스 변수 값을 변경할때 사용할 수 있다.

  class Dog {
      String name;

      void name(String name) {
      	//인스턴스 변수 name의 값을 변경          
      	this.name = name;
      }
  }
  public class Method {


      public static void main(String[] args) {
          Dog roaDog = new Dog();
          //인스턴스변수는 설정되지 않으면 null이다.
          System.out.println(roaDog.name);				//null
          roaDog.name("로아");
          System.out.println(roaDog.name);				//로아

      }
  }

✍️실행화면

	null
    로아

🔍 this를 쓰지않으면 어떻게 될까?

case1. 메소드 내의 매개변수명과 인스턴스 변수명이 다른 경우
➡️ 정상적으로 인스턴스변수값을 변경시킨다.
✍️ 실행코드

package test;

class Dog {
	String name;
	
    //메소드의 매개변수명과 인스턴스 변수명이 다르다.
	void name(String n) {
		name = n;
	}
}
public class Method {


	public static void main(String[] args) {
		Dog roaDog = new Dog();
		Dog cocoDog = new Dog();
		
		roaDog.name("로아");
		cocoDog.name("코코");
		System.out.println(roaDog.name);		//로아
		System.out.println(cocoDog.name);		//로아

	}
}

case2. 매개변수명과 인스턴스변수명이 같을때
➡️ 메소드내의 인스턴스변수명으로 생각하지 않고 매개변수로 생각해서 정상작동하지 않는다.

  package test;

  class Dog {
      String name;

      void name(String name) {
          name = name;
      }
  }
  public class Method {


      public static void main(String[] args) {
          Dog roaDog = new Dog();
          Dog cocoDog = new Dog();

          roaDog.name("로아");
          cocoDog.name("코코");
          System.out.println(roaDog.name);			//null
          System.out.println(cocoDog.name);			//null

      }
  }

👉 실행화면
인스턴스변수가 정상설정안되있음을 확인할 수 있다.

	null
    null

📒 2. 생성자 작성

생성자를 만들 때 코드안에 다른 생성자를 불러올 수 있다.

생성자를 직접 설정하면 컴파일러가 디폴트 생성자를 생성해주지 않는다. 따라서 디폴트 생성자를 직접 작성해야하는데, 이때 디폴트 생성자를 이미 직접 만들어 놓은 생성자를 활용해서 만들 수 있다.

   class Persen {
   	String nameString;
   	int age;
   	
   	Persen() { 
   		this("이름없음",1);
   	}
   	
   	Persen(String name, int age) {
   		this.nameString = name;
   		this.age = age;
   	}
   
   }

👉 Persen() 을 사용하면 자동으로 인스턴스 변수가 이름없음,1로 설정됨

📒 3. 인스턴스의 메모리 주소를 반환한다.

참조 변수에는 인스턴스 메모리 주소가 대입되는 걸 배웠다.

this예약어으로 인스턴스의 메모리 주소를 반환할 수 있다.

함수 반환형은 해당 클래스로 설정해야한다.

    	Persen returnThis() {
    		return this;
    	}
    

✍️ 예시코드 : this로 인스턴스 변수 값 변경하기

    class Persen {
    	String nameString;
    	int age;
    	
    	public Persen returnThis() {
    		return this;
    	}
    }
    
    public class CallAnother {
    
    	public static void main(String[] args) {
    		Persen nonamePersen = new Persen();
    		
    		System.out.println(nonamePersen);		
    		Persen persenThis = nonamePersen.returnThis();
    		//persenThis와 nonamePersen은 같은 인스턴스를 가리킨다. 
    
    		nonamePersen.age = 17;
    		System.out.println(nonamePersen.age);
    		persenThis.age = 21;
    		System.out.println(persenThis.age);
    		System.out.println(nonamePersen.age);		
    	}
    
    }

👉 실행화면 : persenThisnonamePersen값 변경을 할 수 있다.

    test.Persen@7c30a502
    17
    21
    21
profile
24년도까지 프로젝트 두개를 마치고 25년에는 개발 팀장을 할 수 있는 실력이 되자!

2개의 댓글

comment-user-thumbnail
2023년 7월 18일

글이 잘 정리되어 있네요. 감사합니다.

1개의 답글