내일배움캠프 23일차

Drumj·2022년 5월 19일
0

내일배움캠프

목록 보기
23/80

<오늘의 학습>

오늘도 여전히 자바 공부.

날짜, 시간

LocalDate date = LocalDate.now();
LocalTime time = LocalTime.now();

LocalDate dateOf = LocalDate.of(2022,3,30); // 년, 월, 일
LocalTime timeOf = LocalTime.of(17,50,22); // 시, 분, 초

날짜나 시간은 LocalDate, LocalTime 으로 가져오고 지금은 .now() 특정 날짜나 시간은 .of() 로 구한다.

DateTimeFormatter fomatter = DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT);
    String shortFormat = fomatter.format(LocalTime.now());
    System.out.println(shortFormat);

DateTimeFormatter myform = DateTimeFormatter.ofPattern("yyyy년 MM월 dd일");
    String mydate = myform.format(LocalDate.now());
    System.out.println(mydate);

FormatStyle.xxxx 는 자바에서 미리 정해진 스타일을 사용하는데 FULL,LONG,MEDIUM,SHORT 가있다.
이외에 본인만의 스타일을 만들고 싶다면 두번째 코드처럼 .ofPattern을 사용한 후 ()안에 작성해 주면 된다!


컬렉션

컬렉션은 자료구조를 표현하는 인터페이스이다.

  • 리스트 List
    - 순서가 있는 나열된 데이터를 표현
List<Integer> integerList = new ArrayList<>();
integerList.add(1); // ArrayList에 1을 입력.
integerList.add(5); // 5
integerList.add(22); // 22
integerList.add(7); // 7

System.out.println(integerList); // [1,5,22,7]

Collections.sort(integerList); // 아무것도 적지 않으면 기본적으로 오름차순 정리임.
System.out.println(integerList); // [1,5,7,22]
System.out.println(integerList.size()); // 배열의 크기를 알려줌 4

integerList.remove(2); //list의 '숫자'를 지우는 것이 아니라 index를 지운 것! 고로 2번째 자리에 있는 7이 없어지는 거임!
System.out.println(integerList); //[1,5,22]

for( int i=0; i< integerList.size(); i++){
    System.out.println(integerList.get(i)); // i가 0부터 intgerList의 사이즈 만큼 돌면서 1개씩 꺼내서 보여준다.(get을 이용)
}
for(int current: integerList){
    System.out.println(current); // 위의 for 문과 완전 똑같은 코드, current를 사용해서 아주 간단하게 풀었다.
}
  • 셋 Set
    - 순서를 유지하지 않는 데이터의 집합이며 데이터의 중복을 허용하지 않음.
Set<Integer> integerSet = new HashSet<>();
integerSet.add(1);
integerSet.add(1); // 중복을 줘봤다.
integerSet.add(2);
integerSet.add(5);
integerSet.add(9);
integerSet.add(7);
System.out.println(integerSet);
//[1,2,5,7,9] 중복은 제거되고 내가 입력한 순서대로 나오지 않는다.

Set<String> stringSet = new HashSet<>();
stringSet.add("대구");
stringSet.add("대구"); // 마찬가지로 중복
stringSet.add("서울");
stringSet.add("부산");
stringSet.add("우리집");
stringSet.add("대전");
System.out.println(stringSet);
//[대전, 서울, 우리집, 부산, 대구] 중복 제거, 입력한 순서대로 출력되지 않음.

stringSet.remove("대전");
// 위에서 계속 말했듯이 순서대로 출력이 안됨 = index를 파악할 수 없음.
// 그래서 직접 골라서 지워야한다.
System.out.println(stringSet);

List<String> target = new ArrayList<>();
target.add("대구");
target.add("우리집");
// [대구, 우리집] 이라는 리스트를 만든다. 리스트 이름은 target
stringSet.removeAll(target);
//stringSet에서 target에 있는 걸 전부 지운다!
System.out.println(stringSet);
//[서울, 부산] 만 출력된다. 저 위에서 "대전"을 제거했기 때문에 대전은 보이지 않는 것

