Joslynn의 하루

대용량 웹서비스를 위한 MSA Full-Stack 개발자 양성 과정 -15일차 노트 필기_자료구조 (컬렉션 프레임워크) 실습_220810 본문

MSA Full-Stack 개발자 양성과정/Java

대용량 웹서비스를 위한 MSA Full-Stack 개발자 양성 과정 -15일차 노트 필기_자료구조 (컬렉션 프레임워크) 실습_220810

Joslynn 2022. 8. 11. 00:35

1. TreeSet을 사용하여 올림차순 정렬된 Lotto번호 6개 랜덤 생성

import java.util.Random;
import java.util.TreeSet;

public class TreeSetLottoExam extends TreeSet<Integer>{
	public TreeSetLottoExam() {
		Random r = new Random();
		while(super.size()<6) {
			int no = r.nextInt(45)+1;
			super.add(no);
		}
		System.out.println(this);
	}
	
	public static void main(String[] args) {
		new TreeSetLottoExam();
	}


}

**주의사항

1. this와 super 키워드

: this는 단독 사용 가능하지만 super는 불가능함

: TreeSet을 상속하고 있으므로 this는 TreeSet을 가르킴

 

2. 난수 발생 Random 클래스


 

 

2. MVC 구조 - TreeMap을 사용하여 

*Error 사항 정리

1. 싱글톤class는 public으로 선언하기

: default로 선언하여 외부 패키지에서 접근하지 못해 에러 발생;

//싱글톤클래스는 public으로 선언하여 외부에서 접근가능하도록 한다.
public class BoardServiceImpl implements BoardService {
	// private 생성자 
	private BoardServiceImpl() {
    }
	//BoardServiceImpl 객체 생성
	private static BoardServiceImpl instance = new BoardServiceImpl();
	/** BoardServiceImpl 객체를 리턴하는 getInstance메소드
   	    외부에서 접근 가능하도록 public static으로 선언 */
   	public static BoardServiceImpl getInstance() {
		return instance;
	}

}

 

*주의사항 및 새로 배운 사항

1. 다운캐스팅시 instanceof 사용으로 예외 발생 가능성을 낮춤 

//BoardServiceImpl class
//게시판 수정 메소드
public void updateBoard(Board board, String kind) throws InexistentException {
	Board savedBoard = getBoardByNo(kind, board.getNo());
	
    // ObjectDownCasting
	if (savedBoard instanceof ArchiveBoard && board instanceof ArchiveBoard) {
            ArchiveBoard savedAB = (ArchiveBoard)savedBoard;
            ArchiveBoard paramAB = (ArchiveBoard)board;
            //Board 공통수정사항
            savedAB.setSubject(paramAB.getSubject());
            //ArchiveBoard 수정사항
            savedAB.setFileName(paramAB.getFileName());
            savedAB.setFileSize(paramAB.getFileSize());
        }
}

 

2. split 메소드

1. split(String regex);

: 특정 기준을 바탕으로 배열 형식으로 문자열을 잘라서 리턴

: ex) split(","); // , 기준으로 문자열을 자름

: 여러 개의 구분자 → 구분자의 사이에 | 를 사용

 

split(String regex, int limit);

 : 구분자를 바탕으로 배열 형식으로 limit 수만큼만 문자열을 자름

: ex) String[] LimitThree = str.split(" ", 3);

 

실습 예제)

//BoardServiceImpl class
//생성자 - 초기값 setting
private BoardServiceImpl() {

        // 외부 property파일 읽어오는 방법1: ResourceBundle 사용
        ResourceBundle rb = ResourceBundle.getBundle("ex0810_Homework\\model\\service\\archiveInfo");
        Map<String, Board> archiveMap = new TreeMap<String, Board>();

        for(String key : rb.keySet()) {
            String value = rb.getString(key);
            // split 메소드를 사용하여 , 단위로 나누어 String 객체 저장
            String[] v = value.split(",");
            Board board = new ArchiveBoard(Integer.parseInt(v[0]), v[1], v[2], v[3], v[4], v[5], Integer.parseInt(v[6]));
            archiveMap.put(key, board);
        }
}

 

3. null과 isEmpty()의 차이

: 아래 부분에서 allBoardList == null은 allBoardList 객체 자체가 생성되지 않았을 경우를 의미

: allBoardList.isEmpty()는 allBoardList 객체는 존재하나 Map타입의 allBoardList 내부에 key-value가 존재하지 않는 상태

//BoardServiceImpl class
//전체 게시물 검색 메소드
public Map<String, Map<String, Board>> getBoardList() throws InexistentException {
    if (allBoardList ==null || allBoardList.isEmpty()) {
        throw new InexistentException("게시물이 존재하지 않습니다.");
    }
    return allBoardList;
}

 

4. TreeMap 객체의 descendingKeySet()메소드를 사용해서 내림차순 정렬

: 아래의 예시는 두번 반복사용

  첫 번째 사용 이유: 게시판 유형을 내림차순으로 정렬

  두 번째 사용 이유: 게시판 내부의 게시물의 key(게시물번호)를 내림차순으로 정렬

//SuccessView Class
// 검색한 전체 게시물을 출력하는 메소드
public static void printBoard(Map<String,Map<String, Board>> allMap) {

    if (allMap instanceof TreeMap) {
        TreeMap<String,Map<String, Board>> treeMap = (TreeMap<String, Map<String, Board>>) allMap;
        Iterator<String> it =treeMap.descendingKeySet().iterator();
        while(it.hasNext()) {
            String kind= it.next();
            Map<String, Board> kindMap = treeMap.get(kind);
            System.out.println("******"+kind+"게시판 전체 게시글 목록******");

            if (kindMap instanceof TreeMap) {
                TreeMap<String, Board> kindTreeMap = (TreeMap<String, Board>) kindMap;
                Iterator<String> it1 = kindTreeMap.descendingKeySet().iterator();
                while(it1.hasNext()) {
                    String key = it1.next();
                    Board board = kindTreeMap.get(key);
                    System.out.println("key= "+key+"["+board+"]");
                }

            }
        }// outerWhileEnd
    }//outerIfEnd

}//methodEnd
Comments