본문 바로가기

언어/Java

클래스 예제

※ call by value : 값이 그대로 복붙, 자바의 인자값은 무조건 이거
    call by reference : 참조값이 복붙

인자값이 매개변수 값에 복붙되는것
결과
결과

 

※ 객체는 메서드의 선언부만 가져옴
   현재사용중인 객체 = this.
   멤버변수 앞에 this.이 생략된것

//제공자코드
/**
 * TV용 클래스이다
 * @author 작성자
 * @version 1.0 
 */
 
class TV{
//	boolean power = false;
	boolean power; // 값을 주지 않아도 자동초기화가 false
	int channel;
	int volume;
	
	/**
	 * 전원을 켠다
	 */
	void powerOn(){
		power = true;
	}
	
	/**
	 * 전원상태를 반환한다
	 * @return 전원이 켜진 상태면 true반환, 꺼진 상태면 false를 반환한다
	 */
	boolean isPower(){
		return power;
	}
	
	/**
	 * 채널을 설정한다
	 * @param i 설정할 채널값
	 * @를 어노테이션이라하는데 param 어노테이션을 써서 매개변수에 대한 설명을 작성하면 된다
	 */
	void setChannel(int i){
		channel = i;
	}
	
	/**
	 * 현재채널값을 반환한다
	 * @return 현재채널값
	 */
	int getChannel(){
		return channel;
	}
	
	/**
	 * 채널값을 1증가한다
	 */
	void channelUp() {
		channel++;
	}
	/**
	 * 음량을 1증가한다
	 */
	void volumeUp() {
		volume++;
	}
	/**
	 * 음량을 1감소한다
	 * 단, 최소음량은 0이다
	 */
	void volumeDown() {
		if(volume == 0) {
			return;	// void일때 return; 메서드 끝낼 수 있음
		}
		volume--;
	}
	/**
	 * 현재 음량을 반환한다
	 * @return 음량
	 */	
	int getVolume() {
		return volume;
	}
}

//사용자코드 : 실행용도의 클래스
public class WatchTV {
	public static void main(String[] args) {
		TV tv; //참조형지역변수 선언
		tv = new TV(); // 객체생성 or 초기화필요
		System.out.println(tv.power); //false
		System.out.println(tv.channel); // 0
		System.out.println(tv.volume); // 0
		
		tv.powerOn();
		
		boolean flag = tv.isPower();
		if(flag) { // (flag==ture) 와 같은 뜻
			System.out.println("전원이 켜졌습니다");
			tv.setChannel(11); // 채널설정한다
			int ch = tv.getChannel(); // 현재 채널을 반환한다
			System.out.println("현재 채널은 " + ch); //11
			
			tv.channelUp(); //채널을 1 증가한다
			System.out.println("현재 채널은 " + tv.getChannel()); //12
			
			// 음량을 20증가
			for(int i = 0; i<20; i++) {
				tv.volumeUp();
			}
			// 음량을 50감소
			for(int i = 0; i<50; i++) {
				tv.volumeDown();
			}
			System.out.println("현재 음량은 " + tv.getVolume()); //0
			
		} else {
			System.out.println("전원이 꺼졌습니다");
		}

		TV tv1 = new TV();
		tv1.powerOn();	// 위로 그냥 올라가는게 아님, 현재 사용중인 객체의 power 변수인거임
	}

}

결과
string 타입 참조하는거지 절대 직접 값 넣는거 아니다

//제공자코드
class Employee{
	String no;
	String name;
	int salary;
	
	void setNo(String a) {
		no = a;
	}
	void setName(String b) {
		name = b;
	}
	void setSalary(int c) {
		salary = c;
	}
	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() );
		eTemp = null;
		System.out.println(eTemp); //null
		System.out.println(e1.getSalary()); //2000
		//System.out.println(eTemp.getSalary());//NullPointerException발생후 프로그램 종료됨
	
		Employee[] employees; //선언
		//최대20명의 사원이 저장될 수 있는 배열 생성
		employees = new Employee[20];
		employees[0] = e1;
		for(int i=2; i<=5; i++) {
			Employee e2 = new Employee();
			e2.setNo("230"+i); e2.setName("name"+i); e2.setSalary(1000);
			employees[i-1] = e2;
		}
			
		for(int i=0; i<5; i++) {
		//for(int i=0; i<employees.length; i++) { //NullPointerException발생
			employees[i].print();
		}
		System.out.println("THE END");
	
	}
}

결과

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

this  (0) 2023.07.28
문서용 주석 document comment  (0) 2023.07.28
클래스  (0) 2023.07.28
이클립스 새 프로젝트 만들기  (0) 2023.07.27
절차지향 VS 객체 지향  (0) 2023.07.27