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 |