this
package this_;
class Test01{
public int num = 12345;
public void test() {
int num = 303030;
System.out.println("this : " + this); // this 는 자기 자신에 대한 정보를 의미 ( 클래스의 위치 )
System.out.println("this : " + this.num); // 12345
System.out.println("num : " + num); // 303030
// this 를 사용하지 않으면 현재 지역에서 먼저 해당 값을 찾아서 출력한다
// this 를 사용하면 자신 클래스 위치에서 부터 해당 값을 찾아서 하위로 내려온다
}
}
public class Ex01 {
public static void main(String[] args) {
Test01 t = new Test01();
System.out.println(" main : " + t); // Test01 클래스가 저장되어 있는 위치 값 반환
System.out.println("main num : " + t.num); // Test01 클래스 하위의 num 메소드를 반환하여 실행
t.test(); // Test01 클래스가 저장되어 있는 위치로 접근하여 해당 클래스 하위의 test() 메소드를 실행
// this : this_.Test01@2133c8f8
// this : 12345
// num : 303030
}
}
this 의 사용법과 의미
은닉화
package set_get;
class Test01{
// 접근 제어자 private 을 사용하여 인스턴스 변수 num 을 은닉화 시킴 ( 외부 접근을 허용하지 않음 )
private int num = 12345;
public void test(int n) {
// private 은 외부에서는 접근이 불가하지만 내부에서는 접근이 가능!!!
num = n;
}
public int test2() {
return num;
}
}
public class Ex01 {
public static void main(String[] args) {
Test01 t = new Test01();
t.test(1000); // 인스턴스 변수인 num 에 직접 접근하지는 못하지만 메서드를 이용하여 같은 클래스에 접근하여 값을 변경
System.out.println(t.test2()); // 마찬가지로 출력도 메서드를 사용하여 private 값에 접근하여 값을 출력
}
}
은닉화 하는 방법
( 은닉화의 문제점은 값에 접근하고 값을 가져오는데 최소 메소드가 2개씩 필요..... 메소드를 많이 만들다보니 메소드의 이름이 규격화되지 않아 헷갈리게 된다...... )
( getter / setter 를 사용하여 해당 메소드를 규격화 하였음....!!! )
getter / setter
package set_get;
class Test02{
private int num, age; // 접근 제어자 private 을 사용하여 외부에서 접근을 금지
public void setNum(int n) { // set
num = n;
}
public int getNum() { // get
return num;
}
public void setAge(int a) { // set
age = a;
}
public int getAge() { // get
return age;
}
}
public class Ex02 {
public static void main(String[] args) {
Test02 t = new Test02();
t.setNum(3); // set 을 사용하여 priavte 인스턴스 변수에 접근 및 변경
t.setAge(20); // set 을 사용하여 priavte 인스턴스 변수에 접근 및 변경
int num = t.getNum(); // get 을 사용하여 인스턴스 변수에 접근
int age = t.getAge(); // get 을 사용하여 인스턴스 변수에 접근
System.out.println(num + ", " + age); // 3, 20 출력
}
}
get / set 메소드 생성 및 사용
package set_get;
class Test02{
private int num, age; // 접근 제어자 private 을 사용하여 외부에서 접근을 금지
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
// this 를 사용하여 최상단 자기 자신의 클래스부터 num 이라는 변수를 찾아서 사용
// this.num 을 사용함으로써 클래스 내의 인스턴스 변수인 num 을 의미한다고 명시
// 이후 우항의 num 은 매개변수로 받아온 num 이 대입된다
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
// this 를 사용하여 최상단 자기 자신의 클래스부터 num 이라는 변수를 찾아서 사용
// this.age 을 사용함으로써 클래스 내의 인스턴스 변수인 age 를 의미한다고 명시
// 이후 우항의 age 는 매개변수로 받아온 age 가 대입된다
}
}
public class Ex02 {
public static void main(String[] args) {
Test02 t = new Test02();
t.setNum(3); // setter 를 사용하여 priavte 인스턴스 변수에 접근 및 변경
t.setAge(20); // setter 를 사용하여 priavte 인스턴스 변수에 접근 및 변경
int num = t.getNum(); // getter 를 사용하여 인스턴스 변수에 접근
int age = t.getAge(); // getter 를 사용하여 인스턴스 변수에 접근
System.out.println(num + ", " + age); // 3, 20 출력
}
}
java 는 getter / setter 를 자동 생성할때 setter 의 매개변수를 실제 변수의 이름으로 생성하게 되는데 이때, 변수명이
서로 같아지게 되므로 this 를 사용하여 자신이 속한 클래스의 인스턴스 변수임을 선언하여 사용한다.
728x90
'국비지원_핀테크' 카테고리의 다른 글
11일차_ [java] 생성자 ( Constructor ) (0) | 2024.02.19 |
---|---|
10일차_ [java] 미니 실습 (0) | 2024.02.16 |
10일차_ [java] 오버로딩 ( overloading ), 변수의 종류 (0) | 2024.02.16 |
10일차_ [java] 클래스 ( class ), 접근제한자, 메소드 ( method ) (0) | 2024.02.15 |
10일차_ [java] Set, Map, Iterator (1) | 2024.02.15 |