카테고리 없음

[내일배움캠프] 11/17 목요일 TIL 회고록

tft4rollz 2022. 11. 17. 21:15

오늘 오전 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 출력

    }

제네릭스 강의를 들었는데 .. 이해가 잘 안된다. 그래서 추가로 생활코딩 유튜브에서 제네릭스 강의를 보고있다..

이해가 되면 람다 강의로 넘어가야겠다.  자바 강의도 거의 다 봤다.. 다 보면 다시 파이썬 알고리즘 강의를 들을까

깃 강의를 들을까 고민이 된다..ㅋㅋㅋ