날씨와 시간 다루기
https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html
패키지란? 클래스의 묶음. 클래스or인터페이스을 묶어 효율적으로 관리.
java.time패키지 사용하기- now() 현재
System.out.println("now usages");
LocalDate date = LocalDate.now(); //현재 날짜. 2022-11-17
LocalTime time = LocalTime.now(); //현재 시간. 14:00:40.856
LocalDateTime dateTime = LocalDateTime.now(); //현재 날짜와 시간. 2022-11-17T14:00:40.856
System.out.println(date);
System.out.println(time);
System.out.println(dateTime);
java.time패키지 사용하기- of() 지정
System.out.println("of() usage");
LocalDate dateOf = LocalDate.of(2022, 11, 18); //지정 날짜. 2022-11-18
LocalTime time1 = LocalTime.of(00,00,00); //지정 시간. 00:00
System.out.println(dateOf);
System.out.println(time1);
java.time패키지 사용하기- format 지정.
System.out.println("FormatStyle");
DateTimeFormatter formatterDateTime1 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG);
DateTimeFormatter formatterDateTime2 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM);
DateTimeFormatter formatterDateTime3 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT);
String format1 = formatterDateTime1.format(LocalDateTime.now());
String format2 = formatterDateTime2.format(LocalDateTime.now());
String format3 = formatterDateTime3.format(LocalDateTime.now());
System.out.println(format1);
System.out.println(format2);
System.out.println(format3);
/*
FormatStyle
2022년 11월 17일 (목) 오후 2시 43분 18초
2022. 11. 17 오후 2:43:18
22. 11. 17 오후 2:43
*/
포멧이 크면 밑에 값이 작을 시 출력에는 문제 없음. (반대의 상황은 안됨.)
DateTimeFormatter formatterDate1 = DateTimeFormatter.ofLocalizedTime(FormatStyle.LONG);
DateTimeFormatter formatterDate2 = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM);
DateTimeFormatter formatterDate3 = DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT); // ★
String format21 = formatterDate1.format(LocalTime.now());
String format22= formatterDate2.format(LocalDate.now());
String format23 = formatterDate3.format(LocalDateTime.now()); // ★
System.out.println(format21);
System.out.println(format22);
System.out.println(format23);
/*
오후 3시 17분 49초
2022. 11. 17
22. 11. 17 //★
*/
형식 지정
DateTimeFormatter myFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
String myDate = myFormatter.format(LocalDate.now());
System.out.println(myDate); // 2022/11/17
날짜와 시간의 차이 계산
LocalDate today = LocalDate.now();
LocalDate birthday = LocalDate.of(2020, 1, 1);
Period period = Period.between(today, birthday); // birthday - today. 순서를 바꾸면 양수 출력
System.out.println(period); //P-2Y-10M-16D
System.out.println(period.getMonths()); //-10
System.out.println(period.getDays()); //-16
Period period = Period.between(birthday,today);
System.out.println(period); //P2Y10M16D
System.out.println(period.getMonths()); //10
System.out.println(period.getDays()); //16
Integer
| int | integer |
| primitive type | reference type |
| 객체 저장 불가 | 객체 저장 가능 |
collection framework 의 자료구조와 데이터 알고리즘 인터페이스를 사용 할 때, 담는 것은 객체.
그래서 int 대신 integer를 주로 사용.
Collection
| List ( ArrayList ) | Set (HashSet) | Map (HashMap) |
| 크기 변경 가능 (.add 시 확장) | 크기 변경 가능 (.add 시 확장) | 크기 변경 가능 (.put 시 확장) |
| 순서대로 | 순서 x, 기본 오름차순 | 순서유지 x |
| 중복값 허용 | 중복 불가 | key : 중복o , value :중복x (중복 가능하게 하는 방법도 있고...) |
| List<type> a = new ArrayList<>(); a.add(값); |
Set<type> a = new HashSet<>(); a.add(값); |
Map<key type, val type> a = new Hashmap; a.put(key, value); |
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<>(); // List <타입> 리스트명, 사이즈 미지정
integerList.add(1); // add 하는 순간 사이즈가 늘어남.
integerList.add(5);
integerList.add(4);
integerList.add(11);
integerList.add(10);
System.out.println(integerList); // * [1, 5, 4, 11, 10]
Collections.sort(integerList); // integerList 를 정렬할꺼야. 아무것도 지정하지 않으면 오름차순
System.out.println(integerList); // * [1, 4, 5, 10, 11]
System.out.println(integerList.size()); // * 5
integerList.remove(4); // 4번째 자리.
System.out.println(integerList); // * [1, 4, 5, 10]
for(int i=0; i<integerList.size(); i++){
System.out.println(integerList.get(i)); // * 1 /n 4 /n 5 /n 10
}
for(int current: integerList){ //for Each
System.out.println(current); // * 1 /n 4 /n 5 /n 10 (위와 결과값 동일)
}
}
}
Set
// list와 비슷한데 순서 유지x, 데이터의 중복 허용x
/*
컬렉션 프레임워크를 쓰기위해서는 이자료구조를 담는것은 객체이다 보니
객체를 담을수 있는 타입이여야한다
레퍼런스 타입 참조형 자료조?
프리미티브타입에 해당되는 클래스가 이미 자바에 정의가 되어있기 때문에 integer로 하면 int로 쓰는것과 마찬가지가 됩니다.
*/
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class Main_Set {
public static void main(String[] args) {
Set<Integer> integerSet = new HashSet<>(); // Main_Set : 인터페이스 형태, 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] / 순서 유지x
Set<String> stringsSet = new HashSet<>();
stringsSet.add("LA");
stringsSet.add("New York");
stringsSet.add("LasVegas");
stringsSet.add("San Francisco");
stringsSet.add("Seoul");
System.out.println(stringsSet); // * [San Francisco, New York, LasVegas, LA, Seoul]
stringsSet.remove("Seoul");
System.out.println(stringsSet); // * [San Francisco, New York, LasVegas, LA]
List<String> target = new ArrayList<>();
target.add("York");
target.add("LasVegas");
stringsSet.removeAll(target); // collection type 만 들어갈수 있음. List도 collection type
System.out.println(stringsSet); // * [San Francisco, New York, LA]
System.out.println("LA 포함되어 있나요? " + stringsSet.contains("LA")); // * LA 포함되어 있나요? true , contains는 자료구조가 들어가 있는지 확인해주는
System.out.println("Seoul 포함되어 있나요? " + stringsSet.contains("Seoul")); // * Seoul 포함되어 있나요? false
System.out.println(stringsSet.size()); // * 3
stringsSet.clear();//다 지워짐
System.out.println(stringsSet); // * []
}
}
Map
//key와 value값을 하나의 데이터로 저장하는 특징.
import java.util.HashMap;
import java.util.Map;
public class Main_Map {
public static void main(String[] args) {
Map<Integer,String> map = new HashMap<>(); // Map<key type, value type> map
map.put(1, "apple");
map.put(2, "berry");
map.put(3, "cherry");
System.out.println(map); // * {1=apple, 2=berry, 3=cherry}
System.out.println("1st in map: "+map.get(0)); // * 1st in map: null, get( key ), index값 인식 못 함
System.out.println("1st in map: "+map.get(1)); // * 1st in map: apple, get 함수는 key를 받아서 value 값을 return
map.remove(2);
System.out.println(map); // * {1=apple, 3=cherry}
System.out.println(map.containsKey(2)); // * false
System.out.println(map.containsValue("cherry")); // * true
map.clear();
System.out.println(map); // * {}
}
}
스택(stack)
마지막에 저장한 데이터를 가장 먼저 꺼내는 자료구조로 . LIFO(Last In First Out)
ex)웹브라우저의 앞페이지 이동 뒤페이지 이동, ctrl + z

