자바 API
직접 만들어서 사용하는 Class
- 최대값, 최소값을 구하는 클래스
- 배열을 돌면서 0번째 인덱스 항을 초기값으로 설정하고 인덱스 1부터 비교하면서 최대, 최소값 찾기
public class MinMaxFinder {
private MinMaxFinder(){
// 객체 생성을 막기 위해 private으로 생성자를 구현
}
public static int findMin(int[] arr){
int min = arr[0]; // 초기값
for (int i = 1; i < arr.length; i++) {
if (arr[i] < min){
min = arr[i];
}
}
return min;
}
public static int findMax(int[] arr){
int max = arr[0]; // 초기값
for (int i = 1; i < arr.length; i++) {
if (arr[i] < max){
max = arr[i];
}
}
return max;
}
}
public class MinMaxFinderTest {
public static void main(String[] args) {
int[] arr = {5, 3, 9, 1, 7};
int min = MinMaxFinder.findMin(arr);
int max = MinMaxFinder.findMax(arr);
System.out.println(min);
System.out.println(max);
}
}
Java에서 제공해주는 Class
- 난수를 생성해주는 Random Class
- import java.util.Random 하고 Random rand = new Random();으로 객체 생성해서 사용
- rand.nextInt(정수)
- 0이상 정수 미만의 난수를 반환
- rand.nextInt(정수 + 1)
- 1이상 정수 + 1 미만의 난수를 반환
import java.util.Random;
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; // 후위 연산자로 i에 넣고 i += 1 처리
}
}
for (int num : arr){
System.out.println(num + "");
}
}
}
다운 받아서 사용하는 class
API 다운로드 사이트
Gson
- 자바 객체를 JSON 형식으로 변환하거나 JSON 데이터를 자바 객체로 변환하는 라이브러리(API)
객체 다루기
- 자바 객체를 JSON으로 변환하기
- JSON
- 키-값 쌍으로 이루어진 데이터 객체를 표현
- key : value
- 경량의 데이터 교환 형식
- JSON
- Person 클래스를 정의하고 클래스의 객체를 JSON 형식으로 변환 후 출력
- Gson 객체를 생성한 후, toJson() 메서드를 사용하여 객체를 JSON 형식의 문자열로 변환
import com.google.gson.Gson; import fc.java.model2.Person; public class GsonToAPI { public static void main(String[] args) { Person person = new Person("John", 30); Gson gson = new Gson(); String json = gson.toJson(person); System.out.println(json); // {"name":"John","age":30} } }
- JSON을 자바 객체로 변환하기
- JSON 형식의 문자열을 자바 객체로 변환하고 필드값 출력
- Gson 객체를 생성한 후, fromJson()메서드를 사용하여 JSON 문자열을 자바 객체롤 변환
- 변환한 클래스의 타입을 인자로 전달
import com.google.gson.Gson; import fc.java.model2.Person; public class GsonFromAPI { public static void main(String[] args) { String json = "{\\"name\\":\\"John\\",\\"age\\":30}"; // JSON->Person Gson gson = new Gson(); Person p = gson.fromJson(json, Person.class); System.out.println(p.getName()); System.out.println(p.getAge()); // John // 30 System.out.println(p.toString()); // Person{name='John', age=30} } }
- 자바 객체를 JSON으로 변환하기
만드는 API
배열처럼 동작하는 API
- IntArray 클래스
public class IntArray {
private static final int DEFAULT_CAPACITY = 5; // static final은 나중에 변경 불가능(수정 불가) -> final을 붙이면 상수가 된다
private int[] elements;
private int size = 0;
// 생성 동작
public IntArray(){
elements = new int[DEFAULT_CAPACITY]; // 5개 크기 배열
}
// 저장하는 동작
public void add(int element){
if (size == elements.length){
// 크기를 2배로 늘리는 작업
ensureCapacity();
}
// 크기 확인
elements[size++] = element;
}
// 데이터를 얻는 동작
public int get(int index){ // -1, 5~ 이면 에러 발생
// index 체크
return elements[index];
}
// 원소의 개수를 넘겨주는 동작
public int size(){
return size;
}
//
public void ensureCapacity(){
int newCapacity = elements.length * 2;
elements = Arrays.copyOf(elements, newCapacity); // 복사 : Arrays.copyOf(); 복사한 배열은 elements로 초기화
}
}
public class MyIntArrayTest {
public static void main(String[] args) {
// 정수 3개를 배열에 저장하고 출력하세요
IntArray list = new IntArray(); // 5 크기의 정수형 배열
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
list.add(6); // 에러 발생(리스트의 크기는 5이므로) -> 예외 발생(ArrayIndexOutOfBoundsException) -> 배열의 길이를 2배로 늘려주어야 한다.(ensureCapacity)
System.out.println(list.get(0)); // 1
System.out.println(list.get(1)); // 2
System.out.println(list.get(2)); // 3
System.out.println(list.size()); // 3
for (int i = 0; i < list.size(); i++) { // 123
System.out.println(list.get(i));
}
}
}
사용자 정의 자료형 클래스 만들어 사용하기
public class MyBookArrayTest {
public static void main(String[] args) {
// 책 3권의 데이터를 배열에 저장하고 출력하세요.
BookArray list = new BookArray(); // 책, 길이 = 5
list.add(new Book("자바",15000, "한빛","홍길동"));
list.add(new Book("C++",17000, "대림","이길동"));
list.add(new Book("Python",16000, "정보","나길동"));
// Book vo = list.get(0);
// System.out.println(vo.toString());
//
// vo = list.get(1);
// System.out.println(vo.toString());
//
// vo = list.get(2);
// System.out.println(vo.toString());
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
// Book{title='자바', price=15000, company='한빛', author='홍길동'}
// Book{title='C++', price=17000, company='대림', author='이길동'}
// Book{title='Python', price=16000, company='정보', author='나길동'}
}
}
public class BookArray {
private static final int DEFAULT_CAPACITY = 5; // static final은 나중에 변경 불가능(수정 불가) -> final을 붙이면 상수가 된다
private Book[] elements;
private int size = 0;
// 생성 동작
public BookArray(){
elements = new Book[DEFAULT_CAPACITY]; // 5개 크기 배열
}
// 저장하는 동작
public void add(Book element){
if (size == elements.length){
// 크기를 2배로 늘리는 작업
ensureCapacity();
}
// 크기 확인
elements[size++] = element;
}
// 데이터를 얻는 동작
public Book get(int index){ // -1, 5~ 이면 에러 발생
// index 체크
if(index < 0 || index >= size){
throw new IndexOutOfBoundsException("index의 범위(0~9)가 초과됨"); // JVM이 오류를 잡아서 예외 발생
}
return elements[index];
}
// 원소의 개수를 넘겨주는 동작
public int size(){
return size;
}
//
public void ensureCapacity(){
int newCapacity = elements.length * 2;
elements = Arrays.copyOf(elements, newCapacity); // 복사 : Arrays.copyOf(); 복사한 배열은 elements로 초기화
}
}
ObjectArray 클래스를 만들어 사용하기
- 다형성 인수, 배열 사용
public class MyObjectArrayTest {
public static void main(String[] args) {
// A, B, C 객체를 배열(서로 다른 객체를 저장하는 다형성 배열 사용)에 저장하고 출력하세요
ObjectArray list = new ObjectArray();
list.add(new A()); // Upcasting -> Object element = new A(); 형식으로 메모리에 들어간다.
list.add(new B()); // Upcasting -> Object element = new B(); 형식으로 메모리에 들어간다.
list.add(new C()); // Upcasting -> Object element = new C(); 형식으로 메모리에 들어간다.
A a = (A)list.get(0); // 다운캐스팅을 해야 get사용 가능 A <= Object
a.display();
B b = (B)list.get(1); // 다운캐스팅을 해야 get사용 가능 B <= Object
b.display();
C c = (C)list.get(2); // 다운캐스팅을 해야 get사용 가능 C <= Object
c.display();
for (int i = 0; i < list.size(); i++) {
if(list.get(i) instanceof A){
((A)list.get(i)).display();
}else if(list.get(i) instanceof B){
((B)list.get(i)).display();
}else{
((C)list.get(i)).display();
}
}
}
}
public class ObjectArray {
private static final int DEFAULT_CAPACITY = 5; // static final은 나중에 변경 불가능(수정 불가) -> final을 붙이면 상수가 된다
private Object[] elements; // 다형성 배열
private int size = 0;
// 생성 동작
public ObjectArray(){
elements = new Object[DEFAULT_CAPACITY]; // 5개 크기 배열
}
// 저장하는 동작
public void add(Object element){
if (size == elements.length){
// 크기를 2배로 늘리는 작업
ensureCapacity();
}
// 크기 확인
elements[size++] = element;
}
// 데이터를 얻는 동작
public Object get(int index){ // -1, 5~ 이면 에러 발생
// index 체크
if(index < 0 || index >= size){
throw new IndexOutOfBoundsException("index의 범위(0~9)가 초과됨"); // JVM이 오류를 잡아서 예외 발생
}
return elements[index];
}
// 원소의 개수를 넘겨주는 동작
public int size(){
return size;
}
//
public void ensureCapacity(){
int newCapacity = elements.length * 2;
elements = Arrays.copyOf(elements, newCapacity); // 복사 : Arrays.copyOf(); 복사한 배열은 elements로 초기화
}
}
ArrayList 클래스 사용
- ArrayList
- 자바에서 제공해주는 모든 객체를 배열에 저장하여 관리하는 클래스
- 알아서 늘어나기 때문에 크기의 제약이 없다.
- ArrayList
list = new ArrayList (); - 제네릭 표현을 쓰면(일반화) 안에 배열이 제네릭<타입>으로 배열이 생성된다
- 다운캐스팅을 할 필요가 없어진다.
- Book타입만 넣을수 있다.
- 제네릭 표현을 쓰면(일반화) 안에 배열이 제네릭<타입>으로 배열이 생성된다
public class ArrayListTest {
public static void main(String[] args) {
// Book 3권을 배열에 저장하고 출력하세요
// Book[], Object[]
ArrayList list = new ArrayList(1); // 기본크기 : 10, 내부에 Object 배열을 가지고 있다.
list.add(new Book("자바",15000, "한빛","홍길동"));
list.add(new Book("C++",17000, "대림","이길동"));
list.add(new Book("Python",16000, "정보","나길동"));
System.out.println(list.get(0));
Book vo = (Book)list.get(0); // Book <-- (Book)Object : 내부에 Object배열을 가지고 있기 때문에 다운캐스팅 해야한다.
System.out.println(vo.toString());
vo = (Book)list.get(1); // Book <-- (Book)Object : 내부에 Object배열을 가지고 있기 때문에 다운캐스팅 해야한다.
System.out.println(vo.toString());
vo = (Book)list.get(2); // Book <-- (Book)Object : 내부에 Object배열을 가지고 있기 때문에 다운캐스팅 해야한다.
System.out.println(vo.toString());
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i)); // 자체가 Object -> Book(JVM에서 자동으로 Book의 toString을 호출해주기 때문에 가능 -> 동적 바인딩)
// Book b = (Book)list.get(i); // 바로 값을 빼는 경우는 다운캐스팅을 해줘야한다.
}
}
}
public class MyBookArrayTest {
public static void main(String[] args) {
// 책 3권의 데이터를 배열에 저장하고 출력하세요.
BookArray list = new BookArray(); // 책, 길이 = 5
list.add(new Book("자바",15000, "한빛","홍길동"));
list.add(new Book("C++",17000, "대림","이길동"));
list.add(new Book("Python",16000, "정보","나길동"));
// Book vo = list.get(0);
// System.out.println(vo.toString());
//
// vo = list.get(1);
// System.out.println(vo.toString());
//
// vo = list.get(2);
// System.out.println(vo.toString());
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
// Book{title='자바', price=15000, company='한빛', author='홍길동'}
// Book{title='C++', price=17000, company='대림', author='이길동'}
// Book{title='Python', price=16000, company='정보', author='나길동'}
}
}
- this
- this() : 생성자 안에서 다른 생성자를 호출할 때 사용
'개발 > Java' 카테고리의 다른 글
인터페이스 기반의 프로그래밍 (0) | 2024.01.29 |
---|---|
자바 String 클래스 (1) | 2024.01.29 |
자바 최상위 클래스 Object (0) | 2024.01.29 |
추상클래스와 인터페이스 (0) | 2024.01.29 |
다형성 (0) | 2024.01.29 |