System.out.println("대구가 포함되어 있나요? " + stringSet.contains("대구"));
System.out.println("서울이 포함되어 있나요? " + stringSet.contains("서울"));
// contains()는 ()안에 넣은 데이터가
// stringSet 에 있는지 확인 하는 함수이고 T,F로 알려준다.

System.out.println(stringSet.size());
// string도 size를 알려준다! 
//이미 위에서 대전, 대구, 우리집 3개를 지웠기 때문에 사이즈는 2!!
stringSet.clear(); // 자료구조를 다 지운다.
System.out.println(stringSet); // [] 만 출력됨!
  • 맵 Map
    - 키(key)와 값(value)을 하나의 데이터로 저장하는 특징을 가진다.
Map<Integer, String> map = new HashMap<>();
// 키와 밸류에 해당하는 타입을 각각 써줘야 한다.
map.put(1,"사과"); //add 가 아닌 put을 사용한다.
map.put(2,"딸기");
map.put(3,"수박");
map.put(4,"멜론");
map.put(4,"체리"); // 중복을 넣어봤다.

System.out.println(map);
// {1=사과, 2=딸기, 3=수박, 4=체리}
// 4에 멜론과, 체리를 넣었었는데
// 멜론은 없어지고 나중에 넣은 체리가 들어가는 걸 볼 수 있다.
System.out.println("1st in map: " + map.get(1));
// 1st in map: 사과
// 여기서 .get()에는 index가 아닌 key를 받는다.
// key를 받아서 value를 출력해준다.
// index라면 딸기를 말하는 거지만 key로 지정을 하기 때문에 사과인 것이다.

map.remove(3);
System.out.println(map); // 위와 마찬가지로 key값을 지정!
//{1=사과, 2=딸기, 4=체리}  3 수박이 없어짐

System.out.println(map.containsKey(2)); // true
System.out.println(map.containsKey(3)); // false
// 2,3 이라는 키가 있는지 확인 후 T,F 로 알려준다.
System.out.println(map.containsValue("수박")); // false
System.out.println(map.containsValue("체리")); // true
// 마찬가지로 이번엔 value를 확인!

map.clear(); // 여기도 clear 사용 가능!
System.out.println(map); // {} 출력
  • 스택 Stack
    - 마지막에 저장한 데이터를 가장 먼저 꺼내는 자료구조. 후입선출(LIFO : Last In First Out)
    / 마치 박스에 내용물을 넣는 것과 같다.
Stack<Integer> stack = new Stack<>();
stack.push(1); // 스택에선 push 사용
stack.push(3);
stack.push(9);
stack.push(5);
stack.push(7);
System.out.println(stack);
//[1, 3, 9, 5, 7] 넣은 순서대로 출력해줌

System.out.println(stack.peek());
// peek은 마지막에 넣은게 뭔지 '확인'만 하는것
System.out.println(stack);// [1, 3, 9, 5, 7] 자료가 그대로 있다.

System.out.println(stack.pop()); // 이거는 완전히 꺼내서 보는것
System.out.println(stack); //[1, 3, 9, 5]

System.out.println(stack.contains(1)); //1이라는 값이 있는지 확인! True
System.out.println(stack.empty()); // clear처럼 비우는게 아니라 비었냐??
// 라고 묻고 T,F를 알려줌 False
stack.clear(); // 이게 진짜 비워!! 라는 것 empty랑 헷갈리면 안됨.
System.out.println(stack.isEmpty());// empty랑 똑같음. 
// 이번엔 위에서 clear를 했기 때문에 True를 반환.
  • 큐 Queue
    - 처음에 저장한 데이터를 가장 먼저 꺼내게 되는 선입선출(FIFO : First In First Out)구조
    / 일방통행 도로의 이미지!!

