mjeongriver
article thumbnail
Published 2022. 10. 24. 18:43
day20-java TIL/Java

Wrapper class → java의 기본 자료형을 클래스화 한 클래스

byte, int... <object로 부터 상속을 받지 않음> 
Byte(일반화 가능)

object(자바의 최상위 클래스)로부터 상속을 받고, 발전 시켜서 generic

Byte, Short, Charactor, Integer, Long, Float, Double, Boolean 어떻게 기본 자료형의 데이터를 wrapper로 바꿀 것인지
Wrapper를 어떻게 기본 자료형으로 바꿀 건지
문자열과 wrapper의 변환

int x = 10;
new Integer(x); 생성자를 불러서 변환 했었음

Integer i = 10; 실제로 이렇게 썼지만 내부적으로는
10이 new Integer(10); 이렇게 실행 됨
int x = i;

문자열을 wrapper로 할 때는 생성자를 이용함
new Integer("10") 생성자
Integer.parseInt("10");

얘들을 바꿔야 한다는 게 중요함
만든 사람이 만든 Api 문서를 먼저 보고, 그 이후에 구글링

자바는 value 타입이 없습니다. 

1. java.util.Arrays 클래스
- 배열 관련 작업을 쉽게 할 수 있도록 도와주는 클래스
- 배열에서 중요한 것
1) 배열의 순회(순서대로 접근), 맵
2) 배열의 정렬(정리 작업), 하나만 찾기에는 정렬 안해도 되지만 여러개는 하는게 좋음. - sort
3) 검색(정렬을 해야 검색하기 편함)-search
4) 복제 - 복제본에 작업을 한 다음에 커밋해주세요(복사본 작업 했는데 원본에 반영해주세요) - copy, clone
5) 필터링(나이 20살 나와, 30살 나와) - arrays에는 없음. 람다 안에 있음
6) 연산(리듀스)
동일 자료형의 모임이긴 한데, 서로 비교가 가능해야 함. 비교 가능이 포인트
나이, 키 → 비교하지 않기 때문에 묶는게 아니다

** 항상 원본은 두고 복사본으로 작업하는 습관 들이기

1) sort 
- 데이터를 순서대로 나열하는 것을 sort라고 합니다
- 오름차순(ascending-작은 것에서 큰 것 순으로 정렬하는 것으로 기본)과 
- 내림차순(descending-큰 것에서 작은 것 순으로 정렬하는 것) 정렬이 존재합니다.
- 정렬을 구현하는 방법
알고리즘을 직접 적용해서 정렬 - 코딩 테스트에서 퀵 정렬은 필수입니다. (되도록이면 설명까지 할 수 있어야 합니다)
api에서 제공하는 메서드를 이용해서 정렬(각 요소가 크기 비교가 가능하도록 해주어야 합니다)

2) 사용자 정의 클래스 정렬 실습(PersonVO 클래스 참고)
- 데이터를 표현하기 위한 클래스 생성

public PersonVO() {
super();
}

public PersonVO(int num, String name, int age) { //생성자에다 매개변수 받아서 사용하기
super();
this.num = num;
this.name = name;
this.age = age;
}

public int getNum() {
return num;
}

public void setNum(int num) {
this.num = num;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}

@Override
public String toString() {
return "PersonVO [num=" + num + ", name=" + name + ", age=" + age + "]";


//오류 발생
public class Main {

public static void main(String[] args) {

//배열 생성
PersonVO [] persons = {
new PersonVO(1, "수지", 29), 
new PersonVO(2, "아이유", 30),
new PersonVO(3, "카리나", 23),
new PersonVO(4, "아담", 46)
}; 

Arrays.sort(persons);

//배열의 데이터 출력
System.out.println(Arrays.toString(persons));

 

- 실행 하면 예외 발생 - personVO에는 크기 비교를 할 수 있는 메서드가 존재하지 않기 때문입니다
클래스 안에는 정적으로 바꿀 수 없고, 메인은 동적으로 바꿀 수 있음
- PersonVO 클래스에 크기 비교하는 메서드(comparable 메서드)를 만들어서 다시 실행
- 프로그래밍에서 정렬하는 이유: db까지 다녀오면 시간이 오래 걸린다
위의 방법은 정적으로 정렬 - compareTo 메서드가 고정

동적인 정렬-main 메서드에서 크기 비교 (switch문 사용한 예시 참고)

 

2. 검색(Search)
한번만 한다고 하면 순차가 빠르지만 여러번은 제어검색이 빠름


1. 순차검색: 데이터를 앞에서부터 순서대로 탐색을 해나가는 것


2. 제어검색: 정렬한 후 검색하는 것 (정렬)

1) binary search(이분 검색):중앙값과 비교
빠를 가능성이 높음
2) fibonacchi search: 금융 
첫번째와 두번째는 무조건 1, 세번째부터는 앞에 두개의 합이다
3) 보간 검색(Interpolation Search): 검색 위치를 계산 하는 것(비율 계산)
검색값-최소값/최대값-최소값 * 데이터 개수
치명적인 단점: 간격이 달라지면 제대로 동작하기 어려움, 이상치가 있으면 써먹기가 어려움
4) 트리검색: 중요
그 자체로 정렬인 경우가 있다. 데이터를 만들 때 처음부터 정렬을 해버린다
이분 검색이랑 비슷하지만 데이터에 따라서 데이터의 좌우 정렬이 안맞을 수 있다
트리검색은 반드시 해야함
ex. 탐색기 구조
5) 블록 검색 (block)
block은 정렬되어 있지만 block 내부는 정렬하지 않음
(서점) =  큰물류는 되어있지만 내부는 정렬되어 있지 않음
정렬하는데 시간이 너무 많이 걸리니까
취업= 1,2,4가 중요-그림으로 보는 알고리즘


3. 검색에서 제일 빠른 것: 해싱: 해시 함수를 이용
5로 나눈 나머지
21 14 13 10 2
mod 5
0-10
1-21
2-2
3-13
4-15
모든 데이터를 찾는 시간이 똑같음(스마트폰 노래를 듣던지 간에 찾아서 하는 시간이 똑같음)
데이터를 구별하고 똑같은걸 저장하지 않음(노래 똑같은거 저장 못하는거)
다섯자리 이상의 소수 2개를 곱하는 것
데이터를 구별하기 위한 계산을 한다-복잡한 코드를 만들어 낸다

jwt, oauth2(카카오 로그인, 구글 로그인)

 

 

 

 

 

'TIL > Java' 카테고리의 다른 글

day22-java  (0) 2022.10.26
day21-java  (2) 2022.10.25
day19-java  (0) 2022.10.18
day18-java  (0) 2022.10.17
day17-java  (0) 2022.10.14
profile

mjeongriver

@mjeongriver

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그