Please Enable JavaScript!
Gon[ Enable JavaScript ]

자바(Java) this, super 키워드, this(), super() 함수 사용하는 방법

자바(JAVA)
반응형

this 현재 클래스의 인스턴스를 가리킵니다. super 는 부모 클래스를 가리킵니다. 현재 클래스의 인스턴스에 있는 속성이나 함수를 제어하려면 this.setName() 을 하고 부모 클래스의 함수를 호출하고 싶으면 super.setName() 을 입력합니다. 아래 소스를 보면서 어떻게 사용하는지 알아 보도록 하겠습니다.

 

 

 

클래스의 속성과 매개변수의 이름이 같을 때

 

 

아래 소스는 this 를 사용하지 않았을 때 상황입니다. 주로 set/get 함수를 만들 때 실수하는 경우 입니다. 매개 변수의 이름과 Fruit 에 내에 지역변수 이름이 같기 때문에 Fruit 객체의 name 속성에 값이 저장되지 않습니다. 이 때 Fruit 인스턴스를 가리키는 this 키워드를 사용해야 되는 것입니다.

 

public class Fruit {
    public String name;
    public String color;
    public double weight;
        
    public Fruit(String name, String color, double weight) {
        name = name;
        color = color;
        weight = weight;
    }
    
    public static void main(String[] args) {
        Fruit banana = new Fruit("banana", "yellow", 5.0);
        System.out.println("name : " + banana.name);    
        System.out.println("color : " + banana.color);  
        System.out.println("weight : " + banana.weight);
    }
}

 

 

아래 그림처럼 매개변수로 넘어온 값을 Fruit 속성에 저장하려면 모든 속성에 this 를 붙여 줍니다.

public class Fruit {
    public String name;
    public String color;
    public double weight;
        
    public Fruit(String name, String color, double weight) {
        this.name = name;
        this.color = color;
        this.weight = weight;
    }
    
    public static void main(String[] args) {
        Fruit banana = new Fruit("banana", "yellow", 5.0);
        System.out.println("name : " + banana.name);    
        System.out.println("color : " + banana.color);  
        System.out.println("weight : " + banana.weight);
    }
}

 

※ 아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다.
자바(Java) 문자열 구분을 위한 Split 함수 사용하는 방법
자바(Java) 주석 Comments 소스 내에 작성하는 방법
자바(Java) 개발을 위한 최신 버전 JDK 다운 받기
Java 알기위한 기본 용어 정리와 관계도
바(Java) 데이터 형변환 char -> String 여러가지 방법

 

 

 

오버로딩된 다른 생성자 호출하는 방법

 

 

this() 는 자기자신의 생성자를 호출함으로서 생성자의 초기화 과정을 반복하지 않아도 됩니다. this(x, y) 처럼 파라미터가 있으면 자기 자신의 클래스에 해당하는 동일한 파라미터 객체를 가진 함수를 호출하게 됩니다. super() 는 상속받은 바로 위 클래스의 생성자를 호출하게 됩니다. super(x, y) this 의 파라미터 넘기는 함수처럼 상속받은 클래스에서 동일한 파라미터 객체를 가진 함수를 호출합니다. 이것이 this super 의 차이점입니다. 주의 할점은 this() super() { 바로 다음에만 쓸 수 있습니다. 그래서 this(), super() 는 같이 쓸 수가 없는 것입니다.

 

class UpperClass {
    int x; 
    int y;
 
    public UpperClass() {
        x = 10;
        y = 20;
    }
 
    public UpperClass(int x) {
        this(); // 자신의 클래스 public UpperClass() 생성자 호출
        this.x = x;
    }
 
    public UpperClass(int x, int y) {
        this(x); // 자신의 클래스 public UpperClass(int x) 생성자 호출
        this.y = y;
    }
}
 
class LowerClass extends UpperClass {
    int r;
 
    public LowerClass() {
        super(); // 상위 클래스의 public UpperClass() 생성자 호출.
        r = 30;
    }
    public LowerClass(int x) {
        super(x); // 상위 클래스의 public UpperClass(int x) 생성자 호출
        r = 30;
    }
 
    public LowerClass(int x, int y) {
        super(x, y); // 상위 클래스의 public UpperClass(int x, int y) 호출
        r = 30;
    }
 
    public LowerClass(int x, int y, int r) {
        this(x, y); // 자신의 클래스 public LowerClass(int x, int y) 호출
        this.r = r;
    }
}
 
public class Exe{
   public static void main(String[] ar) {
 
   }
}

 

 

자신의 참조값을 전달하고 싶을 때

 

 

어떤 함수에서는 리턴값으로 자기 자신의 참조값을 전달하고 싶을 때가 있습니다. 이 때 this 키워드를 이용함으로써 해결이 가능합니다.

public class Fruit {
    public String name;
    public String color;
    public double weight;
        
    public Fruit(String name, String color, double weight) {
        this.name = name;
        this.color = color;
        this.weight = weight;
    }
        
    public Fruit getInstance() {
        return this;
    }
}

 

※ 아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다.
자바(Java) 문자열 구분을 위한 Split 함수 사용하는 방법
자바(Java) 주석 Comments 소스 내에 작성하는 방법
자바(Java) 개발을 위한 최신 버전 JDK 다운 받기
Java 알기위한 기본 용어 정리와 관계도
바(Java) 데이터 형변환 char -> String 여러가지 방법
반응형
Posted by 녹두장군1

댓글을 달아 주세요