메소드에서 인스턴스 변수 값을 변경할때 사용할 수 있다.
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
생성자를 만들 때 코드안에 다른 생성자를 불러올 수 있다.
생성자를 직접 설정하면 컴파일러가 디폴트 생성자를 생성해주지 않는다. 따라서 디폴트 생성자를 직접 작성해야하는데, 이때 디폴트 생성자를 이미 직접 만들어 놓은 생성자를 활용해서 만들 수 있다.
class Persen {
String nameString;
int age;
Persen() {
this("이름없음",1);
}
Persen(String name, int age) {
this.nameString = name;
this.age = age;
}
}
👉 Persen()
을 사용하면 자동으로 인스턴스 변수가 이름없음,1
로 설정됨
참조 변수에는 인스턴스 메모리 주소가 대입되는 걸 배웠다.
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);
}
}
👉 실행화면 : persenThis
로 nonamePersen
값 변경을 할 수 있다.
test.Persen@7c30a502
17
21
21
글이 잘 정리되어 있네요. 감사합니다.