본문 바로가기

스파르타 부트캠프(spring)

[내일배움캠프_spring] 3주차_JAVA 문법(~1-28강.완강)

타임어택을 생각보다 괜찮게 마무리 했다 3문제를 풀었고 한문제는 뼈대만 대충 만들었는데 나중에 팀원들과 서로 작성한 코드들을 공유했는데 다양하게 푼 문제들도 있고 뼈대를 만든 것도 괜찮은 방향으로 만든 것을 확인할 수 있었다. 스스로 찾아보면서 코드를 작성하니 정말 간단한 코드도 망설이면서 작성하게되었다. 앞으로 프로그래머스나 백준 문제를 꾸준히 풀어야 겠다는 필요성을 느낀다.


1-21.컬렉션- 개념설명
*컬렉션
: JAVA에서 자료구조를 표현하는 인터페이스(-리스트, 스택, 큐, 셋, 맵이 구현하고 있다..)

*컬렉션 프레임워크
: 다수의 데이터를 다루기 위한 자료구조를 표현하고 사용하는 클래스
-List : 순서가 있는 데이터 짐합, 데이터 중복 허용

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Integer> integerList = new ArrayList<>();
        integerList.add(1);
        integerList.add(5);
        integerList.add(4);
        integerList.add(11);
        integerList.add(10);

        System.out.println(integerList);

        Collections.sort(integerList);  //integerList를 순차적으로 정렬해줌. 따로 정하지 않으면 올림차순.
        System.out.println(integerList);
        System.out.println(integerList.size()); //element 개수만큼 size출력

        integerList.remove(4);  //4번째 자리의 index를 제거
        System.out.println(integerList);

        for(int i = 0; i < integerList.size(); i++) {
            System.out.println(integerList.get(i)); //index 0부터 i 까지 해당하는 값을 구할 수 있다.
        }

        for(int current : integerList){
            System.out.println(current); //위와 똑같은 결과
        }
    }
}



-Set : 순서를 유지하지 않는 데이터의 집합, 데이터 중복 허용X

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class Main {
    public static void main(String[] args) {
        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);

        Set<String>stringSet = new 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");
        System.out.println(stringSet);

        List<String> target = new ArrayList<>();
        target.add("New York");
        target.add("LasVegas");
        stringSet.removeAll(target);
        System.out.println(stringSet);

        System.out.println("LA 포함되어있나요?" + stringSet.contains("LA"));
        System.out.println("Seoul 포함되어있나요?" + stringSet.contains("Seoul"));

        System.out.println(stringSet.size());
        stringSet.clear();
        System.out.println(stringSet);
    }
}



-Map : 키(key)와 값(value)의 쌍으로 이루어진 데이터 집합, 순서 유지X, 키는 중복 -> HashMap, TreeMap 등

import java.util.HashMap;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        Map<Integer, String> map = new HashMap<>();
        map.put(1, "apple");  //map은 add 대신 put을 사용한다.
        map.put(2, "berry");
        map.put(3, "cherry");

        System.out.println(map);

        System.out.println("1st in map: " + map.get(0)); //get은 key값을 받아서 value가 나오는 함수. key값을 안 넣어 줬기 때문에 null값이 나온다.
        System.out.println("1st in map: " + map.get(1));

        map.remove(2); //index값을 지우는 것이 아니라 key를 자운다.
        System.out.println(map);
        System.out.println(map.containsKey(2)); //key가 있는지 확인
        System.out.println(map.containsValue("cherry")); //value가 있는지 확인

        map.clear();
        System.out.println(map);
    }
}



-Stack : 마지막에 넣은 데이터를 먼저 꺼내는 자료구조.(LIFO-last in first out)

import java.util.Stack;

public class Main {
    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();
        stack.push(1);
        stack.push(3);
        stack.push(7);
        stack.push(5);
        System.out.println(stack);

        System.out.println(stack.peek()); //마지막에 넣었던 5가 출력, 완전히 꺼내지는 않고 보기만...
        System.out.println("size: " + stack.size()); //4
        System.out.println(stack.pop()); //마지막에 넣었던 5가 출력, 완전히 꺼내면서 return
        System.out.println("size: " + stack.size()); //3

        System.out.println(stack.contains(1)); //true
        System.out.println(stack.empty()); //false
        stack.clear();
        System.out.println(stack.isEmpty()); //true
    }
}



-Queue : 먼저 넣은 데이터를 먼저 꺼내는 자료구조.(FIFO-first in first out)

import java.util.LinkedList;
import java.util.Queue;

public class Main {
    public static void main(String[] args) {
        Queue<Integer> queue = new LinkedList<>();
        queue.add(1);
        queue.add(2);
        queue.add(3);
        System.out.println(queue);
        System.out.println(queue.poll()); //poll : 앞에 있는 것을 빼내면서 리턴하겠다.
        System.out.println(queue);
        System.out.println(queue.peek());
        System.out.println(queue);
    }
}



