일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Compute Science
- Java Programming
- 기초프로그래밍
- WebProgramming
- til
- 관계형 데이터베이스
- 알고리즘
- Computer Science
- 상속
- 면접을 위한 CS 전공지식 노트
- CS기초지식
- ERD
- 데이터베이스 모델링
- 부스트코스
- java
- 삼성청년SW아카데미
- w3schools
- 모두를 위한 컴퓨터 과학(CS50)
- 모두를 위한 컴퓨터 과학
- 객체지향
- CS50
- SSAFY 9기
- ssafy
- edwith
- 이진법
- exception
- SW
- CS 기초
- CS 기초지식
- 예외처리
- Today
- Total
Joslynn의 하루
대용량 웹서비스를 위한 MSA Full-Stack 개발자 양성 과정 -15일차 노트 필기_자료구조 (컬렉션 프레임워크) 실습_220810 본문
대용량 웹서비스를 위한 MSA Full-Stack 개발자 양성 과정 -15일차 노트 필기_자료구조 (컬렉션 프레임워크) 실습_220810
Joslynn 2022. 8. 11. 00:351. 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