[TIL 4] 자바 API 공부 내용 정리

돗치·2024년 1월 31일

직접 만들어서 사용하는 class

자바로 배열에 저장된 수준에서 최대값, 최소값을 구하는 클래스 만들기 연습

package fc.java.model2;

public class MinMaxFinder {
    private MinMaxFinder(){ }
    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;
    }
}
package fc.java.course2.part1;
import fc.java.model2.MinMaxFinder;

public class MinMaxFinderTest {
    public static void main(String[] args) {
        int[] arr={4,3,1,2,5};
        int min = MinMaxFinder.findMin(arr);
        int max = MinMaxFinder.findMax(arr);
        System.out.println("min = " + min);
        System.out.println("max = " + max);
    }
}

난수: 예측 불가능한 무작위 수

6개 난수를 생성하여 중복되지 않게 저장하기

for루프를 사용해 배열에 중복되지 않는 값만 저장.

while루프로 난수 생성, 이전 인덱스와 비교하여 중복인지 확인 후 중복 아니면 배열에 추가

package fc.java.course2.part1;
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;
            boolean isDuplicate=false;
            for (int j=0;j<i;j++){
                if(arr[j]==num){
                    isDuplicate=true;
                    break;
                }
            }
            if(!isDuplicate){
                arr[i++]=num;

            }
        }
        for (int num: arr){
            System.out.println(num+"");
        }
    }
}

JAVA API를 다운받아 사용하는 법 → https://mvnrepository.com

JSON: 프로그래밍 언어나 플랫폼에 상관없이 데이터를 교환할 수 있도록 설계된 데이터 형식

fromJson() : JSON 형식의 문자열을 자바 객체로 변환해주는 Gson API의 메서드

toJson() : 객체를 JSON형식으로 변환해주는 Gson API 메서드

Gson: 자바 객체를 JSON형식으로 변환하거나 JSON데이터를 자바 객체로 변환하는 라이브러리(API)

Gson검색

2.8.9버전 선택후 jar파일 다운

C:\Users\j\Documents\객체2 에 저장함

jar: 이미 만들어진 여러개의 class를 하나로 압축하여 배포하기 위해 만들어진 파일

Project Structure 클릭

Libraies에서 +누르고 java선택

jar파일 다운로드 했던 경로 찾기

아래에 gson파일이 있는 것을 확인 가능

위 과정 후 아래 코드 추가

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

public class Person {
    private String name;
    private int age;
    public Person(){ }
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    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 "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
package fc.java.course2.part1;

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);
    }
}
package fc.java.course2.part1;
import fc.java.model2.Person;
import com.google.gson.Gson;
public class GsonFromAPI {
    public static void main(String[] args) {
        String json = "(\"name\":\"John\",\"age\":30}";
        Gson gson=new Gson();
        Person p = gson.fromJson(json,Person.class);
        System.out.println(p.getName());
        System.out.println(p.getAge());
        System.out.println(p.toString());
    }
}

IntArray(): 생성 동작

add(): 저장 동작

get(): 가져오는 동작

size(): ****크기 구하는 동작

package fc.java.course2.part1;

public class IntArrayBasic {
    public static void main(String[] args) {
        //정수 5개 배열에 저장, 출력
        int[] nums = new int[5];
        nums[0]=1;
        nums[1]=2;
        nums[2]=3;
        nums[3]=4;
        nums[4]=5;
        //nums.length: 길이를 구하는 동작
        for(int i = 0; i<nums.length;i++){
            int data=nums[i];
            System.out.println(data);
        }
        //향상된 for문(foreach)
        for(int data:nums){
            System.out.println(data);
        }

    }
}
package fc.java.model2;

import java.util.Arrays;

public class IntArray {
    private final int DEFAULT_CAPACITY=5; //수정불가(final)=>상수
    private int[] elements;
    public int size=0;
    //생성동작
    public IntArray(){
        elements=new int[DEFAULT_CAPACITY];

    }
    //저장하는 동작
    public void add(int element){
        if(size==elements.length){
            //크기 2배 늘리는 작업
            ensureCapacity();
        }
        elements[size++]=element;
    }
    //얻는 동작
    public int get(int index){
        return elements[index];
    }
    public int size(){
        return size;
    }
    public void ensureCapacity(){
        int newCapacity=elements.length*2;
        elements=Arrays.copyOf(elements, newCapacity);
    }
}
package fc.java.course2.part1;

import fc.java.model2.IntArray;

