본문 바로가기
프로그래밍/Java

[JAVA / 자바 / 자바 기초] JAVA에서 쓰는 this란? /this가 의미하는 것

by Mr.noobiest 2023. 12. 13.

java의 this

 

JAVA의 this란?

자바의 this나 python의 self같은 애들이 있는데 얘들이 뭘 의미하는건지 매우 헷갈렸다.

this를 이해하지 못했었다.

인스턴스나 객체도 무슨 소리인지 몰랐는데 이해하고 보니 매우 간단했다

다른 헷갈리는 사람들을 위해 매우 간단하게 설명하기+미래의 내가 헷갈리면 보길바란다. 머리를 비우고 보면 편하다.

 


 

This 예시

 

JAVA를 사용해서 어떤 변수 Human을 만들어주는 함수를 작성한다고 가정하자.
(class generate_human() -> 사람1,사람2,사람3.......)

 

1. (이름,나이,몸무게)를 입력해서 "사람1"을 만들려고 한다.

사람만들기 class

public class Human {
    String name;
    int age;
    double weight;

    Human(String name, int age, double weight){
        this.name=name;
        this.age=age;
        this.weight=weight;
    }  
}

 


 

 

2. 만든 "사람1"에 "먹기"와 "마시기" 기능(메서드)을 넣으려고 한다.

먹고, 마시기 메서드 추가

 

void eat()와 void drink()를 추가

public class Human {
    //기본값 default
    String name;
    int age;
    double weight;

    //this를 넣어줘야지만 default값이 아닌 함수로 생성한 값의 데이터가 표시된다
    Human(String name, int age, double weight){
        this.name=name;
        this.age=age;
        this.weight=weight;
    }
    
    //Human클래스의 메서드 eat()
    void eat() {
        System.out.println(this.name+" eat Bread");
    }
    //Human클래스의 메서드 drink()    
    void drink(String what) {
        System.out.println(this.name+" drinking "+what);
    }    
}

 


 

나왔다 this!!

 

Human(String name, int age, double weight){
    this.name=name;
    this.age=age;
    this.weight=weight;
}

void eat() {

    System.out.println(this.name+" eat Bread");
}

void drink(String what) {

    System.out.println(this.name+" drinking "+what);

 

this.name = name이라고 나와있는게 보이는가? name은 Human(String name)에서 입력한 문자값입니다.
ex) Human("test",)라면 name=="test"다.

즉, this.name=name으로 안하고

Human(String makingName,...){
  this.name = makingName...
}

이라해도 문제가 없다는 것이다.

 

쉽게 말하면 this는 "해당 클래스를 사용해서 만들어진 객체(인스턴스==사람1)의 값"이다

즉, 내가 Human()을 사용해서 사람1을 만들건데 만드는 사람1의 name은 입력값 makingName이다를 this.name = name이라고 표현한것이다.


 

 

Human으로 생성하기 예시

Human human = new Human("Rick",20,70);
Human human2 = new Human("James",25,85);
        
System.out.println("사람1의 name"+human.name);
System.out.println("사람2의 name"+human2.name+"\n");

System.out.print("사람1의 eat()동작 : ");
human.eat();

System.out.print("사람1의 drink()동작 : ");
human.drink("Coke");
        
        
System.out.println("\n사람1의 연령,이름,몸무게 출력");
System.out.println(human.age);
System.out.println(human.name);
System.out.println(human.weight);

 

위의 예시 맨 아래의 human.age와 같은 의미라고 보면 된다.

 

 

 

끝.

 

 

728x90
반응형