KB IT’s Your Life 4기 - Java 알고리즘 18일차


Final

  • final 메서드: 상속받은 클래스에서 오버라이드가 불가능
  • final 클래스: 상속 불가
  • final 맴버 변수: 상수값이 되거나 write-once 필드로 한 번만 쓰이게 됨
  • 객체 변수에 final: 그 변수에 다른 참조 값을 지정할 수 없음. 단, 객체의 속성은 변경 가능
@Test
    public void test_final_reference_variables() {
        final Pet pet = new Pet();
//        pet = new Pet(); //다른 객체로 변경할수 없음

        pet.setWeight(3); //객체 필드는 변경할 수 있음

    }

예외 처리

  • try-catch를 이용해서 실행이 하나하나 실행 성공을 확인해야함.
  • a메서드 실행, a메서드가 정상이면, b메서드 실행, b메서드가 정상이면, c메서드가 실행되게 해야함.

예외 처리 방법 2가지

  1. try-catch
  2. throws 선언

파일 처리 코드

  1. new FileReader(“파일 이름”) //FileNotFoundException을 대비해야함
  2. for.. fr.read()… /// IOException을 대비해야함.
  3. fr.close() //IOException을 대비해야함.
package day_18;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class ExceptionExam2 {
	public static void main(String[] args) {
		FileReader fr = null;
		try {
			fr = new FileReader("poem.txt");
			int c;
			while ((c = fr.read()) != -1) {
				System.out.print((char) c);
			}
			System.out.println();
			System.out.println("파일 읽기 종료");
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			System.out.println("입출력 오류");

		} catch (IOException e) {
			e.printStackTrace();
			System.out.println("파일없음");
		}
//catch (FileNotFoundException e) { //오류발생. 선순위에 부모가있으면 처리가안되는 오류 FileNot이 IOException의 자식임.
//			e.printStackTrace();
//			System.out.println("입출력 오류");
//		}
		finally {
			try {
				fr.close();
			} catch (IOException e) {
			}
		}
	}
}

코드 발전시키기

package day_18;

import java.io.FileReader;
import java.io.IOException;

public class ExceptionExam {
	public static void main(String[] args) {
		try {
			readFile();
			System.out.println("파일 처리 성공");
		} catch (IOException e) {
			e.printStackTrace();
			System.err.println("파일 처리 실패");
		}

	}

	private static void readFile() throws IOException {
		FileReader fr = null;
		try {
			fr = null;
			fr = new FileReader("poem.txt");
			int c;
			while ((c = fr.read()) != -1) {
				System.out.print((char) c);
			}
			System.out.println();
			System.out.println("파일 읽기 종료");
		} finally {
			if (fr != null)
				fr.close();
		}
	}

}

웹실행

사용자 PC | 웹 서버 HTML, CSS, JS서비스 | WAS(Web Application Server) 코드실행(자바, .NET) | LeGACY(기존 서버),DBMS…

로그인 exam

package day_18;

public class LoginExam {
public static void main(String[] args) {
	String id = "user100";
	String passwd = "1111";
	try {
		login(id, passwd);
		System.out.println("로그인 성공");
	} catch (미등록아이디Exception | 비밀번호틀림Exception e) {
		e.printStackTrace();
		System.out.println("메시지: " + e.getMessage());
	}
}

private static void login(String id, String passwd) throws 미등록아이디Exception, 비밀번호틀림Exception {
if(id!="user100") {
	throw new 미등록아이디Exception(id+"는 없는 아이디입니다.");
}
if(passwd!="1111") {
	throw new 비밀번호틀림Exception("비밀번호가 틀립니다.");
	
}
}
}

package day_18;

public class 미등록아이디Exception extends Exception {
public 미등록아이디Exception() {
	// TODO Auto-generated constructor stub
}
public 미등록아이디Exception(String message) {
	super(message);
}
}

package day_18;

public class 비밀번호틀림Exception extends Exception {
public 비밀번호틀림Exception() {
	// TODO Auto-generated constructor stub
}

public 비밀번호틀림Exception(String message) {
	super(message);
}
}

오늘의 워크샵 (해결코드는 깃에)

도서관 대여정보 관리프로그램을 제작하려 한다.

개인회원을 가입받아 관리한다.
개인회원(  아이디, 이름, 비번, 연락처 )

도서관은 도서, 비디오, cd를 구입, 대여한다.
도서(관리번호, 제목, 가격, 출판사, 수량)
비디오(관리번호, 제목,가격,제작사,수량)
CD(관리번호,제목,가격,가수,수량)

도서관은 회원들에게 도서,비디오,cd의 수량한도내에서 대여한다
대여(대여번호, 회원id, 대여할물건관리번호, 대여년월일, 대여시분, 반납년월일, 반납시분)

회원들은 대여한 물건들을 반환한다.

도서,비디오,cd는 상속관계로 클래스를 정의하세요
회원클래스도 정의한다.
대여정보도 클래스로 관리한다.

LibraryService는 회원, 도서,비디오,cd, 대여를 관리하기 위한 ArrayList 를 가진다.

LibraryService 는 회원등록,회원이름검색,회원id검색기능을 제공한다.
회원등록시 아이디중복시 회원아이디중복Exception을 발생한다.
회원이름검색은 같은이름의 여러회원이 있으면 모두 저장하여 ArrayList를 반환한다. 
회원id검색기능은 회원을 반환한다. 없으면 null 반환한다.

도서,비디오,cd를 등록한다.
등록(new 도서(...))
등록(new 비디오(...))
등록(new CD(...))

등록시 같은 제목이 없으면 새로 등록한다.
등록시 같은 제목이 있으면 수량을 더한다.

물건검색시 관리번호,제목으로 검색한다.
관리번호검색시 있으면 객체를 반환, 없으면 null을 반환한다.

대여(회원id, 물건관리번호,수량)
대여할경우 회원id가 없으면 미등록회원idExction발생한다.
관리번호없으면 미등록물건Exction발생한다.
물건의 수량이 0이면 수량부족Exception 발생시킨다.
대여번호를 만들고 물건을 수량을 1감소시킨다.
대여날짜,시간을 변경한다.

반납(회원id, 물건관리번호,수량)
반납할 경우 회원id가 없으면 미등록회원idExction발생한다.
관리번호없으면 미등록물건Exception발생한다.
물건을 수량을 1감소시킨다.
반납날짜, 시간을 변경한다.

전체정보출력하는 기능을 제공한다.
전체정보에는 회원수,회원목록, 종류별 물건수, 물건목록을 출력한다.

위의 기능을 작성하세요.