public class MyIntArrayTest {
    public static void main(String[] args) {
        //정수 3개를 배열에 저장하고 출력하세요.
        IntArray list = new IntArray();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        list.add(6);

        System.out.println(list.get(0));
        System.out.println(list.get(1));
        System.out.println(list.get(2));

        System.out.println(list.size());

        for(int i=0;i<list.size();i++){
            System.out.println(list.get(i));
        }
    }
}

BookArray(): 생성 동작

add(): ****저장 동작

get(): ****가져오는 동작

size(): 크기 구하는 동작

package fc.java.model2;

public class Book {
    //멤버변수, 상태정보, 속성
    private String title;
    private int price;
    private String company;
    private String author;
    public Book(){  //디폴트 생성자

    }
    //생성자 메서드의 중복정의(오버로딩)
    public Book(String title, int price, String company, String author) {
        this.title = title;
        this.price = price;
        this.company = company;
        this.author = author;
    }
//getter, setter
    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public String getCompany() {
        return company;
    }

    public void setCompany(String company) {
        this.company = company;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }
    //object->toString()재정의
    @Override
    public String toString() {
        return "Book{" +
                "title='" + title + '\'' +
                ", price=" + price +
                ", company='" + company + '\'' +
                ", author='" + author + '\'' +
                '}';
    }
}
package fc.java.model2;

import java.util.Arrays;

public class BookArray {
    private final int DEFAULT_CAPACITY=5; //수정불가(final)=>상수
    private Book[] elements;
    public int size=0;
    //생성동작
    public BookArray(){
        elements=new Book[DEFAULT_CAPACITY];

    }
    //저장하는 동작
    public void add(Book element){
        if(size==elements.length){
            //크기 2배 늘리는 작업
            ensureCapacity();
        }
        elements[size++]=element;
    }
    //얻는 동작
    public Book get(int index){
        if(index<0||index>=size){
            throw new IndexOutOfBoundsException("index의 범위(0~9)가 초과됨");
        }
        return elements[index];
    }
    public int size(){
        return size;
    }
    public void ensureCapacity(){
        int newCapacity=elements.length*2;
        elements=Arrays.copyOf(elements, newCapacity);
    }
}
package fc.java.course2.part1;

import fc.java.model2.Book;
import fc.java.model2.BookArray;
public class MyBookArrayTest {
    public static void main(String[] args) {
        BookArray list = new BookArray();
        list.add(new Book("자바", 15000, "한빛", "홍길동"));
        list.add(new Book("C++", 17000, "대림", "이길동"));
        list.add(new Book("Python", 16000, "정보", "나길동"));

        // vo = list.get(0);
        System.out.println(list.get(0)); //-1하면 index의 범위 (0~9)가 초과된다는거 뜸
        //vo = list.get(1);
        System.out.println(list.get(1));
        //vo = list.get(2);
        System.out.println(list.get(2));
        for (int i=0;i<list.size();i++){
            System.out.println(list.get(i));
        }
    }
}

ObjectArray(): 생성 동작

add(): 저장하는 동작

get(): 가져오는 동작

size(): 크기를 구하는 동작

package fc.java.model2;

import java.util.Arrays;

public class ObjectArray {
    private final int DEFAULT_CAPACITY=5; //수정불가(final)=>상수
    private Object[] elements;  //object는 최상위 클래스. 다형성배열
    public int size=0;
    //생성동작
    public ObjectArray(){
        elements=new Object[DEFAULT_CAPACITY];

    }
    //저장하는 동작
    public void add(Object element){    //다형성인수
        if(size==elements.length){
            //크기 2배 늘리는 작업
            ensureCapacity();
        }
        elements[size++]=element;
    }
    //얻는 동작
    public Object get(int index){
        if(index<0||index>=size){
            throw new IndexOutOfBoundsException("index의 범위(0~9)가 초과됨");
        }
        return elements[index];
    }
    public int size(){
        return size;
    }
    public void ensureCapacity(){
        int newCapacity=elements.length*2;
        elements=Arrays.copyOf(elements, newCapacity);
    }
}
package fc.java.course2.part1;
import fc.java.model2.*;
import fc.java.model2.ObjectArray;

public class MyobjectArrayTest {
    public static void main(String[] args) {
        // A, B, C 객체를 배열에 저장하고 출력
        // book, movie, member 객체를 배열(Object[])에 저장하고 출력
        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);  // A <= Object
        a.display();

        B b = (B) list.get(1);  // B <= Object
        b.display();

        C c = (C) list.get(2);  // 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 if (list.get(i) instanceof C) {
                ((C) list.get(i)).display();
            }
        }
    }
}
package fc.java.model2;

