"book.csv"을 읽어서 Book 객체로 변환한 후, 이를 LinkedList에 저장한다. Books 클래스는 Iterator 패턴을 통해 for-each문으로 쉽게 순회할 수 있다.
코드
book.csv
더보기
더보기
더보기
더보기
더보기
1|이노베이터|창의적인 삶으로 나아간 천재들의 비밀|월터 아이작슨|innovator.jpg|42000|<b>초특급 베스트셀러 『스티브 잡스』에 이은 월터 아이작슨의 놀라운 역작!\r\n최초의 컴퓨터에서 트위터와 페이스북까지,\r\n디지털 혁명을 선도한 창의적인 천재들의 이야기</b>\r\n\r\n국내에서만 70만 부가 판매된 세계적인 베스트셀러 『스티브 잡스』의 저자 월터 아이작슨이 10년을 준비한 역작, 『이노베이터』가 돌아왔다. 세상을 바꾸는 혁명을 일궈낸 창의적인 천재들의 이야기를 담고 있는 이 책은 ‘반짝이는 아이디어는 어떤 과정을 통해 구체화 되는가? 시대를 앞서간 기술들은 어떻게 만들어지는가? 이런 혁신적인 생각을 하는 사람들은 무엇이 다른가?’라는 질문에서 시작되었다.\r\n\r\n세계에서 가장 영향력 있는 100인에 선정된 월터 아이작슨은 「타임」의 전 편집장이자 밀리언셀러 전기 작가답게 19세기부터 컴퓨터, 마이크로칩, 인터넷 등 디지털 혁명을 이끈 수많은 혁신가의 이야기를 한편의 대하드라마로 엮어 완성했다. 세계 최초의 프로그래머로 알려진 에이다 러브레이스의 이야기부터 시작해 컴퓨터 과학과 인공지능의 아버지라 불리는 앨런 튜링, 인텔의 로버트 노이스, 마이크로소프트의 빌 게이츠, 애플의 스티브 워즈니악과 스티브 잡스, 구글의 래리 페이지까지 디지털 혁명을 이끈 주역들의 일대기를 세밀한 자료 조사를 통해 생생하게 전달해 준다.\r\n\r\n이 책은 다가올 시대의 흐름을 빠르게 읽고, 나아가 새로운 비즈니스 기회를 모색하는 이들에게는 가장 지혜로운 길라잡이가 되어줄 것이며, 불확실성이 지배하는 미래에 대한 두려움을 극복하고 이노베이터로 거듭나는 비밀이 궁금한 사람들에게는 새롭고 분명한 해답을 줄 것이다.|
3|코스모스|특별판|칼 세이건|cosmos.jpg|50000|전 세계 60개국에 방송되어 6억 시청자를 감동시킨 텔레비전 교양 프로그램을 책으로 옮긴 칼 세이건(Carl Sagan)의 『코스모스(Cosmos)』. 현대 천문학을 대표하는 저명한 과학자인 칼 세이건은 이 책에서 사람들의 상상력을 사로잡고, 난해한 개념을 명쾌하게 해설하는 놀라운 능력을 마음껏 발휘한다. 그는 에라토스테네스, 데모크리토스, 히파티아, 케플러, 갈릴레오, 뉴턴, 다윈 같은 과학의 탐험가들이 개척해 놓은 길을 따라가며 과거, 현재, 미래의 과학이 이뤘고, 이루고 있으며, 앞으로 이룰 성과들을 알기 쉽게 풀이해 들려준다. \r\n\r\n이 책은 모두 13개장으로 구성되어 있다. 칼 세이건은 이 책에서 10조 개의 별들을 품고 있는 은하가 10조 개 있는 광막한 대우주의 세계에서 은하수 은하의 변방, 자그마한 노란색 별 태양이 이끄는 태양계의 한구석에서 창백하게 빛나는 지구에 이르기까지 코스모스에 대해 우리 인류가 알게 된 것들, 알게 된 과정들, 그리고 알아 갈 것들을 소개하고 그것이 궁극적으로 우리 자신을 알기 위한 것임을 설득력 있게 보여 준다. 코스모스 특별판은 수록 이미지가 흑백으로 실려 있다|
5|세계대전 Z| |맥스 브룩스|worldwarz.jpg|13800|가상의 전염병이 불러온 대재난을 인터뷰라는 기상천외한 방식으로 풀어낸 소설 『세계 대전 Z』. 출간 즉시 《뉴욕타임스》, 《USA투데이》, 미국 인터넷 서점 Amazon.com의 종합 베스트셀러 1위를 기록하고, 전 세계 10여 개국에 판권이 판매되는 등 폭발적인 인기를 얻고 있는 작품이다.\r\n\r\n미국 서점에서 하나의 독립 장르로 구분될 만큼 인기를 얻고 있는 좀비 장르이면서도, 재난에 대처하는 인류의 생존 보고서 형식을 띠고 있는 『세계 대전 Z』는 정치, 군사, 국제 관계, 구조 등에 관한 전문 지식을 밑바탕으로 현장감 넘치는 묘사와 흡인력 있는 구성을 지니고 있다. 저자 맥스 브룩스는 다큐멘터리의 특수성을 살려 국가 권력자와 군부를 신랄하게 풍자하고, 위기의 순간에 다양한 인간군상을 등장시킨다.\r\n\r\n배우 브래드 피트와 레오나르도 디카프리오가 영화 판권을 놓고 대립했을 만큼 할리우드에서 주목받기도 하였으며, 결국 브래드 피트가 주연한 영화 『월드워 Z』가 2013년 개봉을 기다리고 있다.|
2|모비 딕| |허먼 멜빌|mobydick.jpg|50000|<b>피쿼드호의 선장 에이해브, 복수를 위해 거대한 고래 모비 딕을 찾아 대추격하다!</b>\r\n\r\n모험과 도전을 사랑하는 이스마엘은 미국 낸터킷에 가서 고래잡이배, 피쿼드호에 타게 돼요. 그 배의 선장인 에이해브는 고래 사냥을 하던 중 거대한 고래, 모비 딕에게 한쪽 다리를 잃고 의족을 달았어요. 그때부터 선장은 고래를 잡아 고래기름을 모으는 것보다 모비 딕을 찾는 일을 더 열심히 해요. 복수를 하기 위해서지요. 그는 날마다 선실에 틀어박혀서 바다의 지도를 보면서 모비 딕이 지나갈 만한 곳을 찾아요. 고래들이 좋아하는 풍부한 먹잇감이 있는 곳을 찾고, 다른 배를 만날 때마다 그 배의 선장에게 모비 딕을 봤는지 묻지요. 이스마엘은 선장의 복수심과 집착, 또한 그 끈질김과 도전 정신에 놀라고 감탄해요.\r\n\r\n그러다 어느 날 진짜로 모비 딕을 만나게 되고, 선장은 네 대의 보트로 모비 딕을 둘러싸고 작살을 던져 공격해요. 하지만 거대한 모비 딕은 당하고만 있지 않고 반격을 하지요. 이스마엘은 고래는 잡아야 할 대상이지만 또한 너무나 신비롭고 아름다운 존재라고 생각해요. 그러한 존재를 한낱 등을 밝히는 고래기름을 위해 죽여야 한다니 안타깝다고도 생각하지요. 하지만 에이해브 선장은 끝없는 복수를 꿈꿔요. 삼 일에 걸쳐 모비 딕을 추격하면서 선장은 자신의 모든 것을 걸지요.\r\n\r\n이 책에는 고래잡이배 선원들의 일과와 고래 사냥에 대한 상세하고 실감 나는 묘사들도 가득해요. 드넓은 바다에서 고래를 어떻게 발견하고, 어떻게 작은 노 젓는 보트를 타고 작살로 고래를 잡는지, 고래를 잡은 뒤에는 밧줄로 어떻게 그 큰 고래를 손질하는지, 작살잡이와 항해사들은 어떤 역할을 하는지에 대한 흥미진진한 이야기도 즐겨 보세요|
4|총,균,쇠|인간사회의 운명을 바꾼 힘|제럴드 다이어몬드|ggs.jpg|26820|문명의 생성과 번영의 수수께끼를 밝힌 세계적 명저\r\n\r\n마침내 만나는 출간 25년 기념 뉴에디션!\r\n\r\n학문의 경계를 넘나드는 세계적 석학 제레드 다이아몬드. 인류 문명에 대한 예리한 통찰을 전해온 그의 대표작이자 1998년 퓰리처상 수상작 《총, 균, 쇠》를 새 번역, 새 편집으로 만난다. 왜 어떤 국가는 부유하고 어떤 국가는 가난한가? 왜 어떤 민족은 다른 민족의 정복과 지배의 대상이 되었는가? 생물학, 지리학, 인류학, 역사학 등 다양한 학문의 융합을 통해 장대한 인류사를 풀어내며 오늘날 현대 세계가 불평등한 원인을 종합 규명한 혁신적 저작. 출간 25년 기념 뉴에디션에는 2023년 저자 특별서문과 서울대 인류학과 박한선 교수의 해제, 새 서문과 후기를 수록해 풍성한 읽을거리를 더했다.|
Book.java
더보기
더보기
더보기
더보기
더보기
public class Book implements Comparable<Book>{
private int no;
private String title;
private String subTitle;
private String author;
private String image;
private int price;
private String description;
public Book(int no, String title, String subTitle, String author, String image, int price, String description) {
this.no = no;
this.title = title;
this.subTitle = subTitle;
this.author = author;
this.image = image;
this.price = price;
this.description = description;
}
public int getNo() {
return this.no;
}
public String getTitle() {
return this.title;
}
public String getSubTitle() {
return this.subTitle;
}
public String getAuthor() {
return this.author;
}
public String getImage() {
return this.image;
}
public String getPrice() {
return String.format("%,d", this.price);
}
public String getDescription() {
return this.description;
}
public int compareTo(Book book) {
return this.no - book.no;
}
@Override
public String toString() {
return this.no + ", " + this.title + "," + this.author + ", " + this.getPrice();
}
}
Books.java
더보기
더보기
더보기
더보기
더보기
import java.util.List;
import java.util.LinkedList;
import java.util.Iterator;
import java.util.Collections;
import java.util.Comparator;
import java.io.File;
import java.io.FileInputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Books implements Iterable<Book> {
List<Book> list;
public Books() {
this.list = new LinkedList<>();
this.getBooks();
}
private void getBooks() {
File file = new File("book.csv");
try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"))) {
String line = "";
while ((line = reader.readLine()) != null) {
String[] bookInfo = line.split("\\|");
this.list.add(new Book(Integer.parseInt(bookInfo[0]), bookInfo[1], bookInfo[2], bookInfo[3], bookInfo[4], Integer.parseInt(bookInfo[5]), bookInfo[6]));
}
}
catch (Exception e) {
e.printStackTrace();
}
}
public void sort() {
Collections.sort(this.list);
}
public void sort(Comparator<Book> comparator) {
Collections.sort(this.list, comparator);
}
public Book search(int no) { // binary search
this.sort();
int left = 0;
int right = this.list.size() -1;
while(left <= right) {
int mid = left + (right - left) / 2;
if(this.list.get(mid).getNo() == no) {
return this.list.get(mid);
}
else if(this.list.get(mid).getNo() < no) {
left = mid + 1;
}
else {
right = mid - 1;
}
}
return null;
}
public Iterator<Book> iterator() {
return this.list.iterator();
// 배열이면 Arrays.stream(배열);
}
}
App.java
더보기
더보기
더보기
더보기
더보기
public class App {
public static void main(String[] args) {
Books books = new Books();
// 총 3개의 방법.
// for(Book b: books.list) { // 원래 이렇게도 가능.
// System.out.println(b);
// }
// books.forEach((x) -> System.out.println(x)); // Iterable이니까 이렇게 가능.
books.forEach(System.out::println); // Iterator니까 이렇게도 가능.
System.out.println("");
books.sort(); // no로 정렬
books.forEach((x) -> System.out.println(x));
System.out.println("");
books.sort((b1, b2) -> b1.getPrice().compareTo(b2.getPrice())); // price로 정렬
for(Book b : books) {
System.out.println(b);
}
}
}
실행 결과
1, 이노베이터,월터 아이작슨, 42,000
3, 코스모스,칼 세이건, 50,000
5, 세계대전 Z,맥스 브룩스, 13,800
2, 모비 딕,허먼 멜빌, 50,000
4, 총,균,쇠,제럴드 다이어몬드, 26,820
1, 이노베이터,월터 아이작슨, 42,000
2, 모비 딕,허먼 멜빌, 50,000
3, 코스모스,칼 세이건, 50,000
4, 총,균,쇠,제럴드 다이어몬드, 26,820
5, 세계대전 Z,맥스 브룩스, 13,800
5, 세계대전 Z,맥스 브룩스, 13,800
4, 총,균,쇠,제럴드 다이어몬드, 26,820
1, 이노베이터,월터 아이작슨, 42,000
2, 모비 딕,허먼 멜빌, 50,000
3, 코스모스,칼 세이건, 50,000
2024.09.02 - [Java] - [Java] 14. Collections Framework
[Java] 14. Collections Framework
Chapter 1: Collection FrameworkCollection 개요Java Collections FrameworkCollection 클래스의 저장 구조Java Collections Framework 구성Collection 인터페이스Collection 인터페이스의 주요 메소드 Chapter 2: Iterator, Comparable, Compa
lightningtech.tistory.com
출처: https://github.com/gikpreet/class-programming_with_java/tree/master
GitHub - gikpreet/class-programming_with_java
Contribute to gikpreet/class-programming_with_java development by creating an account on GitHub.
github.com
'Java > Java 연습 문제' 카테고리의 다른 글
[Java 연습문제] Singleton과 Prototype 리포지토리 * (0) | 2024.09.08 |
---|---|
[Java 연습 문제] 학생 관리 시스템 * (0) | 2024.09.01 |
[Java 연습 문제] String Sort (with Bubble Sort) (0) | 2024.09.01 |
[Java 연습 문제] 상속을 사용하여 인터페이스 구현 (0) | 2024.08.31 |
[Java 연습 문제] 텍스트 파일의 소문자 복사본 생성 (0) | 2024.08.30 |