본문 바로가기
Programming/Node.js

[JAVA] this

by 알 수 없는 사용자 2022. 10. 11.

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 memberIdString 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 memberIdString 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

댓글