백엔드

[java] this, heap, stack메모리

음그냥 2024. 8. 3. 23:42
728x90
반응형
SMALL

this가 하는 일

  • 인스턴스 자신의 메모리를 가리킴
  • 생성자에서 또 다른 생성자를 호출 할때 사용
  • 자신의 주소(참조값)을 반환 함

 

생성된 인스턴스 메모리의 주소를 가짐

- 클래스 내에서 참조변수가 가지는 주소 값과 동일 한 주소 값을 가지는 키워드

stack, heap 메모리

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

 

- 객체생성시 힙메모리에 인스턴스가 생성됨

- 함수나 메서드의 지역변수는 스택메모리에 잡힘

 

 

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

 

- 클래스에 생성자가 여러 개 인경우, this를 이용하여 생성자에서 다른 생성자를 호출할 수 있음

- 생성자에서 다른 생성자를 호출하는 경우, 인스턴스의 생성이 완전하지 않은 상태이므로 this() statement 이전에 다른 statement를 쓸 수 없음

 

이처럼 생성자에서 다른생성자 호출가능

- Person생성자에서 디폴트 값을 no name, 1로 설정하는 생성자를 만들때

this.name = "no name";

this.age = 1;

로 셋팅하는것보단 기존에 있는 인자값이 있는 오버로딩된 생성자를 호출해서 

this("no name",1); 로 작성하는게 깔끔함

 

- 주의점은 아래처럼 this이전에 작성하면 생성자가 호출되기 전이기 때문에 오류남

(this("no name",1); 다음줄에 적는건 호출된 다음이라 가능

 

 

 

자신의 주소를 반환하는 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 getPerson() {
		return this;
	}
	
	
	public static void main(String[] args)
	{
		Person p = new Person();
		p.name = "James";
		p.age = 37;
		
		Person p2 = p.getPerson();
		System.out.println(p);
		System.out.println(p2);
	}
}

 

 

 

- 클래스안의 멤버변수는 객체 생성시 자동초기화
- 메서드 안의 내부변수는 자동초기화 안됨, 수동으로 내가 해줘야함
- 이클립스에서 멤버변수는 파란색임
- main클래스는 구동클래스임 (웹에서 쓸거면 필요없음, 웹서버없을때 돌릴려고 씀)
- 윤년은 4의 배수임, 100의 배수는 윤년아님,400의 배수는 윤년임

- String타입일때 +써서 붙여쓰는건 메모리 오바가 커서 보통 StringBuffer 나 StringBuilder씀
- StringBuffer buffer = new StringBuffer();
   buffer.append(객체or내용);

 

- 생성자에서 다른생성자 호출가능
- 생성자 메서드안에 this("이름없음",1); 처럼 있으면 해당 클래스안에 String,int 타입으로 받는 다른생성자를 찾아서 호출함

728x90
LIST