[Java] map&exception예제 school service

JoongHyeok.Velog·2021년 9월 11일
0

Java

목록 보기
1/5
post-thumbnail

JavaService.java

Class Diagram

1. map과 생성자 선언

1.1 학교 구성원의 정보를 키값으로 관리할 수 있게 HashMap 형식으로 <String,Member> map 선언
1.2 자료를 저장할 수 있는 path 를 매개변수로 받는 생성자를 생성

public class SchoolService {
	// key : tel value : Member하위
	private LinkedHashMap<String, Member> map = new LinkedHashMap<String, Member>();
	private String path;

	public SchoolService(String path) {
		super();
		this.path = path;
	}

2. 구성원의 정보를 추가할 수 있는 addMember(Member Member) 메서드추가

2.1 key값인 map의 Tel값으로 비교해서 추가한 정보(tel)가 기존에 있다면 DuplicateTelException 예외를 발생시켜 처리해준다.

2.2 기존에 없는 새로운 정보라면 map.put을 통해 map에 member데이터를 추가해 준다.

public void addMember(Member member) throws DuplicateTelException {

		if (map.containsKey(member.getTel())) {
			throw new DuplicateTelException(member.getTel() + "이 중복되어 등록 불가합니다.");
		}
		map.put(member.getTel(), member);
	}하세요

3. 모든 정보를 출력해주는 printAll() 메서드추가

3.1 반복자인 Iterator 를 사용해 col.iterator() 를 it 변수에 할당해주고 is.hasNext() 함수를 통해 다음 값이 있다면 it.next()값을 출력하도록 선언해준다

public void printAll() {
		Collection<Member> col = map.values();
		Iterator<Member> it = col.iterator();
		while (it.hasNext()) {
			System.out.println(it.next());
		}
	}

4. 키값(tel)으로 멤버를 검색할 수 있는 findMemberByTel(String tel) 선언

4.1 map의 키값인 tel을 매개변수로 받아 만약 map에 매개변수로 받은 key값이 존재하지 않는다면 MemberNotFoundException를 발생시켜 해당하는 키값이 없다는 문자를 출력한다

4.2 예외가 발생하지 않았다면 map에 key값이 존재한다는 말과 같으니 매개변수로 받은 tel값에 해당하는 map의 정보를 get으로 출력한다

public Member findMemberByTel(String tel) throws MemberNotFoundException {

		if (map.containsKey(tel) == false) {
			throw new MemberNotFoundException(tel + "에 해당하는 구성원정보가 없어 찾지 못했습니다.");
		}
		return map.get(tel);
	}

5.키값(tel)으로 멤버를 삭제할 수 있는 deleteMemberByTel(String tel) 선언

5.1 매개변수로 tel을 받아와서 map.containsKey로 비교를해서 없다면
MemberNotFoundException를 발생시켜 문구를 출력하고
아니라면 key가 있다는 경우이니깐 remove를 통해 데이터를 삭제한다.

	public Member deleteMemberByTel(String tel) throws MemberNotFoundException {
		if (map.containsKey(tel) == false) {
			throw new MemberNotFoundException(tel + "에 해당하는 구성원정보가 없어 찾지 못했습니다.");
		}
		return map.remove(tel);
	}

6. 정보를 업데이트 할 수 있는 updateMember(Member e)메서드 추가

6.1 Member 변수에 새로운 정보를 담아 매개변수로 받고 key값을 containsKey를 통해 기존의 map에 있는 정보와 비교해서 정보가 없다면
MemberNotFoundException 예외를 발생시켜 문구를 출력해준다.

6.2 정보가 있다면 정보를 새로 업데이트 시켜준다.
이때 map.put을 이용하면 key값은 동일하기 때문에 value값만 새롭게 업데이트 된다.

```
public void updateMember(Member e) throws MemberNotFoundException {
	if (map.containsKey(e.getTel()) == false) {
		throw new MemberNotFoundException(e.getTel() + "tel에 해당하는 구성원이 존재하지 않아 수정불가");
	}
	map.put(e.getTel(), e);
}
```

7.데이터를 디렉토리에 저장할 수 있는 savaData() 메서드 추가

7.1 출력스트림 ObjectOutputStream oos 을 null로 설정해두고
파일 디렉토리 dir 변수를 생성자에서 받은 path 변수의 getParentFile()을 통해 경로를 설정해준다.

7.2 설정해준 디렉토리 경로(dir)에 폴더가 없다면 dir.mkdirs()함수를 통해 폴더를 설정해준다.

7.3 try,finally 구문을 설정하고 finally 구문안에 출력스트림 변수 oos 를 꼭 닫아주도록 한다.

7.4 try구문안에는 프로세싱스트림 ObjectOutputStream에 노드스트림 FileOutputStream(path) 를 넣어줘서 연결한후 writeObject(map) 을 통해서 map 의 값을 파일에 넣어줄 수 있도록 한다.

	public void saveData() throws FileNotFoundException, IOException {
		ObjectOutputStream oos = null;
		File dir = new File(path).getParentFile();
		if(dir.isDirectory() == false) {
			dir.mkdirs();
		}
		try {
			oos = new ObjectOutputStream(new FileOutputStream(path));
			oos.writeObject(map);
		} finally {
			if (oos != null)
				oos.close();
		}
	}

8.디렉토리에 member정보가 저장된 파일들을 읽어들이는 loadData()메서드 추가

8.1 file 변수에 path를 설정

8.2 프로세싱스트림 ObjectInputStream ois 를 null로 설정

8.3 ois에 노드스트림 FileInputStream()를 연결후 노드스트림에 file을 넣어줘서 디렉토리경로에 있는 파일정보를 불러올 수 있도록 설정해준다.

8.4 finally 구문을 통해 ois를 반드시 close 해줄 수 있도록 한다.

public void loadData2() throws FileNotFoundException, IOException, ClassNotFoundException {
		File file = new File(path);
		if(file.isFile()) {
			ObjectInputStream ois2 = null;
			try {
				ois2 = new ObjectInputStream(new FileInputStream(file));
				ois2.readObject();
			}finally {
				if(ois2 != null) ois2.close();
			}
		}
	}
  • 이렇게 map과 exception을 이용한 멤버 등록,삭제,수정,출력을 이용하여 파일의 경로를 설정해 파일저장 및 로드까지 할 수있는 예제이다.
profile
영차영차

0개의 댓글