public class A {
    public void display() {
        System.out.println("나는 A다.");
    }
}
package fc.java.model2;

public class B {
    public void display() {
        System.out.println("나는 B다.");
    }
}
package fc.java.model2;

public class C {
    public void display() {
        System.out.println("나는 C다.");
    }
}

https://docs.oracle.com/en/java/javase/17/docs/api/index.html

17버전에 자바의 스펙, api가 어떻게 만들어져 있는지에 관한 설명서

여기서 java.base 클릭

자주 쓰는 패키지, api가 있음 → java.util 클릭

ArrayList클릭

List가 ArrayList의 부모클래스

생성자, 메서드들 확인 가능

<자바에서 제공해주는 배열처럼 동작하는 ArrayList API>

ArrayList: 자바에서 제공해주는 클래스 중 모든 객체를 배열에 저장하여 관리하는 클래스

→ java.util: ArrayList가 저장 된 패키지 이름

add, get: ArrayList에 객체를 저장하는 메서드 이름과 객체를 가져오는 메서드 이름

size(): ArrayList에 저장된 객체의 개수를 구하는 메서드

ArrayList< E >: ArrayList에 특정 객체만 저장할 때 선언하는 방식

ArrayList(): 생성 동작

add(): 저장하는 동작

get(): 가져오는 동작

size(): 크기를 구하는 동작

package fc.java.course2.part1;

import fc.java.model2.Book;

import java.util.*;

public class ArrayListTest {

    public static void main(String[] args) {
        // Book 3권을 배열에 저장하고 출력.
        // Book[], Object[]
        List<Book> list = new ArrayList<Book>();    //ArrayList<Book> list = new ArrayList<>(1); //기본크기(10): Book[]
        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++) {
           // Book b = list.get(i);
            System.out.println(list.get(i));    //Object->Book(JVM에서 자동으로 Book의 toString())
        }
    }
}

subString: 주어진 문자열에서 일부분 문자열 추출해주는 메서드

IndexOf: 특정 문자열의 위치를 찾아서 그 위치의 인덱스를 리턴해주는 메서드

split: 문자열에서 특정 구분자를 기준으로 분리해주는 메서드

package fc.java.course2.part1;

public class HelloWorldString {
    public static void main(String[] args) {
        String str = new String("HelloWorld");
        System.out.println(str.toString());
        String str1="Hello World";
        System.out.println(str1.toString());
    }
}
package fc.java.course2.part1;

public class StringManipulation {
    public static void main(String[] args) {
        int a=10;
        String str="HelloWorld";
        System.out.println(str.charAt(1));  //'e'
        System.out.println(str.replaceAll("o","X"));    //HellXWXrld
        System.out.println(str.length());   //10
        System.out.println(str.toUpperCase());  //HELLOWORLD
        System.out.println(str.toLowerCase());  //helloworld
        System.out.println(str.substring(5));   //World
        System.out.println(str.substring(5,8)); //Wor
        System.out.println(str.indexOf("Wr"));  //5,-1
        for(int i=0; i<str.length();i++){
            System.out.println(str.charAt(i));
        }
    }
}

equals()메서드: 문자열이 같으면 true반환, 다르면 false반환

compareTo()메서드: 문자열 사전순으로 비교, 두 문자열 같으면 0반환, 비교 대상 문자열이 기준 문자열보다 작으면 음수, 크면 양수 반환

package fc.java.course2.part1;

public class StringCompare {
    public static void main(String[] args) {
        String str1="Hello";
        String str2="World";
        if(str1.equals(str2)){
            System.out.println("str1==str2");
        }
        else{
            System.out.println("str1!=str2");
        }
        String str3="apple";
        String str4="banana";

        int result=str3.compareTo(str4);    //0,음수,양수
        if(result==0){
            System.out.println("str3==str4");
        }
        else if(result<0){
            System.out.println("str3<str4");
        }
        else {
            System.out.println("str3>str4");
        }
    }
}
package fc.java.course2.part1;

import java.util.Scanner;

public class StringSplit {
    public static void main(String[] args) {
        //String str = "Hello World,Java";
        // String str = "Hello World  Java";
        //String[] strArray = str.split(",");
        // String[] strArray = str.split("\\s+");
        Scanner scanner = new Scanner(System.in);
        System.out.println("문자열을 입력하세요.");
        String str=scanner.nextLine();
        String[] strArray = str.split("\\s+");
        for(String s:strArray){
            System.out.println(s.toString());
        }

    }
}

