JAVA 11강 this

YEONG EUN LEE (Chloe)·2023년 12월 20일
0

JAVA 기초

목록 보기
16/42
post-thumbnail

this와 this()

this

정의

this : this 키워드를 가지고 있는 인스턴스(클래스 본제본 == 객체) ---> 메소드, 생성자에서 사용가능 순서 상관 없음

조건

  1. 반드시 멤버 앞에만 붙일 수가 있다.
  2. this를 감싸고 있는 클래스 복제본 자신의 객체 ---> 생성자,메소드 둘 다에서 사용할 수 있음. 해당 클래스 복제본 자신의 객체를 의미하는 용어임.

this()

정의

this(): this(); ---> 인스턴스 기본생성자 호출문, this(매개 변수); 인스턴스 해당 케이스의 생성자를 호출하는 호출문

조건

  1. 반드시 나와는 다른 생성자를 호출해야함 ex) this(); --> 기본생성자 호출
  2. 반드시 생성자 안의 가장 맨 첫줄에만 가능함.
public class ExClass {

	int a;
	
	public ExClass( ){ // 기본생성자 : 매개변수가 없기 때문
	//1) this.a = 5; // this 키워드 사용
	//2) this(5); // 나와 다른 생성자 호출 하는 것.
	System.out.println("기본 생성자 생성");





	}

	public ExClass(int a){ // 기타생성자 : 매개변수가 있기 때문
	this.a = a; // this 라는 키워드는 멤버변수 앞에서만 사용할 수 있음. this라는 멤버변수 호출은 생성자, 메소드 상관없이 사용할 수 있음.
	System.out.println(a);
	this( )// error 발생, this라는 생성자 호출문은 기본 생성자 호출 + 반드시 생성자 첫줄에 기술해야함.




	}

	public void setA(int a){ // 메소드 : 리턴타입이 있기 때문
	system.out.println("a의 현재값 : " + a); // this 키워드 사용 -> 메소드 안에도 사용될 수 있음.
	this.a = a;

	}
   }

예시1)

public class ExClass {

	int a;
	
	public ExClass( ){ // 기본생성자 : 매개변수가 없기 때문
	this.a = 5; // this 키워드 사용
	System.out.println("기본 생성자 생성");





	}

	public ExClass(int a){ // 기타생성자 : 매개변수가 있기 때문
	this.a = a; // this 라는 키워드는 멤버변수 앞에서만 사용할 수 있음. this라는 멤버변수 호출은 생성자, 메소드 상관없이 사용할 수 있음.
	System.out.println(a);



	}

	public void setA(int a){ // 메소드 : 리턴타입이 있기 때문
	system.out.println("a의 현재값 : " + a); // this 키워드 사용 -> 메소드 안에도 사용될 수 있음.
	this.a = a;

	}
   }

예시2)

public class ExClass {

	int a;
	
	public ExClass( ){ // 기본생성자 : 매개변수가 없기 때문
	this(5); // 나와 다른 생성자 호출 하는 것.
    this(); // 기본생성자안에서는 this();인 기본생성자 호출문을 사용할 수 없음
    // this will occur error.
	System.out.println("기본 생성자 생성");
	}

	public ExClass(int a){ // 기타생성자 : 매개변수가 있기 때문
	this.a = a; // this 라는 키워드는 멤버변수 앞에서만 사용할 수 있음. this라는 멤버변수 호출은 생성자, 메소드 상관없이 사용할 수 있음.
	System.out.println(a);

	}

	public void setA(int a){ // 메소드 : 리턴타입이 있기 때문
	system.out.println("a의 현재값 : " + a); // this 키워드 사용 -> 메소드 안에도 사용될 수 있음.
	this.a = a;

	}
   }

예시3)

public class ExClass {

	int a;
	
	public ExClass( ){ // 기본생성자 : 매개변수가 없기 때문
	this(5); // 나와 다른 생성자 호출 하는 것.
	System.out.println("기본 생성자 생성");

	}

	public ExClass(int a){ // 기타생성자 : 매개변수가 있기 때문
	this.a = a; // this 라는 키워드는 멤버변수 앞에서만 사용할 수 있음. this라는 멤버변수 호출은 생성자, 메소드 상관없이 사용할 수 있음.
	System.out.println(a);
	this( )// error 발생, this라는 생성자 호출문은 기본 생성자 호출 + 반드시 생성자 첫줄에 기술해야함.




	}

	public void setA(int a){ // 메소드 : 리턴타입이 있기 때문
	system.out.println("a의 현재값 : " + a); // this 키워드 사용 -> 메소드 안에도 사용될 수 있음.
	this.a = a;

	}
   }

예시4)

public class ExClass {

	int a;
	
	public ExClass( ){ // 기본생성자 : 매개변수가 없기 때문
	this(5); // 나와 다른 생성자 호출 하는 것.
	System.out.println("기본 생성자 생성");
	}

	public ExClass(int a){ // 기타생성자 : 매개변수가 있기 때문
    this( )// 프로그램 다운 발생! 기본생성자와 기타생성자를 반복해서 호출하기 때문
	this.a = a; // this 라는 키워드는 멤버변수 앞에서만 사용할 수 있음. this라는 멤버변수 호출은 생성자, 메소드 상관없이 사용할 수 있음.
	System.out.println(a);
	}

	public void setA(int a){ // 메소드 : 리턴타입이 있기 때문
	system.out.println("a의 현재값 : " + a); // this 키워드 사용 -> 메소드 안에도 사용될 수 있음.
	this.a = a;

	}
   }
	String name;
	int age;
	
	Person(){
		this("이름 없음", 1);
	}
	Person(String name, int age){
		this.name = name;
		this.age = age;
	}
	Person returnItSelf() {
		return this; // 객체의 주소값 반환
	}
}

public class CallAnotherConst {
	public static void main(String[] args) {
	 Person noName = new Person();
	 System.out.println(noName.name);
	 System.out.println(noName.age);

	 Person p = noName.returnItSelf();
	 System.out.println(p); //주소값 클래스 그 자체를 가져옴. 인스턴스라는 의미
	 System.out.println(noName);// 위와 같은 주소값
 }
}

this();와 this(5); 기본생정자호출과 기타생성자호출을 반복해서 부르는 것을 주의해야함. ---> 프로그램 다운의 원인이 됨.

// 복제는 단 한번만 이루어짐.

0개의 댓글