this는 현재 클래스의 인스턴스를 가리킨다.
아래의 예제를 보면
Menber.java
public class Member {
public String memberId; //회원ID
public String memberPassword; //회원Password
public String memberName; //회원 이름
public int memberNumber; //회원 주민번호
//메서드 선언
public Member(String memberId, String memberPassword, String memberName, int memberNumber){
//메서드 수행
memberId = memberId;
memberPassword = memberPassword;
memberName = memberName;
memberNumber = memberNumber;
}
public String Menbering(){
return "회원ID : " + memberId + "비밀번호 : " + memberPassword + "이름 : " + memberName + "주민번호 : " + memberNumber;
}
}
MenberTest.java
import java.util.Scanner;
public class MemberTest {
public static void main(String[] args) {
String myId; //회원ID
String myPassword; //회원Password
String myName; //회원 이름
int myNumber; //회원 주민번호
/*============회원 정보 입력=============*/
System.out.println("=====회원정보 입력=====");
Scanner scanner = new Scanner(System.in); //입력
System.out.print("회원ID :");
myId = scanner.next();
System.out.print("회원Password : ");
myPassword = scanner.next();
System.out.print("회원 Name : ");
myName = scanner.next();
System.out.print("회원 주민번호 : ");
myNumber = scanner.nextInt();
/*============회원 정보 입력=============*/
System.out.println("========결과==========");
Member memberIn = new Member(myId, myPassword, myName, myNumber); //인스턴스 생성
System.out.println(memberIn.Menbering()); //메서드 수행 및 필드선언
}
}
위의 예제 Menber.java(를) 보면 생성자와 메서드 매게 변수(파라미터) 이름은 클래스 이름과 동일하게 사용합니다.
하지만 MenberTest.java(를)에서 실행하면 값이 아래와 같이 나옵니다.
=====회원정보 입력=====
회원ID :sd
회원Password : dsds
회원 Name : sdsc
회원 주민번호 : 1111122
========결과==========
회원ID : null비밀번호 : null이름 : null주민번호 : 0
위의 결과 보기와 같이 초기화가 되지 않았습니다.
public Member(String memberId, String memberPassword, String memberName, int memberNumber){
memberId = memberId;
memberPassword = memberPassword;
memberName = memberName;
memberNumber = memberNumber;
}
Menber.java에서 Menber메서드의 매게 변수(파라미터)를 이런 식으로 같은 이름을 주고 대입했을 때 속성을 가리키고 있다는 것을 인지 하지 못하는 것입니다. 이럴 때 this함수를 사용합니다.
--------------------------------------------
Menber.java
public class Member {
public String memberId; //회원ID
public String memberPassword; //회원Password
public String memberName; //회원 이름
public int memberNumber; //회원 주민번호
//메서드 선언
public Member(String memberId, String memberPassword, String memberName, int memberNumber){
//메서드 수행
this.memberId = memberId;
this.memberPassword = memberPassword;
this.memberName = memberName;
this.memberNumber = memberNumber;
}
public String Menbering(){
return "회원ID : " + memberId + "비밀번호 : " + memberPassword + "이름 : " + memberName + "주민번호 : " + memberNumber;
}
}
MenberTest.java
import java.util.Scanner;
public class MemberTest {
public static void main(String[] args) {
String myId; //회원ID
String myPassword; //회원Password
String myName; //회원 이름
int myNumber; //회원 주민번호
/*============회원 정보 입력=============*/
System.out.println("=====회원정보 입력=====");
Scanner scanner = new Scanner(System.in); //입력
System.out.print("회원ID :");
myId = scanner.next();
System.out.print("회원Password : ");
myPassword = scanner.next();
System.out.print("회원 Name : ");
myName = scanner.next();
System.out.print("회원 주민번호 : ");
myNumber = scanner.nextInt();
/*============회원 정보 입력=============*/
System.out.println("========결과==========");
Member memberIn = new Member(myId, myPassword, myName, myNumber); //인스턴스 생성
System.out.println(memberIn.Menbering()); //메서드 수행 및 필드선언
}
}
위의 Member.java를 보시면 this를 붙였습니다.
이렇게 되면 아래와 같이 값이 나오게 됩니다.
=====회원정보 입력=====
회원ID :sdfsdf222
회원Password : sdasd
회원 Name : sdfv
회원 주민번호 : 1112223
========결과==========
회원ID : sdfsdf222비밀번호 : sdasd이름 : sdfv주민번호 : 1112223
[정리]
정리를 해봅시다. (색깔을 잘 따라와 주세요)
[this가 없을 때]
public Member(String memberId, String memberPassword, String memberName, int memberNumber){
memberId = memberId;
( 속성 ) = ( 매게 변수 );
memberPassword = memberPassword;
memberName = memberName;
memberNumber = memberNumber;
}
위의 코드는
Member(매게 변수)와
memberId = memberId; 속성과 메게 변수 이름이 같습니다. 하지만 this. 가 없어요. 이렇게 되면
Member(.....) 메서드는 memberId 매게 변수 = memberId 매게 변수로 인식하고 "속성"에 값이 입력되지 않습니다.
java는 memberId = memberId;처럼 왼쪽의 memberId가 오른쪽의 Member객체 memberId를 가리킨다는 것을 인지를 못합니다.
이럴 때 this를 사용합니다.
[this가 있을 때]
public Member(String memberId, String memberPassword, String memberName, int memberNumber){
this.memberId = memberId;
this.( 속성 ) = ( 매게 변수 );
this.memberPassword = memberPassword;
this.memberName = memberName;
this.memberNumber = memberNumber;
}
this. 가 붙으면
Member(.....) 메서드는 memberId 속성 = memberId 매게 변수로 인식하고 "속성"에 값이 입력됩니다.
this. 는 객체 자신의 속성을 나타나게 되는 것입니다. 내가 속성이라는 자아를 찾은 것이죠
[최종 정리]
this키워드가 없으면
memberId = memberId;
( 매게 변수 ) = ( 매게 변수 ); 로 값이 입력되지 않아 실행 시 값이 안 나온다. 왜냐하면 속성이 없어 값이 안 들어간다~~
this키워드가 있으면
this.memberId = memberId;
this.( 속성 ) = ( 매게 변수 ); 로 매게 변수 값이 속성으로 값이 입력 가능하다.
출처: https://shift-66.tistory.com/46?category=996970 [Error_Min:티스토리]
'Programming > Node.js' 카테고리의 다른 글
싱글톤 (Singleton) 패턴 (0) | 2022.10.21 |
---|---|
[Spring] 컨테이너 빈 이름으로 조회하기 (0) | 2022.10.12 |
[JAVA] 변수와 메서드 (1) | 2022.10.11 |
Java Class - public static void main(String[] args) (0) | 2022.10.07 |
[JAVA] HashMap (0) | 2022.09.14 |
댓글