import java.util.Stack;
public class Main_stack {
public static void main(String[] args) {
Stack<Integer> stack = new Stack<>();
stack.push(1);
stack.push(3);
stack.push(5);
stack.push(7);
System.out.println(stack); // [1, 3, 7, 5]
System.out.println(stack.peek()); // 7, 가장 상단 값 확인 (보기만)
System.out.println(stack.pop()); // 7, 가장 상단 값 출력 (스택에서 꺼냄)
System.out.println(stack.size()); // 3, 사이즈 확인.
System.out.println(stack.contains(1)); // true, 값(1) 이 있으면 true 없으면 false 반환.
System.out.println(stack.empty()); // false, 비어있으면 true, 아니면 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_queue {
public static void main(String[] args) {
Queue<Integer> queue = new LinkedList<>(); //Queue 인터페이스여서 구현체 필요. (LinkedList<> 구현체)
queue.add(1);
queue.add(5);
queue.add(3);//삽입
System.out.println(queue);// *[1, 5, 3]
System.out.println(queue.poll()); // * 1 ,객체를 꺼내서 반환. [5, 3] 남은 상태.
System.out.println(queue.peek()); // * 5 , 보기만.. [5, 3] 남은 상태.
}
}
ArrayDeque
실무에서는 Stack, Queue 대신에 ArrayDeque 많이 사용.
기본 Stack, Queue의 기능을 모두 포함하면서도 성능이 더 좋음.
deque의 경우 양 끝에서 삽입과 반환이 가능

import java.util.ArrayDeque;
public class Main_ArrayDeque {
public static void main(String[] args) {
ArrayDeque<Integer> arrayDeque = new ArrayDeque<>(); // ArrayDeque를 이용한 선언(제네릭스 이용)
arrayDeque.addFirst(1);
arrayDeque.addFirst(2);
arrayDeque.addFirst(3);
arrayDeque.addFirst(4); // 제일 앞에 값 삽입
System.out.println(arrayDeque); // * [4, 3, 2, 1]
arrayDeque.addLast(0); // arrayDeque의 끝에 값을 삽입
System.out.println(arrayDeque); // * [4, 3, 2, 1, 0]
arrayDeque.offerFirst(10); // * [10, 4, 3, 2, 1, 0]
// addFirst와 비슷하지만 큐의 크기 문제가 생길 때, offerFirst는 false를,
// addFrist는 exception을 반환합니다.
System.out.println(arrayDeque);
arrayDeque.offerLast(-1); // array Deque의 끝에 값을 삽입
System.out.println(arrayDeque); // * [10, 4, 3, 2, 1, 0, -1]
// stack 의 기능 제공.
arrayDeque.push(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],
// queue 의 기능 제공.
arrayDeque.push(25);
System.out.println(arrayDeque); // *[25, 10, 4, 3, 2, 1, 0, -1]
System.out.println(arrayDeque.poll()); // 25
System.out.println(arrayDeque); // [10, 4, 3, 2, 1, 0, -1]
System.out.println(arrayDeque.peek()); // 10
arrayDeque.clear();
System.out.println(arrayDeque.isEmpty()); // true
}
}
제네릭스
다양한 타입의 객체들을 다루는 메소드나 컬렉션 클래스에 컴파일 시의 타입 체크를 해주는 기능
- 사용이유
- 객체의 타입 안정성 제공. (잘못된 형변환 방지)
- 타입체크와 형변환 생략으로 코드 간결. (같은 type 인게 확실하니까)
public class 클래스명<T> {...}
public interface 인터페이스명<T> {...}
/*
자주 사용되는 타입인자 약어
- <T> == Type
- <E> == Element
- <K> == Key
- <V> == Value
- <N> == Number
- <R> == Result
*/
Collection.java 중 일부
public interface Collection<E> extends Iterable<E> {
int size();
boolean isEmpty();
Iterator<E> iterator();
boolean add(E e); // 실제 <e>를 넣는것이 아니라 <String>, <integer> 등 지정.
<T> T[] toArray(T[] a);
boolean containsAll(Collection<?> c); // <?> (1)아래 주석 참고
boolean addAll(Collection<? extends E> c); // (2) 아래 주석 참고
}
/*
(1) <?>
위 클래스에서 선언한 <E>가 아닌 다른 타입의 제네릭스 사용가능
컬렉션을 아무거나 받겠다(?) 특정클래스를 지칭하는게 아니란다..??
*/
/*
(2) <? extends E>
addAll(해당 콜렉션)에 다른 콜렉션을 넣어서 여러개 추가 가능.
다만 추가되는 콜렉션의 타입이 <E> 혹은 <E>를 상속받은 자식 클래스에 한에서 가능
*/
// 적어는 놨지만 무슨소린지는 모르겠다. 들은 내용을 정리해서 적어 놓음.
List.java 중 일부
public interface List<E> extends Collection<E> {
// Collection 에 있는 메소드들 모두 포함
// + List 에만 있는 메소드들
boolean add(E e);
}
ArrayList.java 중 일부
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable{
/*
맨 위 클래스에서 꺽쇠로 선언한 타입이 아닌 경우,
이 메소드에서만 쓰이는 제네릭스 표현시,
*** 제일 앞에 <T> 는 이 메소드에서만 사용한다는 표시. ***
*/
public <T> T[] toArray(T[] a) {
if (a.length < size)
// Make a new array of a's runtime type, but my contents:
return (T[]) Arrays.copyOf(elementData, size, a.getClass());
System.arraycopy(elementData, 0, a, 0, size);
if (a.length > size)
a[size] = null;
return a;
}
public E get(int index){
rangeCheck(index);
return elementData(index);
}
public boolean add(E e){
ensureCapacityInternal(size + 1); // Increments modCount!!
elementData[size++] = e;
return true;
}
}
람다식(Lambda expression)
익명 함수
식별자 없이 실행 가능한 함수
함수의 이름을 따로 정의하지 않아도 곧바로 함수처럼 사용
문법이 간결
재사용이 불가능
비슷한 메소드 중복 생성 할 가능성.
람다식의 형식
'→'의 의미는 매개변수를 활용하여 {}안에 있는 코드를 실행
[기존의 메소드 형식] 반환타입 메소드이름(매개변수 선언) {
수행 코드 블록
}
[람다식의 형식]
반환타입 메소드이름(매개변수 선언) -> {
수행 코드 블록
}
import java.util.ArrayList;
import java.util.List;
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())
// .forEach(it-> System.out.println(it));
stream.map(str -> {
System.out.println(str);
return str.toUpperCase();
}).forEach(System.out::println); //파라미터가 1개인 경우 :: 하고 생략가능
}
}
/*
.toUpperCase 대문자로 바꿔주겠다.
.map 앞의 값을 변경하겠다.
.forEach 각각 이런 구문 실행해줘
여러줄로 작성할 경우 {} 넣어주고 return 값이 있어야함.
이중 콜론 연산자(::)는 매개변수를 중복해서 사용하고 싶지 않을 때 사용
*/
스트림(stream)
스트림은 곧 '데이터의 흐름
컬렉션의 저장 요소를 하나씩 참조해서 람다식으로 처리할 수 있도록 해주는 반복자
스트림을 활용해서 필터링,데이터 변경, 다른 타입이나 자료구조로 변환 등 가능
스트림은 데이터 소스를 변경x
스트림은 작업을 내부적으로 반복 처리
스트림은 컬렉션의 요소를 모두 읽고 나면 닫혀서 재사용이 불가능. 그러므로 필요할 경우 재생성
네트워킹(Networking)
두 대이상의 컴퓨터를 케이블 또는 인터넷으로 연결하여 네트워크를 구성하는 것
네트워크의 기본적인 개념
클라이언트(Client) / 서버(Server) (컴퓨터간의 관계를 역할로 구분)
- 서버 : 서비스를 제공하는 컴퓨터, 요청에 응답하는 컴퓨터
- 클라이언트 : 서비스를 사용하게 되는 컴퓨터, 요청을 하는 컴퓨터