-ArrayDeque : 기본 stack, queue 기능을 모두 포함하면서도 성능이 더 좋기 때문에 실무에서 많이 사용

import java.util.ArrayDeque;

public class Main {
    public static void main(String[] args) {
        ArrayDeque<Integer> arrayDeque = new ArrayDeque<>();
        arrayDeque.addFirst(1);
        arrayDeque.addFirst(2);
        arrayDeque.addFirst(3);
        arrayDeque.addFirst(4);
        System.out.println(arrayDeque); //계속 앞자리로 넣으니까 맨처음에 앞자리로 넣었던 건 뒤로 밀려나게 됨


        arrayDeque.addLast(0); // 마지막에 추가됨
        System.out.println(arrayDeque);

        arrayDeque.offerFirst(10); //addFirst와 비슷하지만 큐의 크기에 문제가 생길때 offerFirst는 false를 리턴하고 addFirst는 exception이 나온다.
        System.out.println(arrayDeque);
        arrayDeque.offerLast(-1);
        System.out.println(arrayDeque);

        arrayDeque.push(22);
        System.out.println(arrayDeque);
        System.out.println(arrayDeque.pop()); //stack 의 기능도 제공
        System.out.println(arrayDeque);

        System.out.println(arrayDeque.peek());
        System.out.println(arrayDeque);
        System.out.println(arrayDeque.size());
        arrayDeque.clear();
        System.out.println(arrayDeque.isEmpty());
    }
}


1-24.제네릭스
:다양한 타입의 객체들을 다루는 메소드나 컬렉션 클래스에 컴파일 시의 타입 체크를 해주는 기능, 객체의 타입을 컴파일 시 체크하기 때문에 안정성이 높아진다.

public class 클래스명<T> {...}
public interface 인터페이스명<T> {...}


--->꺽쇠 알파벳

1-25.람다
:식별자 없이 실행 가능한 함수, 함수의 이름을 따로 정의하지 않아도 곧바로 함수처럼 사용할 수 있다, 문법 간결
재사용 불가, 비슷한 메소드를 중복되게 생성할 가능성이 있어 지저분해질 가능성

import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.stream.Stream;

public class Main {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("Korea");
        list.add("Japan");
        list.add("France");
        Stream<String> stream = list.stream();
        stream.map(str->str.toUpperCase())    //map: 앞에 있었던 값을 어떤 값으로 바꿀게 , toUpperCase(): 대문자로 출력해줌
                .forEach(it->System.out.println(it));
    }
}



1-26.스트림
:데이터의 흐름, 컬렉션의 저장 요소를 하나씩 참조해서 람다식으로 처리할 수 있도록 해주는 반복자,
데이터 소스 변경X, 작업을 내부적으로 반복 처리, 재사용불가능-필요할 경우 재생성을 해야함

import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("서울");
        list.add("부산");
        list.add("대구");
        list.add("서울");

        System.out.println(list);

        List<String> result = list.stream() //구조 : stream-> transformation ->result
                .limit(2)  //앞에 있는 두 개만 남기고 나머지를 지움
                .collect(Collectors.toList());   //이렇게 스트림 처리된 것을 나중에 하나로 모을건데
        System.out.println(result);

        System.out.println("list -> transformation -> set");
        Set<String> set = list.stream()  //list에 있는 데이터를 하났기 꺼내서
                .filter("서울"::equals) //서울이랑 글자가 같은지 보고 같은 거만 남길거야
                .collect(Collectors.toSet()); //그리고 이것을 set의 자료구조로 바꿔서 모아 줄 거야
        System.out.println(set);
    }
}



1-27.스트림 퀴즈

1-28.네트워킹-Retrofit, Open API
*네트워킹 : 두 대 이상의 컴퓨터를 케이블 또는 인터넷으로 연결하여 네트워크를 구성하는 것
-클라이언트 : 서비스를 사용하게 되는 컴퓨터, 요청을 하는 컴퓨터/ 서버: 서비스를 제공하는 컴퓨터, 요청에 응답하는 컴퓨터
-IP 주소 :  컴퓨터를 구별하는데 사용되는 고유한 값으로 인터넷에 연결이 되어있는 모든 컴퓨터는 IP 주소를 갖는다.
- URL: 인터넷에 존재하는 여러 서버들이 제공하는 자원에 접근할 수 있는 주소를 표현하기 위한 것
-포트번호: 통신에 사용되는 서버의 포트번호
-API : 응용 프로그램에서 사용할 수 있도록 운영체제나 프로그래밍 언어가 제공하는 기능을 제어 할 수 있게 해주는 인터페이스

*Retrofit : 각종 에러처리를 쉽게 해결할 수 있으며 원시적인 방법에 비해 가독성 훌륭