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 여러가지 방법 |
'자바(JAVA)' 카테고리의 다른 글
자바(Java) 리스트(List,ArrayList) 이용하는 방법 (6) | 2023.11.23 |
---|---|
자바(Java) public, private, protected, default 접근 제어자 차이점은 (3) | 2023.10.23 |
자바(Java) 개발을 위한 최신 버전 JDK 다운 받기 (1) | 2023.10.12 |
자바(Java) 숫자 나누기로 소수점 이하 출력하기 (0) | 2023.08.22 |
자바(Java) AWT – Label 오브젝트 사용법과 예제 (0) | 2022.12.28 |
자바 Java 윈도우 위치 찾기 명령어 (1) | 2022.12.25 |
자바(Java) 문자열 구분을 위한 Split 함수 사용하는 방법 (0) | 2022.10.24 |
자바(Java) 데이터 형변환 char -> String 여러가지 방법 (5) | 2022.07.22 |