본문 바로가기

언어/Java

this

//제공자코드
class Employee {
	String no;
	String name;
	int salary;

	void setNo(String no) {
		this.no = no;	
		// 변수이름이 같을 때 매개변수를 우선시해서 no = no; 불가능
        // 사용자가 쓰기 편하게 가독성을 높여야한다.
		// 정확히 멤버변수임을 알리려고 this.을 사용한다. this.는 현재 사용중인 객체를 알리는 자바 예약어
		// 메서드나 생성자 내부에서 사용 가능
		// 객체 안에서 자기 자신을 지칭하는 뜻
		// this.를 쓴 이유 : 객체지향의 목적에 부합하기 위해, 절차지향언어에서는 사용하지 않는다
		// 사용자가 매개변수 이름 보고 짐작하게 하려고 멤버변수랑 이름 같이줌.
		// 다르면 굳이 this 안써도됨.
	}
	
	void setName(String name) {
		this.name = name;
	}
	
	void setSalary(int salary) {
		this.salary = salary;
	}

	String getNo() {
		return no;
	}
	
	String getName() {
		return name;
	}
	
	int getSalary() {
		return salary;
	}
	
	void print() {
		System.out.println("사번:" + no + ", 사원명:" + name + ", 기본급:" + salary);
	}
	
}


//사용자코드
public class HR {
	public static void main(String[] args) {
		Employee e1 = new Employee();
		String no = e1.no;
		System.out.println(e1.no); //null
		
		e1.setNo("2301"); //사번 설정한다
		e1.setName("홍길동"); //사원명 설정한다
		e1.setSalary(1000); //기본급 설정한다
		
		System.out.println("사원의 사번-" + e1.getNo() + ", 사원명-" 
		+ e1.getName() + ", 기본급-" + e1.getSalary());
		
		e1.print(); //"사번:사번값, 사원명:사원명값, 기본급:기본급값" 이 출력되도록 한다
		
		Employee eTemp;
//		eTemp = null;
//		eTemp = new Employee();
		eTemp = e1;
		System.out.println(e1 == eTemp);//true, 같은 메모리를 참조함
		eTemp.setSalary(2000);
		System.out.println(e1.getSalary()); //2000
		eTemp = null;
		System.out.println(eTemp); //null
		System.out.println(e1.getSalary()); //2000
		// System.out.println(eTemp.getSalary()); //NullPointerException 발생 후 프로그램 종료됨
		// 오류 라인번호의 . 연산자 앞의 것이 오류일 확률이 높다
		// eTemp. .연산자가 해당 객체를 찾아가는것. 참조 메모리 객체를 찾아가라 하면 논리적 위배
		System.out.println("THE END"); //NullPointerException 때문에 프로그램이 죽어서 그 다음 step 진행을 못함

		Employee[] employees; //선언, Employee[]:employee 배열타입의 참조형 배열 변수
        // employees:메서드 내에 선언된 지역변수, 자동초기화X
		// 최대 20명의 사원이 저장될 수 있는 배열 생성
		employees = new Employee[20];
		employees[0] = e1;
		
		/*
		Employee e2 = new Employee();
		e2.setNo("2302"); e2.setName("name2"); e2.setSalary(1000);
		employees[1] = e2;
		
		Employee e3 = new Employee();
		e3.setNo("2303"); e3.setName("name3"); e3.setSalary(1000);
		employees[2] = e3;
		
		Employee e4 = new Employee();
		e4.setNo("2304"); e4.setName("name4"); e4.setSalary(1000);
		employees[3] = e4;
		
		Employee e5 = new Employee();
		e5.setNo("2305"); e5.setName("name5"); e5.setSalary(1000);
		employees[4] = e5;
		*/
		
		// 위의 4블럭 for문으로
		for(int i=2; i<=5; i++) {
			Employee e2 = new Employee();	// for문을 돌 때마다 다시 변수가 만들어짐
											// 한번 돌때마다 새로운 e2가 만들어지는 것
			e2.setNo("230" + i); e2.setName("name" + i); e2.setSalary(1000);
			employees[i - 1] = e2;
		}
		
		// 출력
//		for(int i=0; i<employees.length; i++) { // NullPointerException 발생
		for(int i=0; i<5; i++) {
			employees[i].print();
		}
		
	}

}

결과

 

'언어 > Java' 카테고리의 다른 글

접근제어자(Access Modifier)  (0) 2023.07.31
생성자  (0) 2023.07.31
문서용 주석 document comment  (0) 2023.07.28
클래스 예제  (0) 2023.07.28
클래스  (0) 2023.07.28