[내일배움캠프] 11/17 목요일 TIL 회고록
오늘 오전 9시에 실시간 강의를 들었다.
소프트웨어 가치 = 변화
낮은 비용으로 변화 가능해야함.
TDD,DDD, 클린 아키텍처, 클린 코드
객체 지향은 어떻게 비용을 낮춰주는가? -> 캡슐화 + 다형성(+추상화)
1-20 날짜와 시간 다루기
LocalDate.now = 지금 년/월/도를 보여줌 ex) 2022-11-17
LocalTime.now = 현재 시간을 보여줌 ex)15:59:38...
LocalDateTime.now = 지금 년/월/도랑 현재 시간을 보여줌 ex)2022-11-17 10:59:38..
LocalDate.of(년/월/도) = 년/월/도를 직접 키보드로 입력해서 입력한 값을 보여줌
LocalTime.of(시/분/초): hour/minute/second 를 직접 키보드로 입력해서 입력한 값을 보여줌
날짜와 시간을 원하는 형식으로 출력 하는 법
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT);
String shortFormat = formatter.format(LocalTime.now());
System.out.println(shortFormat);
내가 직접 원하는 형식으로 출력 하는 법
DateTimeFormatter newFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
String myDate = newFormatter.format(LocalDate.now());
System.out.println(myDate);
컬렉션
1-22
List 함수. List는 ArrayList 말고는 실무에서 잘 쓰이지 않는다고 한다.
public class Main {
public static void main(String[] args) {
// List라는 자료구조를 먼저 하고 <>로 어떤 타입의 자료 구조를 담을지 선언
// new ArrayList<>(); 사용
List<Integer> integerList = new ArrayList<>();
integerList.add(1); //.add (자료 넣기)
integerList.add(5);
integerList.add(4);
integerList.add(11);
integerList.add(10);
System.out.println(integerList); // 넣었던 순서대로 출력됨.
// integerList에 있는 자료구조에 있는 리스트 안에 담긴 걸 정렬한다는 함수. 기본 값은 오름차순으로 정렬
Collections.sort(integerList);
System.out.println(integerList); // 1,4,5,10,11 출력
System.out.println(integerList.size()); //.size = element의 개수만큼 siza를 출력하게 함. 5 출력
integerList.remove(4); //remove (숫자)로 지워짐. 숫자 4가 지워지는게 아닌 index에서 4번째 자리를 삭제
System.out.println(integerList); // 1,4,5,10 출력
for (int i=0; i<integerList.size(); i++) {
System.out.println(integerList.get(i)); // 1,4,5,10 출력
}
for (int current: integerList){ //integerList에 있는 자료를 하나씩 꺼내서 current에 할당해 준다.
System.out.println(current); // 1,4,5,10 출력
}
}
}
Set 함수
순서를 유지하지 않는 데이터의 집합이며 데이터의 중복을 허용하지 않는다.
Hashset은 Set 인터페이스를 구현한 대표적인 컬렉션이다.
public class Main {
public static void main(String[] args) {
// Collection의 자료형에는 primitive 타입은 올 수 없다.
// primitive 타입에 해당하는 class 가 존재하니 그것을 사용한다.
Set<Integer> integerSet = new HashSet<>();
integerSet.add(1);
integerSet.add(1);
integerSet.add(3);
integerSet.add(2);
integerSet.add(9);
integerSet.add(8); // 하나씩 값을 삽입한다.
System.out.println(integerSet); // 1,2,3,8,9 가 출력된다.
Set<String> stringSet = new HashSet<>(); //문자열을 보관할 HashSet 생성
stringSet.add("LA");
stringSet.add("New York");
stringSet.add("LasVegas");
stringSet.add("San Francisco");
stringSet.add("Seoul");
System.out.println(stringSet); // 도시 이름이 정상적으로 출력이 되나 순서가 유지되지 않음
stringSet.remove("Seoul"); //index, 순서를 줄 수 없으니 정확하게 지정을 해줘야함.
System.out.println(stringSet); // Seoul 지워짐
List<String> target = new ArrayList<>(); // 문자열을 여러개 지우기 위해 ArrayList 선언
target.add("New York");
target.add("LasVegas");
// removeAll은 Collection 을 받도록 되어있어 Set 이나 다른 것이 아니더라도 컬렉션 타입이면 올 수 있음.
stringSet.removeAll(target);
System.out.println(stringSet); // 뉴욕과 라스베가스가 없어짐. 샌프란시스코, LA 만 출력
//contains 는 Object 또는 All의 경우 Collection 을 받게 되어 있음.
// contains는 stringSet에 넣어준 데이터가 자료구조에 있는지 확인하는 함수이고 boolean true,false를 리턴하는 함수
System.out.println("LA 포함되어있나요? " + stringSet.contains("LA")); // True 출력
System.out.println("Seoul 포함되어있나요? " + stringSet.contains("Seoul")); // False 출력
System.out.println(stringSet.size()); // 2 출력
stringSet.clear(); // clear() : 자료구조를 전부 지우는 함수
System.out.println(stringSet); // [] 대괄호만 출력
}
}
Map 함수
HashMap 은 Key와 값(Value)을 하나의 데이터로 저장하는 특징을 가진다. 이를 통하여 해상(hashing)을 가능하게
하여 데이터를 검색하는데 뛰어난 성능을 보인다.
public class Main {
public static void main(String[] args) {
// Map은 key에 해당하는 타입, value에 해당하는 타입 두가지를 써야한다.
Map<Integer,String> map = new HashMap<>(); //구현체는 new HashMap으로 선언
map.put(1,"apple"); // map은 .add가 아닌 .put을 사용한다.
map.put(2,"berry"); // key에 해당하는 것과 value에 해당하는 것을 선언해 준다.
map.put(3,"cherry");
System.out.println(map); // 출력하면 1=apple, 2=berry.. 이런 식으로 출력이 된다.
// key=value, key=value 이렇게 표현이 된다.
// get은 key 값을 받는데 0번이라는 key는 선언하지 않아서 get(0)으로 하면 null이 출력된다.
// get(1)로 하면 1= apple 이 나오지 않고 apple 이 출력된다.
// get이라는 함수는 key를 받아서 value 를 리턴하는 함수이다.
System.out.println("1st in map :" + map.get(1));
map.remove(2); // index를 지우는게 아닌 key를 지운다.
System.out.println(map); // berry가 지워짐.
System.out.println(map.containsKey(2)); // containsKey를 이용해 2가 있는지 확인, False 출력
System.out.println(map.containsValue("cherry")); // "cherry" 가 있는지 확인. True 출력
map.clear(); // clear: 모든 내용을 지워주는 함수
System.out.println(map); // 중괄호 {} 만 출력
}
}
Stack 함수
public class Main {
public static void main(String[] args) {
Stack<Integer> stack = new Stack<>();
stack.push(1); //.add가 아닌 .push 를 사용
stack.push(3);
stack.push(7);
stack.push(5);
System.out.println(stack); // 1,3,7,5 출력
// peek: 마지막에 넣은 숫자를 빼지 않고 확인만 하는 함수
System.out.println(stack.peek());
System.out.println("size : " +stack.size()); // size: 4 출력
// pop : 마지막에 넣은 숫자를 빼면서 리턴하는 함수
System.out.println(stack.pop());
System.out.println("size : " +stack.size()); // size: 3 출력
System.out.println(stack.contains(1)); // True 출력 원래 자료 구조에는 없지만 Java에 있는 stack이 구현
System.out.println(stack.empty());// stack이 비어있으면 True, 비어 있지 않으면 False 출력
stack.clear();
System.out.println(stack.isEmpty()); // stack.empty()와 똑같은 의미이다.
}
}
큐(queue) 함수
public class Main {
public static void main(String[] args) {
// queue는 인터페이스이기 때문에 구현체가 필요하다.
// LinkedList<>(); 사용
Queue<Integer> queue = new LinkedList<>();
queue.add(1);
queue.add(5);
queue.add(3);
System.out.println(queue); // 1,5,3 출력
// poll : 앞에 있는 값을 빼내면서 리턴하는 함수
System.out.println(queue.poll()); // 1 출력
System.out.println(queue); // 5, 3 출력
// peek: 앞에 있는 값을 빼내지 않고 확인만 하는 함수
System.out.println(queue.peek()); // 5 출력
System.out.println(queue); // 5,3 출력
}
}
ArrayDeque 함수
실무에서는 단순히 Stack, Queue 클래스 대신에 ArrayDeque를 많이 사용한다.
기본 Stack, Queue의 기능을 모두 포함하면서 성능이 더 좋기 때문이다.
큐(Queue)와 달리 양 끝에서 삽입과 반환이 가능하다.
public class Main {
public static void main(String[] args) {
ArrayDeque<Integer> arrayDeque = new ArrayDeque<>();
arrayDeque.addFirst(1); // 첫번째에 넣겠다는 함수, 큐에 문제가 생기면 exception 출력
arrayDeque.addFirst(2);
arrayDeque.addFirst(3);
arrayDeque.addFirst(4);
System.out.println(arrayDeque); // 4,3,2,1 출력, 계속 앞자리로 넣게되니 맨 처음 넣은 숫자는 뒤로 밀림
arrayDeque.addLast(0); // .addLast : 뒤에다가 넣겠다는 함수
System.out.println(arrayDeque); // 4,3,2,1,0 출력
arrayDeque.offerFirst(10); // .offerFirst : 첫번쨰에 넣어지고, 큐에 크기에 문제가 생기면 false라는 리턴값 리턴
System.out.println(arrayDeque); // 10,4,3,2,1,0 출력
arrayDeque.offerLast(-1); // .offerLast: 마지막번쨰에 넣어지고, 큐에 크기에 문제가 생기면 false라는 리턴값 리턴
System.out.println(arrayDeque); // 10,4,3,2,1,0,-1 출력
arrayDeque.push(22); // 첫번째에 22 추가
System.out.println(arrayDeque); // 22,10,4,3,2,1,0,-1 출력
System.out.println(arrayDeque.pop()); // 마지막에 넣어진 22를 제거
System.out.println(arrayDeque); // 10,4,3,2,1,0,-1 출력
System.out.println(arrayDeque.peek()); // 맨 앞에 있는 숫자를 출력, 제거하지는 않음
System.out.println(arrayDeque); // 10,4,3,2,1,0,-1 출력
System.out.println(arrayDeque.size()); // 7 출력
arrayDeque.clear(); // 모두 제거
System.out.println(arrayDeque.isEmpty());
// arrayDeque 가 비어있으면 True, 비어있지 않으면 False 출력, 비어있으니 True 출력
}
제네릭스 강의를 들었는데 .. 이해가 잘 안된다. 그래서 추가로 생활코딩 유튜브에서 제네릭스 강의를 보고있다..
이해가 되면 람다 강의로 넘어가야겠다. 자바 강의도 거의 다 봤다.. 다 보면 다시 파이썬 알고리즘 강의를 들을까
깃 강의를 들을까 고민이 된다..ㅋㅋㅋ