Queue<Integer> queue = new LinkedList<>();
queue.add(1);
queue.add(3);
queue.add(7);
queue.add(2);
System.out.println(queue); // [1, 3, 7, 2]
System.out.println(queue.poll()); // 앞에 있는 것을 빼내면서 출력 1
// stack 의 pop과 같다.
System.out.println(queue); // [3, 7, 2]
System.out.println(queue.peek()); // 앞에 있는 것을 '확인'만 한다 3
System.out.println(queue); // [3, 7, 2]
// 나머지 다른 것은 stack 과 동일!
  • ArrayDeque
    - 실무에서는 스택이나 큐 대신에 이걸 더 많이 사용한다고 한다. 기본 스택,큐의 기능을 모두 포함하면서도 성능이 더 좋기 때문이라고..!!! 뭐야 사기잖아;;

    또, 큐는 한쪽에서만 값이 삽입되고 다른 한쪽에서만 값을 반환하는 자료구조였는데 Deque는 양 끝에서 삽입과 반환이 이루어 진다고 함!!

    /큐가 일방통행이었다면 이건 2차,3차선 도로 여튼 도로. 양뱡향 다 된다~~

Deque<Integer> deque = new ArrayDeque<>();
deque.addFirst(1);//첫번째에 넣겠다는 뜻
deque.addFirst(2);
deque.addFirst(3);
System.out.println(deque); // [3, 2, 1] 이미 들어가있는 데이터가 있는데
// 계속 첫번째에다가 넣으니까 먼저 넣은 데이터가 뒤로 밀리는 것

deque.addLast(0);//마지막에 넣겠다는 뜻
deque.addLast(9);
System.out.println(deque);// [3, 2, 1, 0, 9] 위와 똑같은 이유로 9가 젤 뒤에 있음.

deque.offerFirst(10); // offer와 add는 기능은 비슷하지만 queue의 크기에 문제가 생길때 offer는 false라는 값을 리턴하고
// add 는 exception을 반환.
System.out.println(deque);// [10, 3, 2, 1, 0, 9]
deque.offerLast(-1);
System.out.println(deque);// [10, 3, 2, 1, 0, 9, -1]

deque.push(23); // stack에서 사용하던 push를 사용할 수 있음.
deque.push(22);
System.out.println(deque); // 근데 앞에 쌓임!! [22, 23, 10, 3, 2, 1, 0, 9, -1]
deque.pop(); // 마찬가지로 stack의 pop도 사용 가능! 근데 push처럼 앞에서 나감! [23, 10, 3, 2, 1, 0, 9, -1]
System.out.println(deque);

deque.pollLast(); // queue에서 사용하던 poll도 사용할 수 있는데 pollLast와 pollFirst를 제공함
System.out.println(deque); //[23, 10, 3, 2, 1, 0, 9] 뒤에 있던 -1이 사라짐

System.out.println(deque.pollFirst()); //23이 사라짐
System.out.println(deque); // [10, 3, 2, 1, 0, 9]

deque.poll(); // 10이 사라짐
System.out.println(deque); // [3, 2, 1, 0, 9]

deque.poll(); // 3이 사라짐
System.out.println(deque); // [2, 1, 0, 9]
// pollLast는 뒤에서 사라지지만, pollFirst와 poll은 앞에서 사라짐.
// 같은 기능인데 왜 이름을 poll과 pollFirst로 나눴는지 모르겠음.
// 이외에 stack이나 queue에서 사용하던 다른 기능들 다 사용가능
// remove, size, peek 등 근데 removeFirst,removeLast / peekFirst,peekLast 등 First,Last를 지원함.
// 아마 Deque 가 양쪽에서 데이터를 입력, 출력할 수 있기 때문에 First,Last라는 이름을 붙인듯 함

오늘도 기본적인 문법은 이해하기 아주 쉽다...
객체지향언어, 예외,에러, 제네릭스... 이런 개념은 왜이렇게 어려울까 ㅠㅠ


오늘도 저녁에 거북이반 스터디가 있었다. 박서림 튜터님이 if,for,switch문에 대해서 잘 알려주셔서 이해가 빡빡 됐다. Scanner 활용도 좋고!
이제 다음에... 객체지향이나 이런것들도 알려주셨으면 좋겠다 ㅠㅠ 아니 왜 이해가 안되냐고;;

--오늘의 한 줄--

Ja,va봐 이게 클릭이란 거야

1개의 댓글

comment-user-thumbnail
2022년 5월 20일

즈ㅏ 브ㅏ봐 이게 클린이란 거야

답글 달기