인터페이스 기반 프로그래밍

A클래스는 C클래스를 통해서 B클래스를 동작 시킬 수 있다.

→ B클래스의 동작방식을 몰라도 사용 가능

CC - 인터페이스 역할(옵저버) - 부모

BB - 내부 동작방식 모름

→ CC는 노출시키고 BB 내부코드는 숨기는 C클래스를 만듦

package fc.java.model2;

public interface CC {
    public void x();
    public void y();
    public void z();
}
package fc.java.model2;
//BB는 노출을 시키지 않는다.(BB.class)(BB.java : X)
public class BB implements CC {

    @Override
    public void x() {
        System.out.println("x동작이 실행된다.");
    }

    @Override
    public void y() {
        System.out.println("y동작이 실행된다.");
    }

    @Override
    public void z() {
        System.out.println("z동작이 실행된다.");
    }
}
package fc.java.course2.part1;
import fc.java.model2.*;
public class InterfaceAPI {
    public static void main(String[] args) {
        CC c=new BB();
        c.x();
        c.y();
        c.z();
    }
}

자바에서 데이터베이스 연결하기

여러 데이터베이스들을 사용하기 위해서 API가 있어야 함.
→ 인터페이스를 통해 API들이 연결됐다고 가정하면 사용자들은 API를 직접 쓰는게 아니라 인터페이스를 통해서 API 사용

DB Vender = 데이터베이스 회사

Driver(드라이버)

  • Vender들이 만들어서 제공해주는 API들
  • 벤더들이 자기의 데이터베이스 접속에 필요한 동작을 만들어서 배포하는 클래스들(API)

드라이버를 통해 DB연결. 드라이버들을 마음대로 만드는게 아니라 인터페이스를 구현해서 만들어야함. 사용자들은 드라이버를 몰라도 인터페이스를 가지고 드라이버 클래스를 연결, 사용 가능

DB에 연결하기 위해 필요한 정보

  • URL: DB접속 URL(벤더들이 제공)
  • Username: 사용자
  • Password: 비밀번호

[URL: DB접속 URL(벤더들이 제공)]

jdbc:oracle:thin:@localhost:1521:DBNAME

jdbc:mysql://localhost:3306/DBNAME

jdbc:sqlserver://localhost:1433;DatebaseName=DBNAME

package fc.java.model2;
//interface는 자바에서 제공 함
public interface Connection {
    //데이터베이스 연결 동작
    public void getConnection(String url, String username, String password);
}
package fc.java.model2;

public class OracleDriver implements Connection{

    @Override
    public void getConnection(String url, String username, String password) {
        System.out.println("url, username, password 정보를 이용하여 oracle DB를 접속 시도한다.");
    }
}
package fc.java.model2;

public class MySQLDriver implements Connection{
    @Override
    public void getConnection(String url, String username, String password) {
        System.out.println("url, username, password 정보를 이용하여 mysql DB를 접속 시도한다.");
    }
}
package fc.java.model2;

public class MSSQLDriver implements Connection{
    @Override
    public void getConnection(String url, String username, String password) {
        System.out.println("url, username, password 정보를 이용하여 mssql DB를 접속 시도한다.");
    }
}

JDBC Programming(Java DataBase Connectivity): 자바 데이터베이스 프로그래밍, 자바에서 데이터베이스와의 연결을 위한 API

  • Java에서는 인터페이스(공통의 접근 방법)을 제공해줌
  • 벤더들은 인터페이스를 구현하여 Driver클래스를 만들고 배포
  • 벤더마다 배포된 드라이버 이름(jar)이 다름
  • 벤더들이 제공하는 데이터베이스 접속 URL과 URL형식을 알아야 함

java.sql: 자바에서 데이터베이스 프로그래밍을 하기 위해 제공된 API들이 들어있는 패키지 이름

package fc.java.course2.part1;
import fc.java.model2.Connection;
import fc.java.model2.OracleDriver;
public class DataBaseConnction {
    public static void main(String[] args) {
        //oracle DB접속
        Connection conn = new OracleDriver();
        conn.getConnection("jdbc:oracle:thin:@localhost:1521:XE","system", "manage");

        //mysql DB접속
        conn = new OracleDriver();
        conn.getConnection("jdbc:mysql://localhost:3306/test","root", "1234");

        //mssql DB접속
        conn = new OracleDriver();
        conn.getConnection("jdbc:sqlserver://localhost:1433;DatebaseName=mem","sa", "12345");
    }

}

0개의 댓글