IP 주소
컴퓨터를 구별하는데 사용된는 고유한 값, 인터넷에 연결이 되어있는 모든 컴퓨터는 IP 주소를 갖습니다.
URL(Uniform Resource Locator)
URL은 인터넷에 존재하는 여러 서버들이 제공하는 자원에 접근할 수 있는 주소를 표현
URL의 형식 '프로토콜://호스트명:포트번호/경로명/파일명?쿼리스트링#참조' 의 형식
① ②
① 프로토콜은 복수의 컴퓨터 사이에서 데이터 통신을 원활하게 하기 위해 필요한 통신 규약을 의미. ex) Http
② 포트번호 :통신에 사용되는 서버의 포트번호
외부의 다른 장비와 접촉하기 위한 플러그 역할
포트번호는 어떤 프로그램에 접속 할 것인지를 식별하는 역할
아무것도 입력하지 않으면 기본값은 http는 80번, https는 443 포트 (기본값은 안보임)
API(Application Programming Interface)
응용 프로그램에서 사용할 수 있도록 운영체제나 프로그래밍 언어가 제공하는 기능을 제어 할 수 있게 해주는 인터페이스를 의미합니다. client-server 관점에서 API는 요청과 응답의 형식에 대한 약속입니다.
데이터를 주고받는 형식에 대한 약속
'TIL' 카테고리의 다른 글
| 22.11.21_TIL_내배캠 (0) | 2022.11.22 |
|---|---|
| 22.11.18_TIL_내배캠 (0) | 2022.11.18 |
| 22.11.16_TIL_내배캠 (2) | 2022.11.16 |
| 22.11.15_TIL_내배캠 (0) | 2022.11.16 |
| 22.11.14_TIL_내배캠 (0) | 2022.11.14 |