반응형
1. this(키워드) 란?
- 메소드에 숨겨져 있는 매개변수
- 메소드에서 객체의 필드 또는 메소드를 사용하기 위해 this 키워드 사용
- 객체의 여러개 중 어떤 객체의 필드를 명확하게 구분하기 위해 사용하는 것
- 우리 눈에 보이지 않지만,
- 메소드에는 this라는 이름의 매개변수가 존재함
2. this 사용 예시
public Member{
//Field
private String id;
private String name;
private String email;
//Method
public void display(Member this) {
System.out.println("아이디 = " + this.id);
System.out.println("이름 = " + this.name);
System.out.println("이메일 = " + this.email);
}
}
//=> this 매개변수가 숨겨져 있음
//=> 이 메소드를 호출한 객체의 메모리주소가 this변수에 저장되어있음
3. this의 해석
- this. = 내가 가지고 있는(이 객체가 가지고 있는)
- ex. car 클래스로 만들어진 carOne객체가 가지고 있는
- ex. Member 클래스로 만들어진 MemberOne객체가 가지고 있는
4. this 매개변수 자료형
- this 매개변수의 자료형은 무엇일까?
- 메소드가 선언된 클래스가 자료형이 된다!
- 즉, this 매개변수는 메소드를 호출한 객체의 메모리주소(hash code)를 전달받아 자동으로 주소값을 this변수에 저장하는 참조변수이다.
- 우리가 this변수를 만들필요도, this변수에 값을 전달할 필요도 없다!
- 그냥 자동적이다!
5. this는 필수?
1) this는 꼭 써야할까?
- 아니요
- this 키워드를 사용하지 않아도 자동으로 객체의 필드 또는 메소드에 접근하여 사용 가능하다.
- 즉, 클래스 메소드 안에서 사용할 때는 굳이 this를 쓰지 않아도 이것은 클래스 객체가 가진 필드라고 인식한다!
public Member{
//Field
private String id;
private String name;
private String email;
//Method
public void display(Member this) {
System.out.println("아이디 = " + id);
System.out.println("이름 = " + name);
System.out.println("이메일 = " + email);
}
}
2) 그럼 굳이 this를 왜 쓰나? (메소드에 this 매개변수가 존재하는 이유)
- 필드는 객체마다 메모리(Heap)에 따로 생성되지만,
- 메소드는 객체에 상관없이 메모리(static)에 딱 하나만 생성해줌
- → 이것을 프로토타입 클래스(prototype class)라고 부름 → 하나로 모든객체 공유
- 따라서 메소드에서 필드를 사용할 때 this 키워드를 사용하여 객체를 구분하여 필드에 접근해야함
3) this 키워드는 언제 쓰나? (3가지경우)
①메소드에서 매개변수의 이름을 필드의 이름과 동일하게 작성한 경우 필드라는 것을 표현하기 위해
- 생성자 내 혹은 Setter메소드 내 이 둘이 전부다!
- 혹은 우리가 클래스 내 메소드를 만들 경우 (매개변수의 이름 = 필드의 이름)라면 사용하기
//생성자
//이 클래스의 id
public Member(String id) {this.id = id;}
//Setter메소드
//public String getId() {return id;}
public void setId(String id) {this.id = id;}
//public String getName() {return name;}
public void setName(String name) {this.name = name;}
//public String getEmail() {return email;}
public void setEmail(String email) {this.email = email;}
②생성자에서 다른 생성자를 호출하여 초기화 작업을 하기 위해
public Member() {
//this(값,값,...) : this 키워드로 다른 생성자를 호출하는 명령
// => 생성자에서만 사용 가능한 명령
// => 다른 명령보다 먼저 실행되도록 작성 - 다른 명령이 먼저 작성된 경우 에러 발생
this("NoId","NoNAme","NoEmail")
System.out.println(); //ok
}
③이벤트 처리 프로그램 또는 다중 스레드 프로그램의 메소드에서 객체 자체를 표현하기 위해
- 이벤트 처리 프로그램 또는 다중 스레드 프로그램의 메소드
- 이 객체가! 이벤트를 처리해줄게요! 할 때 this
- 나중에 배울것임
반응형
'java > oop' 카테고리의 다른 글
[oop] 8. 자바는 프로토타입클래스이다. (MemberApp) with JVM설명 (0) | 2024.04.17 |
---|---|
[oop] 7. VO(Value Object)클래스 (0) | 2024.04.16 |
[oop] 5. 생성자(Constructor)의 개념 (0) | 2024.04.15 |
[oop] 4. 메소드 오버로드(Method Overload) (0) | 2024.04.15 |
[oop] 3. 자동차 클래스로 만든 자동차 출력 프로그램 (0) | 2024.04.14 |