Programming Language/Java

Java API

Ma_Sand 2022. 3. 10. 22:25
반응형

1. API(Application Programming Interface)

  : 응용 프로그램에서 사용할 수 있도록 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스

 

  * Java 8 버전 API

   - API는 Oracle에서 제공하고 있다. 필요한 것들은 여기서 찾으면 된다.

    ☞ https://docs.oracle.com/javase/8/docs/api/

 

 

 

2. Math 클래스

 (1) 특징

   ① 수학과 관련된 기능들이다.

     → 형식: Math.사용할기능

   ② 모든 필드와 메소드가 전부 static으로 되어 있다.

     → static 생략이 가능하고 생성자는 private이며, 객체 생성이 필요 없다.

   ③ java.lang 패키지 안에 존재한다.

 

 

 (2) π(파이) : Math.PI

System.out.print(Math.PI);
// 출력값: 3.141592653589793

 

 

 (3) 반올림 : Math.round(double타입) → 반환형은 long 타입

double num = 5.46
System.out.print(Math.round(num);
// 출력값: 5

 

 

 (4) 올림 : Math.ceil(double타입) → 반환형은 double 타입

double num = 1.23;
System.out.print(Math.ceil(num));
// 출력값: 2.0

 

 

 (5) 버림 : Math.floor(double타입) → 반환형은 double 타입

double num = 3.14;
System.out.print(Math.floor(num));
// 출력값: 3.0

 

 

 (6) 절대값 : Math.abs(int/long/float/double타입)

                 → 반환형은 int/long/float/double타입

int num = -11;
System.out.print(Math.abs(num));
// 출력값: 11

 

 

 (7) 최소값 : Math.min(int, int/long, long/float, float/double, double타입)

                 → 반환형은 int/long/float/double타입

System.out.print(5.19, 10.01);
// 출력값: 5.19

 

 

 (8) 최대값 : Math.max(int, int/long, long/float, float/double, double타입)

                 → 반환형은 int/long/float/double타입

System.out.print(5.19, 10.01);
// 출력값: 10.01

 

 

 (9) √(제곱근=루트) : Math.sqrt(double타입) → 반환형은 double 타입

System.out.print(Math.sqrt(16));
// 출력값: 4.0

 

 

 (10) 제곱 : Math.pow(double, double) → 반환형은 double 타입

System.out.print(Math.pow(3, 4));
// 출력값: 81.0

 

 

 (11) 랜덤값 : Math.Random()

System.out.print(Math.Random());
// 출력값은 실행할 때마다 달라진다.

 

 

 

3. String 관련 클래스

 (1) String 클래스

    : 불변 클래스(immutable class)이다. String 클래스는 수정할 때 기존의 값이 담긴 공간에서 수정되는 것이 아니라

      새로운 공간에 수정된 값이 들어간다.

 

   ① 사용법

     ⓐ 대입 연산자 넣기

     ⓑ 생성자 new String("") 호출

 

   ② 메소드

String str1 = new String("HELLO WORLD!");
String str1 = new String("HELLO WORLD!");

     ⓐ toString() - 생략 가능

       : String 클래스에서는 저장된 문자열을 반환하도록 재정의되어 있다.

System.out.println(str1.toString());
System.out.println(str2.toString());
// 출력값: HELLO WORLD!
//         HELLO WORLD!

 

     ⓑ equals()

       : 문자열을 비교한다.(주소값 비교X) / Object 클래스의 equals를 상속받아 오버라이딩을 한다.

         비교한 두 문자열이 서로 같으면 true 출력, 다르면 false 출력된다.

System.out.println(str.equals(str2));
// 출력값: true

   * Object의 equals가 주소값을 비교한다.

 

     ⓒ hashCode()

       : String 클래스에서 주소값이 아니라 문자열을 기반으로 해시코드값을 만들어 반환한다.

       - 실제 주소값의 해시코드를 반환하려면 System.identityHashCode()를 사용한다.

// 문자열 기반의 해시코드(주소값X)
System.out.println(str1.hashCode());
System.out.println(str2.hashCode());
// 출력값: 435340829
//         435340829

// 실제 주소값의 해시코드
System.out.println(System.identityHashCode(str1));
System.out.println(System.identityHashCode(str2));
System.out.println(str1 == str2);
// 출력값: 1829164700
//         2018699554
//         false
// 실제 주소값은 다르므로 false가 출력된다.

 

   ③ 문자열을 리터럴(literal)로 생성

      : 상수 풀(String pool)에 리터럴 값만 넣으면 서로 같은 주소값이 나온다.

        상수 풀에는 같은 문자열이 있을 수 없다.

String str1 = "ASAP";
String str2 = "ASAP";

     ⓐ toString()

System.out.println(str1.toString());
System.out.println(str2.toString());
// 출력값: ASAP
//         ASAP

 

     ⓑ equals()

System.out.println(str1.equals(str2));
// 출력값: true

 

     ⓒ hashCode(), System.identityHashCode()

       - new String()을 호출 시엔 새로운 공간에 추가되므로 실제 주소값이 다르게 나오는 반면, 리터럴로 생성한

         경우에는 새로 생성하는 것이 아니므로 실제 주소값이 같게 나온다.

System.out.println(str1.hashCode());
System.out.println(str2.hashCode());
// 출력값: 2018273
//         2018273

System.out.println(System.identityHashCode(str1));
System.out.println(System.identityHashCode(str2));
// 출력값: 1829164700
//         1829164700

       - 기존 문자열에 새로운 값을 넣으면 이 변경된 값이 새로운 영역에 들어가게 된다.(해당 위치에서 변경X)

str = str + "hurry";
System.out.println(System.identityHashCode(str);
// 출력값: 2018699554

     → 기존 실제 주소값은 1829164700인데, 변경된 주소값은 2018699554이다.

 

 

 

 (2) StringBuffer / StringBuilder

    : 문자열은 불변클래스여서 합성 시에 새 메모리 영역을 할당받아 작업하므로 합성이 느리다.

      이럴 때 좀더 빨리 합성하고 싶다면 사용하는 것이 가변형 클래스인 StringBuffer와 StringBuilder이다.

   ① StringBuffer

     : 순서가 정해져 있어서 StringBuilder보다 상대적으로 느리지만 안전하다.

   ② StringBuilder

     : 순서가 정해져 있지 않아 StringBuffer보다 빠르지만 안전하지 않다.

// 각각의 작업 시간 알아보기

// StringBuffer와 StringBuilder 둘 중 하나씩만 사용하면 된다.

StringBuffer sb = new StringBuffer();
StringBuilder sb = new StringBuilder();

// currentTimeMills()는 현재 시간 알아보는 메소드
long start = System.currentTimeMills();  // 시작 시간
for(int i = 0; i < 1000; i++) {  // sb를 1000번 반복했을 때의 작업 시간
    sb.append("HELLO WORLD");  // append()는 기존 문자열 뒤쪽에 새 문자열을 추가한다.
    System.out.println(System.identityHashCode(sb));  // sb의 실제 주소값으로 출력
}
long finish = System.currentTimeMills();  // 종료 시간
System.out.println("작업 시간: " + (finish - start));
// StringBuffer의 작업 시간: 290
// String Builder의 작업 시간: 281

// 반복 횟수가 더 늘어날 수록 서로의 작업 시간 차이는 커진다.

 

 

 (3) StringTokenizer

    : 문자열을 문자열 배열로 분리시킨다.

 

String array = "Apple, Banana, Cranberry, Orange, Pineapple, Watermelon";

 

   ① 문자열.split(String 구분자) → 반환형은 String[]

      : 구분자를 제시하여 해당 문자열을 분리시킨다.

String[] arr = array.split(", ");

for(int i = 0; i < arr.length; i++) {
    System.out.println(arr[i]);
}
// 출력값: Apple
//         Banana
//         Cranberry
//         Orange
//         Pineapple
//         Watermelon

 

 

   ② 각각 분리된 문자열들을 토큰(token)으로 취급한다.

      : StringTokenizer stn = new StringTokenizer(분리하려는 문자열, 구분자);

String stn = new StringTokenizer(array, ", ");
System.out.println(stn.countTokens());  // 분리된 문자열의 개수: 6개

System.out.println(stn.nextToken());  // Apple
System.out.println(stn.nextToken());  // Banana
System.out.println(stn.nextToken());  // Cranberry
System.out.println(stn.nextToken());  // Orange
System.out.println(stn.nextToken());  // Pineapple
System.out.println(stn.nextToken());  // Watermelon

// System.out.println(stn.nextToken());
//  -> 토큰이 더 없을 때 nextToken() 호출 시 NoSuchElementException이 발생한다.

System.out.println(stn.countTokens());  // nextToken() 호출 시 해당 토큰을 꺼낸 후 종료한다.
// 위의 경우 토큰을 다 꺼내서 남은 토큰의 개수는 0개이다.

while(stn.hasMoreTokens()) {  // 토큰이 남아있으면 true를, 남아있지 않으면 false를 반환한다.
    System.out.println(stn.nextToken());
}
// 출력값: 6
//         Apple
//         Banana
//         Cranberry
//         Orange
//         Pineapple
//         Watermelon
//         0
//         false

 

 

 

4. 문자열 관련 메소드

 (1) 형태

    : 메소드명(매개변수) - 반환형

 

String str = "HELLO WORLD!";

 

 (2) 문자열.charAt(인덱스) → 반환형은 char

    : 문자열에서 전달받은 인덱스 위치에 있는 문자 하나만 반환한다.

char ch = str.charAt(2);
System.out.println(ch);
// 출력값: L

 

 

 (3) 문자열.concat(문자열2) → 반환형은 String

    : 기존 문자열에서 전달받은 새 문자열을 합쳐서 반환한다.

String nStr = str.concat("!!");
System.out.println(nStr);
// 출력값: HELLO WORLD!!!

 

 

 (4) 문자열.length() → 반환형은 int

    : 문자열의 길이를 반환한다.

System.out.println(str.length());
// 출력값: 12

 

 

 (5) 문자열.substring(시작 인덱스 / 시작 인덱스, 끝 인덱스) → 반환형은 String

    : 문자열의 시작 인덱스 위치부터 문자열 끝까지의 문자열을 반환하거나, 문자열의 시작 인덱스 위치부터

      반환하고자 하는 마지막 인덱스 위치까지의 문자열을 반환한다.

System.out.println(str.substring(3));
System.out.println(str.substring(2, 9));
// 출력값: L
//         LLO WORL

 

 

 (6) 문자열.replace(char old, char new) → 반환형은 String

    : 문자열에서 기존 문자(old)를 새 문자(new)로 바꾸어서 문자열을 반환한다.

String nStr = str.replace('L', 'P');
System.out.println(nStr);
// 출력값: HEPPO WORPD!

 

 

 (7) 문자열.trim() → 반환형은 String

    : 문자열의 앞과 뒤의 공백을 제거해준다.(문자열 사이의 중간 공백은 제거X)

String address = "     www.tis     tory.com     ";
System.out.println(address.trim());
// 출력값: www.tis     tory.com

// 문자열 사이에 있는 중간 공백을 제거하려면 문자를 새로 바꿔주는 replace()를 사용한다.
System.out.println(address.replace(" ", "");
// 출력값: www.tistory.com

 

 

 (8) 문자열.toUpperCase() / 문자열.toLowerCase() → 반환형은 String

    : 문자열을 대문자로 변환(.toUpperCase())해주거나 소문자로 변환(.toLowerCase())해준다.

String str2 = "Hello World!";

System.out.println(str2.toUpperCase());
System.out.println(str2.toLowerCase());
// 출력값: HELLO WORLD!
//         hello world!

 

 

 (9) 문자열.toCharArray() → 반환형은 char[]

    : 문자열의 각 문자들을 char 타입 배열에 저장한 후 해당 배열을 반환한다.

char[] cArr = str.toCharArrat();

for(int i = 0; i < cArr.length; i++) {
    System.out.println(cArr[i] + " ");
}
// 출력값: H E L L O  W O R L D !

 

 

 (10) String.valueOf(char[] c) → 반환형은 String

    : 문자 배열을 문자열로 반환한다.

char[] cArr = str.toCharArray();

System.out.println(String.valueOf(cArr));
// 출력값: HELLO WORLD!

 

 

 

5. Wrapper 클래스

   : 기본 자료형을 객체화해준다.

기본 자료형 Wrapper 클래스
boolean Boolean
char Character
byte Byte
short Short
int Integer
long Long
float Float
double Double

 

public static void main(String[] args) {
    int num1 = 10;
    int num2 = 20;

    Integer i1 = 10;
    Integer i2 = 20;
    
    // 기본 자료형일 때는 동등비교연산자(==)를 사용하며,
    System.out.println(num1 == num2);
    
    // Wrapper클래스는 동등비교할 때 .equals()를 사용한다.
    // 같으면 true, 다르면 false 반환
    System.out.println(num1.equals(num2));
    
    
    // prior.compareTo(later) 
    // -> prior이 later보다 작으면 -1, 같으면 0, 크면 1을 반환
    System.out.println(i1.compareTo(i2));
// 출력값: false
//         -1
    
    
    
    // String(문자열)
    String str1 = "10";  // int
    String str2 = "15.5";  // double
    
    System.out.println(str1 + str2); // 문자열의 합
// 출력값: 1015.5
    
    
    // String형 -> 기본 자료형 ('파싱한다' 라고 표현한다.)
    // 기본자료형 변수명 = Wrapper클래스명.parse기본자료형(변환할 문자열);
    int iNum = Integer.parseInt(str1);  // "10" -> 10
    double dNum = Double.parseDouble(str2);  // "15.5" -> 15.5
    
    System.out.println(iNum + dNum);  // 정수형의 합
// 출력값: 25.5
    
    
    // 기본 자료형 -> String형
    // String 변수명 = String.valueOf(변환할 기본자료형값)
    String iStr = String.valueOf(iNum);  // 10 -> "10"
    String dStr = String.valueOf(dNum);  // 15.5 -> "15.5"
    
    System.out.println(iStr + dStr);
// 출력값: 1015.5
}

 

 

 

6. 날짜 관련 클래스

 (1) Date 클래스

    : java.util 패키지에 존재하며, 날짜와 시간에 대한 정보를 담는다.

   * Java 개발 초창기에 급히 만들어져서 완성도가 낮고, jdk의 버전이 올라가면서 여러 메소드들이 deprecate되었다.

 

 (2) SimpleDateFormat 클래스

    : java.text 패키지에 존재한다.

 

import java.util.Date;
import java.text.SimpleDateFormat;

public static void main(String[] args) {
    Date now = new Date();
    System.out.println("현재 시간: " + now);
// 출력값: Sun Mar 10 19:31:55 KST 2022


    // 원하는 날짜 출력
    
    // 1. 매개변수 생성자를 사용하여 변경
    Date choiceDate = new Date(2022 - 1900, 12 - 1, 22, 12, 30, 00);
    System.out.println(choiceDate);
// 출력값: Thu Dec 22 12:30:00 KST 2022

    // 2. 형식을 지정하여 SimpleDateFormat 객체를 생성
    SimpleDateFormat time = new SimpleDateFormat("yyyy년 MM월 dd일 hh시 mm분 ss초");
    String birth = time.format(choiceDate);
    System.out.println(birth);
// 출력값: 2022년 12월 22일 12시 30분 00초
}
반응형