// 주석은 달수있을땐 많이 다는게 좋다
// 스프링프레임워크에 Batch 공부하기 = 실무에서 자주씀
// 홈페이지 만들때 마지막 로그인 기록 남기기
// 자주 로그인하는 사람들을 따로 분리해서 데이터베이스에 저장
// 리스트에서 배우는 클래스들은 다 외워야한다.
Arrays 클래스
->binaraySearch 메서드 : 제어검색 (정렬이 된 상태에서 검색을 수행) 중 에서 이분검색을 수행해서 데이터가 존재하면 그 데이터의 위치를 리턴하고 존재하지않으면 음수를 리턴하는 메서드
문자열 배열에서 문자열의 위치찾기 -> ArraysMain
Fibonacci 수열
-> 첫번째와 두번째 데이터는 무조건 1
-> 세번째 부터는 앞 2개 항의 합
1, 1, 2, 3, 5, 8, 13, 21, 34, 55
첫번째랑 두번째는 반복문에서 제외(규칙이 성립하지않음)
2. 재귀를 이용한 해결 = 시간이 오래걸리지만 이해하기에는 쉬움
3. 재귀를 이용하지않고 해결 = 시간을 단축할 수 있지만 이해하기가 어려울 수 있음
날짜 관련 클래스
1. 종류
java.Util.Date
java.Sql.Date / java.Sql.Time
java.Util.Calendar / java.Util.GregorianCalendar
LocalDataTime
2. Epoch time
1970년 1월 1일 자정
3. Java.Util.Date
1970년 1월 1일 자정을 기준으로 지나온 시간을 밀리초 단위의 롱타입으로 관리
long타입이기때문에 2035년도가 마지막
년도를 설정할 때는 1900년이후 지나온 년 수로 설정할월을 설저알때는 1을 빼서 설정해야함(0부터시작)
toString메서드 와 단위 별로 추출하는 메서드를 제공함
출력할때는 java.text.SimpleDateFormat 클래스와 같이 사용하는 경우가 많다.
SimpleDateFormat sdf = new SimpleDateFormat("날짜 서식");
sdf.format(Date 객체)를 이용해서 날짜 서식이 적용된 문자열을 리턴받을수 있다.
년도 = yy / yyyy
월 = M / MM / MMM
일 = d / dd
요일 = E / EE / EEE
시간 = H / HH
오전/오후 = a
분 = m / mm
초 = s / ss
4. Java.Sql.Date와 Java.Sql.Time
=> 날짜와 시간이 분리된 클래스로 관계형 데이터베이스와 연동할 때 사용할 수 있는 클래스
5. Java.Util.Calendar 와 Java.Util.GregorianCalendar
- Java.Util.Calendar은 날짜 관련된 메서드를 가진 추상 클래스
-> (Abstract Class - 인스턴스를 생성할 수 없는 클래스)
- Java.Util.GregorianCalendar 클래스는 Calendar클래스의 메서드를 구현한 하위클래스
->인스턴스 생성
Calendar calendar = new GregorianCalendar();
여러종류의 생성자가 제공되서 날짜 및 시간을 설정해서 생성하는것도 가능
Date 클래스에 비해서 많은 양의 정보를 제공합니다.
6. LocalDataTime
최근에 데에터베이스의 날짜 및 시간 데이터에 매핑할 때 많이 이용하는 클래스
날짜와 시간 데이터를 많이 사용할 것 같으면 학습이 조금 필요합니다
7. 추가학습
Calendar클래스나 LocalDateTime 클래스에서 시간의 연산부분(특히 뺄셈)
Calendar클래스나 LocalDateTime 클래스에서 지역이나 시간대 설정하는 부분
8. Random
Random클래스는 seed를 만든 후 seed에서 숫자를 하나씩 추출하는 클래스
->생성자
Random(): seed 를 현재 시간에 생성 - 어느정도 랜덤 보장
Random(long seed) seed를 고정 - 랜덤이 아니고 일정한 패턴의 숫자를 가져옵니다.
->데이터를 추출하는 메서드
next자료형()
nextint(int n) : 0부터 n보다 작은 수 까지 범위에서 추출
->UUID
랜덤한 문자열을 만들어주는 클래스
UUID.randomUUID.toString()을 이용해서 랜덤한 문자열을 만들어 줍니다.
고유한 식별자를 생성할때 주로 이용합니다.
데이터 분류
1.
Mutable Data (변경 가능한 데이터) // 동시에 작업하면 안됨
변경이 가능한 데이터는 데이터에 접근을 할때 락을걸어야함 (atm과 인터넷뱅킹)
Immutable Data (변경 불가능한 데이터)
2.
Scala Data = 데이터가 1개인 데이터
Vector Data / Collection 데이터 = 0개이상의 데이터
인덱스로 구분을 하는건 배열과 List
이름을 가지고 구분을 하는것 클래스와 Map
3.
정형, 비정형, 반정형
정형 = 모양이 똑같은것들이 모여있는것 ( Table / Class / )
비정형 = 마음대로 저장가능 ( MAP )
반정형 = 문자열인데 정형으로 변환이 가능한것들 ( HTML / XML / YML / JSON )
Generic 제너릭
1. Template Programming ( 일반화 프로그래밍 )
동일한 알고리즘을 사용하는 메서드나 자료구조의 구현때문에 등장
작업은 함수나 메서드가 수행하게 되는데 함수나 메서드는 매개변수에 자료형을 지정해야한다
알고리즘은 같은데 사용하는 데이터의 자료형이 달라서 별도의 메서드나 함수를 구현하는 번거로움이 발생한다.
-자료형의 이름을 임시로 만들어두고 내부에서 임시로 만든 자료형을 사용한 후
인스턴스를 생성할 때 자료형을 결정하는 방식을 이용
단 인스턴스를 만들 때 또는 메서드를 호출할 때 실제 자료형을 기재해야함
이 때 사용되는 자료형은 Object로 부터 상속받은 클래스의 자료형 만 가능함
int와 같은 primitive타입의 경우는 Integer와 같은 Wrapper을 사용해야함
미지정 자료형의 개수는 제한이 없다
인스턴스를 만들때 자료형을 설정하지 않으면 경고가 발생함
->자바에서 템플릿 프로그래밍을 구현하기 위한 문법
클래스 이름 뒤에<>를 추가하고 미지정 자료형 이름을 나열함
클래스 내부에서 미지정 자료형을 사용해서 메서드를 구현함
인스턴스를 생성할때 실제 자료형을 기재해서 생성함
실제 자료형을 기재하지 않으면 Object타입으로 간주함
변수에 실제 데이터 타입을 기재하면 생성자를 호출할때는 기재하지않고 <>만 설정해도 됨
->용도
자료구조 클래스를 만들때 모든 자료형의 데이터를 저장 할 수 있도록 하기 위해서 사용
특정 자료형의 데이터만 대입받기 위한 용도로도 사용 : 이경우는 대부분 탬플릿에 인터페이스를 설정
처음 공부를 할 때는 제너릭이 적용된 클래스의 인스턴스를 만드는 방법을 먼저 학습을 하고 제너릭을 적용하는 클래스를 만들어가는 형태로 하는것이 좋다
2. List구조 : 데이터를 순서대로 연속해서 저장하는 자료구조
1) Java.Util.List인터페이스
->List 구조에서 공통으로 사용하는 메서드의 원형을 가진 인터페이스
---------------------------------------------------------
->Array(배열) : 크기가 고정인 List
생성할때 크기를 지정하고 크기를 바꿀수가 없다( 중간값 제거나 중간에 데이터를 삽입 할 수 없다)
저장된 데이터를 변경하는것은 가능하지만 데이터를 추가하거나 삭제는 안됨
데이터를 추가하거나 삭제를 하고자 하는 경우는 배열을 복사해서 작업을 수행하야함
불필요한 공간이 없기때문에 메모리 효율은 높다
데이터의 크기 변경이 없을 가능성이 높을 때 사용함
---------------------------------------------------------
->Java.Util.List 인터페이스
List구조에서 공통으로 사용하는 메서드의 원형을 가진 인터페이스
boolean add( E e)
void add(int index, E element)
void set(int index, E element)
E get(int index)
E remove(int index 또는 E element)
void sort ( Comparator comparator)
-List 인터페이스는 제너릭이 구현되어 있어서 인스턴스를 생성할 때 저장하고자 하는 데이터의 자료형을 설정해야한다
---------------------------------------------------------
->Java.Util.ArrayList : 예전에는 Vector이라는 클래스를 이용했음
List인터페이스를 구현한 클래스로 데이터를 연속해서 순서대로 저장하는 자료구조 클래스
배열과 달리 크기가 가변이라서 데이터를 추가하거나 삭제하는것이 가능
장점
데이터만 저장하기 때문에 LinkedList보다는 메모리 효율이 좋을 수 있음
전체 데이터를 순회하는 속도가 LinkedList보다는 빠름
단점
중간에 데이터를 삽입하거나 삭제할 때 데이터의 복사 작업이 필요하기 때문에 속도가 느림
연속된 빈 공간이 없으면 생성이 불가능
->ArrayList (Vector) : 크기가 가변인 배열
삽입과 삭제가 가능하지만 어렵다 // 한칸씩 밀어서 넣고 삭제하고 함
---------------------------------------------------------
->Java.Util.LinkedList : 예전에는 Vector이라는 클래스를 이용했음
List인터페이스를 구현한 클래스로 데이터를 논리적인 순서(실제 연속해서 저장되는것이 아니고 앞의 데이터가 뒤의 데이터를 가르키는 구조)대로 저장하는 자료구조 클래스
링크가 1개이면 Single Linked list라고 하고 2개(앞 과 뒤 모두 가르키거나 트리구조에서는 부모나 앞의 형제를가르키고 다른 하나는 자식이나 형제를 가르킴)이면 double linked list 라고 한다.
장점
중간에 데이터를 삽입하거나 삭제할 때 데이터의 이동이 없이 포인터만 이동하기에 빠른 작업이 가능
포인터를 이용해서 다음 데이터를 가르키는 구조이기 때문에 연속된 빈공간이 없어도 생성이 가능
단점
데이터 이외에 포인터도 저장해야 함으로 메모리 효율이 ArrayList에 비해서 떨어질 수 있음
포인터를 따라다님으로 조회속도가 느림
조회를 주로하는 작업(게시판)에서는 ArrayList를 이용하고
삽입과 삭제가 많은 게임같은 분야에서는 LInkedList를 많이 사용함.
->LinkedList ( 링크드 리스트 ) : 다음 데이터를 가르키는 구조
첫 데이터는 Head혹은 BoF로 불림 / 마지막 데이터는 Tail혹은 Eof로 불림
삽입과 삭제는 빠르지만 접근이 느림 // 삭제가 아닌 다음 주소값을 변경함 // 데이터의 이동이 없음
단점 : 공간을 많이씀 (데이터랑 다음데이터의 해쉬코드) 메모리 낭비 / 조회가 느림 / 연속된 빈공간이 없으면 저장을 못함
---------------------------------------------------------
->DoubleLinkedList ( 더블 링크드 리스트 ) :
---------------------------------------------------------
->Stack (스택) : Last In First Out
통같은 공간에서 데이터를 넣고 뺄때 맨위에 있는게 먼저 빠져나가는것처럼 동작함
push() & pop()
---------------------------------------------------------
->Queue (큐) : First In First Out -> 인터페이스
통로를 지나가듯이 맨처음에 들어온걸 밀어내서 맨 먼저 나가는 형식
스케줄링은 Queue를 사용한다 (작업의 순서) RPA나 스마트팩토리는 모두 Queue를 사용함
---------------------------------------------------------
->DeQueue (데큐) : 양쪽에서 삽입과 삭제를 가능하지만
가장 자주 사용함 (핸드폰 화면 / 지도 등등등)
(Reuseabledequeue?)
깃허브에 프로젝트 소스코드 업로드
OAuth 공통된 로그인 방식
구글 OAuth / 카카오 OAuth
repository : 저장소 (가장 큰 개념의 저장소
Branch : 저장소 안에 변경내용을 저장하는 저장점
Merge : branch를 통합 :Git에선 pull request라고함
commit : 변경내용을 로컬 git에 반영
push : 변경내용을 웹의 git에 반영
pull : 변경내용을 웹에서 받아오는것
github에서 토큰 생성
최근에는 아이디와 비밀번호로 로그인하지않고 처음한번만 아이디랑비밀번호로 로그인하고
토큰을 발급받아서 로그인여부를 판단하는 방식을 많이 사용함
'노트정리' 카테고리의 다른 글
2022_10_27 정리 (0) | 2022.10.27 |
---|---|
2022_10_26 정리 (0) | 2022.10.26 |
2022_10_24 정리 (0) | 2022.10.24 |
2022_10_18 정리 (0) | 2022.10.18 |
2022_10_17 정리 (0) | 2022.10.17 |
댓글