java예외 처리와 equals 재정의

2016. 9. 13. 22:44공부/JAVA

자바의 예외처리와 equals 메소드의 재정의에 대해서 포스팅 했습니다.


public class CellPhoneMain {
 
	public static void main(String[] args) { 
		CellPhone myPhone = new CellPhone("SCH-600");
		
		myPhone.charge( 20 );  //20분간 충전을 한다.
		myPhone.printBattery();
		
		myPhone.call( 300 );  //300분간 통화를 한다.
		myPhone.printBattery();
		
		myPhone.charge( 50 );  //50분간 충전을 한다.
		myPhone.printBattery();
		
		myPhone.call( 40 );  //40분간 통화를 한다.
		myPhone.printBattery();
		
		try {
			myPhone.call( -20 );  //통화시간이 잘못 입력되었다.
		} catch(IllegalArgumentException e) {
			System.out.println( e.getMessage() ); 
		}//예외발생시에 해당 try catch문이 실행되고 지정해둔 문자열이 e.getMessage를 통해 출력된다. 
		
		CellPhone yourPhone = new CellPhone("SCH-600");
		//myPhone과 같은 클래스를 같은 타입으로 만들어진 인스터스지만
		//만들어지는 순간 myPhone과는 별개의 인스턴스이다.
		if( myPhone.equals(yourPhone) ) {
			//해당 모델명을 비교하는 조건문이다.
			//해당 메소드의 정확한 내용은 cellPhone에 나와있다.
			System.out.println("동일 모델입니다.");
		} else {
			System.out.println("다른 모델입니다.");
		} 
	} 
}

위의 코드는 사용자가 직접 값을 변경할 수 있는 코드입니다. 음 그러니까 즉 눈에 보인다고 해야겠죠?

반면 아래의 코드는 사용자가 입력한 코드를 바탕으로 로직이 돌아가는 사용자 눈에 보이지 않는 개발자의 영역이라고 해야겠죠 ㅎㅎ


public class CellPhone {

	String model;
	double battery;
	public CellPhone(){
	}
	public CellPhone(String model){
		this.model=model;
	}
	public void call(int time){
		IllegalArgumentException il = new IllegalArgumentException("통화시간오류");
		//예외 인스턴스를 생성해주고 해당 인스턴스가 실행될때 나올 메시지를 매개변수로 넣었다.
		if(time>=0){
			//time가 0밑에라면 throw il이 실행되고 강제로 예외가 발생하게 된다.
			//CellPhoneMain에 있는 try catch문 안의 call에서 예외가 발생한 것으로 처리가 되기때문에
			//예외처리가 되고 미리 지정해둔 통화시간오류라는 메시지가 콘솔창에 뜬다.
			battery-=time*0.5;
			System.out.println("통화시간 "+time);
			if(battery<=0){
				//배터리가 0 이하로 내려갈때 배터리 값을 0으로 초기화 해준다.
				battery=0;
			}
			}else{
				throw il;
			}
		}
	public void charge(int time){
		IllegalArgumentException il = new IllegalArgumentException("충전시간 입력 오류");
		//위의 코드와 같은 성격이라고 생각하면 된다.
		if(time>=0){
			System.out.println("충전시간 "+time);
			battery+=time*3;
			if(battery>=100){
				//배터리가 100이상이면 100으로 초기화 시켜준다.
				battery=100;
			}
		}else{
			throw il;
		}
		
	}
	public void printBattery(){
		System.out.println("남은 배터리양"+battery);
	}
	public boolean equals(Object otherObject){
		if(otherObject!=null&otherObject instanceof CellPhone){
			//매개변수로 받는 객체의 값이 null이 아니고 otherObject가  CellPhone의 데이터타입으로
			//변환이 될수 있는지를 true와  false값으로 나타내준다. 
			return model == ((CellPhone)otherObject).model;
			//클래스의 model변수의 값과 Object객체로 받은 값을 CellPhone의 데이터 타입으로 형변환 후
			//model변수를 지정해서 서로 비교하고 있는 것이다.
		}else{
			return false;
		}
	}
	
}


코드에 주석을 넣어서 설명을 붙여 봤습니다.

혹시라도 이해가 안가시거나 잘 못된 점이 있다면 주저하지 마시고 댓글로 알려주세요 ㅎㅎ

질문은 제가 아는 한에서 최대한 답변해드리고 잘못된 점은 반영을 하겠습니다.

추석이네 이 글을 보시는 모든 분들 즐거운 추석 되세요^^

'공부 > JAVA' 카테고리의 다른 글

JAVA 지정한 char배열 문자열만 거꾸로 출력하기  (0) 2016.09.11
java 소수 구하기 코드  (0) 2016.08.27
JAVA 조건문 (분기)  (1) 2015.11.26
JAVA 공부 Boolean 과 비교 연산자  (1) 2015.11.25