강좌 Course 2. Part 1. ch1 요약
API는 직접 만들거나, 자바에서 제공해주는 것을 쓰거나, 다운받아 사용할 수 있다.
배열로 저장된 수 중에서 최대값, 최소값을 구하는 클래스를 만들어보았다. findMin()은 정수 배열을 받아 0번 인덱스의 값을 우선 min값에 저장하고, for문을 사용하여 배열 내의 값과 min에 저장된 값을 비교하여 최소값을 찾는다.
findMax()는 최대값을 찾는다는 것을 빼고 똑같이 설계하였다.
public class MinMaxFinder {
public static int findMin(int[] arr){
int min = arr[0];
for (int i=1;i<arr.length;i++){
if (min > arr[i]) {
min = arr[i];
}
}
return min;
}
public static int findMax(int[] arr){
int max = arr[0];
for (int i=1;i<arr.length;i++){
if (max < arr[i]){
max = arr[i];
}
}
return max;
}
}
public class MinMaxFinderTest {
public static void main(String[] args) {
int[] arr = new int[]{5,3,9,1,7};
int min = MinMaxFinder.findMin(arr);
int max = MinMaxFinder.findMax(arr);
System.out.println("Minimum: "+min);
System.out.println("Maximum: "+max);
}
}
만든 MinMaxFinder를 불러 배열을 인수로 주면, 최소값이 1, 최대값이 9라는 답을 잘 반환하는 것을 확인할 수 있다.
자바에서 제공하는 Random 클래스를 이용해 6개의 난수를 생성하고, 중복되지 않게 배열에 저장해보았다.
Random 클래스는 java.util에 있다.
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(50)+1;
// 0 이상 50 미만의 난수를 반환
// +1이 있으니까 1이상 50이하의 난수를 반환하게 됨
Boolean isDuplicate=false;
// 배열의 이전 인덱스들과 비교해 중복되는지 확인
for(int j=0;j<i;j++){
if (arr[j]==num){
isDuplicate = true;
break; // 중복되면 중지, isDuplicate=True로 변경
}
}
// 중복되지 않은 경우, 배열에 추가
// 중복이면 i 증가 x, 다시 난수 뽑으러 돌아감
if (!isDuplicate){
arr[i++]=num;
}
}
for (int num:arr){
System.out.println(num+" ");
}
}
}
타인이 만든 API를 외부에서 받아 사용할 수도 있다. mvnrepository.com에서 자바 객체를 JSON형식으로 변환하거나 JSON 데이터를 자바 객체로 변환하는 GSON API를 받아 사용해보았다.
2.8.9 버전을 사용하였다. 버전을 누르면 pom 파일과 jar 파일로 다운받을 수 있는데, 직접 다운받아 쓰려면 jar 파일로 받으면 된다. Maven이나 Gradle로 프로젝트를 관리하면 pom을 눌러 나온 스니펫을 pom.xml나 build.gradle에 추가하면 자동으로 다운받아지는 듯 하다.
나는 아직 Maven이나 Gradle을 사용하고 있지 않아서 그냥 .jar 파일로 받았다.
JSON은 JavaScript Object Notation의 약자로, 경량의 데이터 교환 형식이다. 프로그래밍 언어나 플랫폼에 상관없이 데이터를 교환할 수 있도록 설계되었으며, 키-값 쌍(key-value pair)으로 이루어진 데이터 객체를 표현한다.
파이썬의 딕셔너리와 같은 형식을 취하고 있다.
{"name":"John", "age":30}
GSON API를 사용해보기 위해 Person 클래스를 만들었다.
public class Person {
private String name;
private int age;
public Person(String name, int age){
this.name = name;
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
GSON을 사용하려면 일단 다운받은 API의 위치를 잡아줘야 한다. File-Project Structure-Libraries에 들어가서 +를 눌러 다운받은 API가 있는 디렉토리를 잡아주면 새 Java 라이브러리가 추가된다.
GSON을 불러올 때는 import com.google.GSON.*; 을 하면 된다.
import fc.java.c2.model.Person;
import com.google.gson.*;
public class GsonToApi {
public static void main(String[] args) {
// 새 Person 객체 생성
Person p = new Person("John", 35);
// 새 Gson 객체 생성
Gson gson = new Gson();
// Gson 객체로 p를 Json으로 변환
String json = gson.toJson(p);
System.out.println(json); // {"name":"John","age":35}
}
}
반대로 Json을 자바 객체로 변환할 수도 있다.
public class GsonFromApi {
public static void main(String[] args) {
String json = "{\"name\":\"John\",\"age\":30}";
// 맨 바깥 외의 쌍따옴표는 문자열의 시작과 끝을
// 나타내는 쌍따옴표가 아님을 나타내기 위해 앞에 \가 붙음
Gson gson = new Gson();
// gson의 fromJson()을 사용해 json 문자열을 Person 객체로 변환
Person p = gson.fromJson(json, Person.class);
System.out.println(p.toString());
}
}