JAVA/Bootcamp 자바

직접 만들어 사용하는 Class, Gson, Json

whyHbr 2024. 3. 14. 18:31
728x90
반응형

Utility api 를 만들어 사용해보자 

 

public class MinMaxFinder {
    private MinMaxFinder(){
        //private을 하면 객체 생성을 막을 수 있다.
        //new 못하고 클래스이름과 도트연산자
    }
    public static int findMin(int[]arr){
        int min = arr[0];//초기값 세팅

        for(int i=1; i< arr.length; i++){
            if( arr[i]< min){//arr[i]값이 min보다 적게 되면
                min =arr[i]; //min에 arr에 있는 값을 옮겨줌
            }
        }
        return min;
    }
    public static int findMax(int[]arr){
        int max = arr[0];//초기값 세팅

        for(int i=1; i< arr.length; i++){
            if( arr[i]> max){//arr[i]값이 min보다 적게 되면
                max =arr[i]; //min에 arr에 있는 값을 옮겨줌
            }
        }
        return max;
    }
}

 

최소값, 최대값을 구하는 클래스이다. 

 

int min = arr[0] // 모든 원소는 0보다 크다. 0은 최소값

최소, 최대 값이 들어갈 공간을 초기화한다.

 

원소보다 큰 값, 원소의 가장 큰 값을 min = arr[0]에 저장한다

min에 가장 작은 큰 값이 있다 -> 다음 원소가 5라면 -> 5 저장 후, 다음 값과 비교 -> 오는 원소들과 비교, 작으면 저장,  크면 현 원소 유지.

 

min에 최소값이 들어가려면, 가장 큰 수를 넣는다. 다음 차례 원소들과 비교해가며 작은 값 찾음

min보다 작으면 교체

max는 가장 작은 수를 넣는다.

큰 값 -> 다음 수가 6이라면? 원래 값 보다 크면 저장, 아니면 유지.

 

배열의 0번. 맨 앞 값을 min, max로 넣고 시작한다.

왜?

첫원소 기준으로 비교하며 시작한다.

 

findMin

arr[i] < min // ex ) 3 < 5 라면, 배열에 저장되어 있는 값이 더 작다. 참이다. 이런 경우 min에 arr 값을 저장한다. 

                 // 10 < 9 라면, 배열에 저장되어 있는 값이 더 크다. 거짓.  넘어간다.

 

 

 

findMax

5(배열의 첫번째 값)를 최대값 이라고 가정. 5보다 클 때 바꿔준다

5 > 3 //5가 더 크다. 거짓. 패스.

5 > 9 // 9가 더 크다. 참. 9를 max값에 넣어준다. 

 

 

 

자바에서 제공해주는 class

 

public class RandomAPI {
    public static void main(String[] args) {
        Random rand = new Random();

        int[]arr = new int[6];
        int i=0;// 저장위치, 반복횟수

        while (i<6){
            int num =rand.nextInt(45)+1 ; //1-45
            boolean isDuplicate = false;

            for(int j=0; j<i; j++){ //중복확인
                if(arr[j] == num){
                    isDuplicate =true;
                    break;
                }
            }
            if(!isDuplicate){
                arr[i++] =num;
            }
        }//6개의 랜덤 수를 저장하는것
        for(int num : arr){
            System.out.print(num+ "  ");
        }
    }
}

 

Boolean isDuplicate =false; // false 는 중복이 아니라는 뜻이다.

True 는 중복.

 

처음 반복문은 무조건 탈출된다. i값이 0이라.

처음은 무조건 중복이 아니다. 그래서 데이터를 넣는다. int i=0;

arr[i++] = num // num 이 4라면,  후위 연산자 이기 때문에 0.0에 num 4가 들어간다.

다음 문장으로 넘어갈 때 i가 1로 증가한다.

arr[1]로 이동, arr[0]과 비교해 값을 넣는다. 

 

2번째 for 문, i=0, j=0이니 한 번은 반복이 된다.

0에 4가 들어가 있다 ? -> 9와 4 비교, if문 실행하지 않음

 

 

-----------------------------

 

 

https://mvnrepository.com/

 

maver - pom.xml이라는 관리 파일, 환경 설정 파일

jar - 직접 다운로드

pom, build, gradle 은 자동 다운로드( 코드 삽입 해줘야함)

 

Json?

Json: 언어마다 데이터 포맷이 다른데, 다른 진영과 데이터 포맷을 문자열 형태로 주고받는다

{"key" : "value", "age" :23}

키와 값으로 이루어진 데이터 객체. 데이터 교환 방식이다.

플랫폼, 언어와 상관 없이 교환 가능하다.

 

Gson을 쓰기 위한 라이브러리 추가

File - Prohect structure - libraries -추가 - 다운 받은 파일 추가

import com.google.gson.Gson;
import fc.java.model2.Person;

public class GsonTwoAPI {
    public static void main(String[] args) {
        Person person = new Person("n1me",30);
        Gson gson = new Gson();
        String json = gson.toJson(person); //toJson이 데이터 타입을 문자열로 바꿔준다
        System.out.println(json);
    }
}

 

toJson이 문자열로 변경시켜준다. 변경된 문자열을 String json에 저장 후 출력하면

-> {"name":"n1me","age":30}

이렇게 출력된다. 이것을 json 문자 포맷이라고 한다.

 

 

이 json형식을 person형식으로도 바꿀 수 있어야 하는데...

import com.google.gson.Gson;
import fc.java.course2.model3.Member;


public class GsonFromJson {
    public static void main(String[] args) {
        String json ="{\"name\":\"name\",\"age\":24}";
        //json문자열을 object, Memeber 로 변환 시킨 것
        Gson gson = new Gson();
        Member mvo = gson.fromJson(json, Member.class);
       System.out.println("mvo = " + mvo);
        //제이슨 문자열을ㅍ멤버로 프롬 제이슨이 바궈줌.
    }
}
String json ="{\"name\":\"name\",\"age\":24}";

역슬래시를 넣어줘야 한다. 

 

Member 객체로 바꾸려면

Member mvo = gson.fromJson(json, Member.class);

Gson.fromJson(json, Member.class) 를 사용해 Member 타입으로 변환. 

728x90