course 2021/JAVA

day18 - API(1) java.lang, java.util

코딩하는토끼 2021. 9. 15. 23:27

> API

JAVA API(Application Programming Interface)

API는 라이브러리라고 부르며 프로그램 개발에 자주 사용되는 클래스/인터페이스의 모음을 말함

자바 표준 API 문서 주소 : https://docs.oracle.com/javase/8/docs/api

 

Java Platform SE 8

 

docs.oracle.com

 

> java.lang 패키지

자바 프로그램의 기본적인 클래스들을 담고있는 패키지

java.lang 패키지에 있는 클래스/인터페이스는 import 없이 사용 가능

주요 클래스

1. Object

자바의 최상위 클래스

따로 특정 클래스를 상속하지 않으면 모든 클래스는 자동으로 Object 클래스를 상속하게 됨

따라서 Object의 메소드는 모든 클래스에서 사용 가능

2. System

데이터를 표준 입력장치(키보드)로부터 입력받거나 표준 출력장치(모니터)로 출력하기 위해 사용

프로그램 종료, 키보드로 입력, 모니터로 출력, 메모리 정리, 현재 시간 읽기 등 가능

System 클래스의 모든 멤버는 static → 클래스이름으로 바로 접근 가능

-System 클래스의 주요 메소드-

1) exit(): 현재 실행하고 있는 프로세스를 강제 종료시킴. 매개값은 정상 종료일 경우 0, 비정상 종료일 경우 0이외 다른값을 줌.

2) currentTimeMillis(): 컴퓨터 시계에서 현재 시간을 읽어서 밀리세컨드/나노세컨드단위의 long값을 리턴. 주로 프로그램의 실행 소요 시간 측정으로 성능을 테스트할 때 사용.

3) getProperty(): JVM이 시작할 때 자동 설정되는 시스템의 속성값을 구함

4) gc(): Garbage Collector 를 실행시킴

3. Class

클래스를 메모리에 로딩할 때 사용

4. String

문자열을 저장하고 문자열의 여러가지 정보를 얻을 때 사용

생성자를 사용해서 객체를 만들 필요 없이 기초 데이터를 사용할 때처럼 바로 초기화해서 사용 가능

-String 클래스의 주요 메소드-

1) charAt(): 특정 인덱스의 글자를 반환

2) indexOf(): 특정 문자열의 시작 인덱스 값을 반환 (만약 주어진 문자열이 포함되어 있지 않으면 -1 리턴)

3) length(): 문자열의 길이를 알려줌

4) replace(): 특정 문자열을 변경

5) substring(): 인덱스를 기준으로 그 앞의 문자열을 잘라줌 / 만약 매개값으로 인덱스를 2개 주면 처음 매개값 이상 두번째 매개값 미만의 문자열을 제외한 나머지 삭제

6) toUpperCase(): 문자열을 대문자로 치환

7) toLowerCase(): 문자열을 소문자로 치환

8) trim(): 문자열 앞/뒤 공백을 제거

9) equals(): 문자열 값을 비교

10) valueOf(): 기본 데이터타입의 값들을 문자열로 변환

11) split(): 특정 문자열 기준으로 잘라서 배열에 반환

5. StringBuffer, StringBuilder

문자열을 저장하고 내부 문자열을 조작할 때 사용

String 클래스는 객체가 처음 초기화된 데이터에서 변화가 생기면 객체를 재활용하지 않고 새로운 객체를 생성하며 메모리를 과소비하는 단점이 있는데, StringBuilder는 이러한 String 클래스의 단점을 보완한 속도가 개선된 클래스

-StringBuilder 클래스의 주요 메소드-

1) append(): 기존 문자열 뒤에 문자열 추가 

2) insert(): 특정 위치에 문자열 추가

3) delete(): 문자열 삭제

4) deleteCharAt(): 특정 인덱스의 문자 하나를 삭제

5) replace(): 문자열 일부분을 다른 문자열로 대체

6) setCharAt(): 주어진 인덱스의 문자를 다른 문자로 대체

7) toString(): StringBuilder 객체의 값을 문자열로 반환

8) reverse(): 문자열을 거꾸로 뒤집음

//String 
long start, end;
start = System.currentTimeMillis();

String str = "A";
for(int i = 0; i < 300000; i++) {
    str = str + "A";
}

end = System.currentTimeMillis();
System.out.println("String: " + (end-start)*0.001 + "초");


//StringBuilder
start = System.currentTimeMillis();

StringBuilder sb = new StringBuilder("A");  //객체생성
for(int i = 0; i < 300000; i++) {  
    sb.append("A");  //append사용
}

end = System.currentTimeMillis();
System.out.println("StringBuilder: " + (end-start)*0.001 + "초");


//String: 34.961초
//StringBuilder: 0.005초

6. Math

수학 함수를 이용할 때 사용

수학계산에 사용할 수 있는 메소드를 제공

Math 클래스의 메소드는 모두 static → 클래스이름으로 바로 접근 가능

-Math 클래스의 주요 메소드-

1) abs(): 절댓값을 구함

2) ceil(): 올림값을 구함

3) floor(): 내림값을 구함

4) max(): 수를 비교하여 최댓값을 구함

5) min(): 수를 비교하여 최솟값을 구함

6) random(): 랜덤값을 구함 (0.0이상 1.0미만)

7) rint(): 현재 수에서 가까운 정수를 실수 형태로 구함

8) round(): 반올림값을 구함

7. Wrapper(Byte, Short, Integer, Long, Float, Double, Boolean, Character)

기본 데이터 타입의 객체를 만들 때 사용

이러한 객체는 기본 타입의 값을 객체 내부에 두고 포장하기 때문에 포장(Wrapper) 객체라고 함

포장하고 있는 기본 타입의 값을 외부에서 변경할 수 없으며, 변경하려면 새로운 포장 객체를 생성해야 함

다양한 Wrapper 클래스: Byte, Short, Integer, Long, Float, Double, Boolean, Character 

*Wrapper 의 두가지 의미

박싱 boxing: 기본 타입 값 → 포장 객체 / 언박싱 unboxing: 포장 객체 → 기본 타입 값

문자열 → 기본 타입 값으로 변환할 때에도 사용됨 - "parse + 기본타입" 으로 정의된 static 메소드 제공 

 

> java.util 패키지

자바 프로그램 개발에 보조 역할을 하는 클래스들을 (주로 컬렉션 관련 클래스) 담고있음

주요 클래스

1. Arrays: 배열을 조작할 때 사용

배열 조작(배열 복사, 항목 정렬, 항목 검색 등) 기능을 가지고 있음 

Arrays 클래스의 모든 메소드는 static → 클래스 이름으로 바로 접근 가능

-Arrays 클래스의 주요 메소드-

1) binarySearch(배열, 찾는 값): 전체 배열 항목에서 찾는 값이 있는 인덱스 반환

2) copyOf(원본 배열, 복사할 길이): 원본 배열의 인덱스 0~복사할 길이만큼 복사한 배열 반환

3) copyOfRange(원본 배열, 시작 인덱스, 끝 인덱스): 원본 배열의 시작 인덱스~끝 인덱스 복사한 배열 반환 (시작 인덱스 포함, 끝 인덱스 미포함)

4) sort(배열): 배열의 전체 항목 오름차순으로 정렬

5) toString(배열): 배열의 값들을 "[값1, 값2, ...]"와 같은 문자열 형식으로 반환

double[] arr = {1.1, 2.2, 3.3, 4.4, 5.5};

double[] arCpy1 = Arrays.copyOf(arr, arr.length);  //copyOf
double[] arCpy2 = Arrays.copyOf(arr, 3);

System.out.println(Arrays.toString(arCpy1));
System.out.println(Arrays.toString(arCpy2));

//[1.1, 2.2, 3.3, 4.4, 5.5]
//[1.1, 2.2, 3.3]
int[] arr = {3, 1, 2, 5, 4};

int[] arr2 = Arrays.copyOf(arr, arr.length);  //copyOf 배열 복사
Arrays.sort(arr2);  //sort 오름차순 정렬

int index = Arrays.binarySearch(arr2, 5);  //binarySearch 값이 있는 인덱스 리턴
System.out.println("5가 있는 인덱스번호: " + index);

System.out.println(Arrays.toString(arr2));  //toString 배열을 문자열로 리턴

if(Arrays.equals(arr, arr2)) {  //equals 배열 비교
    System.out.println("배열의 각 항목이 모두 일치함");
}else {
    System.out.println("배열의 각 항목이 일치하지 않음");
}

2. Date: 날짜와 시간 정보를 저장하는 클래스

주로 객체 간 날짜 정보를 주고받을 때 사용

Date 객체를 기본생성자로 생성하면 컴퓨터의 현재 날짜를 읽어 객체로 만듦

Date 클래스의 toString() 메소드는 영문날짜를 문자열로 리턴 (만약 특정 문자열 형식으로 얻고싶다면 ↓)

*SimpleDateFormat 클래스

java.text 패키지의 클래스(API)

날짜를 원하는 형식으로 표현하기 위한 클래스

패턴을 사용하여 생성자의 매개값으로 표현형식 지정하여 객체 생성 → format() 매소드 호출하여 패턴이 적용된 문자열 얻음

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

public class DateEx {
    public static void main(String[] args) {
        
        Date date = new Date();  //Date 객체생성
        System.out.println(date.toString());  //Wed Sep 22 00:14:48 KST 2021
        
        //SimpleDateFormat을 사용하여 날짜를 원하는 형태로 얻음
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy년 MM월 dd일 HH시 mm분 ss초");  //객체생성
        String time = sdf.format(date);  //format 메소드에 매개변수 값으로 date 전달
        System.out.println(time);  //2021년 09월 22일 00시 14분 48초
        
        sdf = new SimpleDateFormat("yy-MM-dd a hh:mm:ss");  //객체생성
        System.out.println(sdf.format(date));  //21-09-22 오전 12:14:28
        
        sdf = new SimpleDateFormat("오늘은 E요일입니다. 오늘은 1년 중 D번째 날입니다.");
        System.out.println(sdf.format(date));  //오늘은 수요일입니다. 오늘은 1년 중 265번째 날입니다.
    }
}

3. Calendar: 운영체제의 날짜와 시간을 얻을 때 사용

4. Random: 무작위 숫자를 얻을 때 사용

무작위 숫자를 얻어내기 위한 다양한 메소드 제공

Math 클래스의 random() 메소드보다 더 다양한 무작위 값을 얻을 수 있음

-Random 클래스의 주요 메소드-

 1) nextBoolean(): boolean 타입 무작위 값을 리턴 (true/false)

2) nextDouble(): double 타입 무작위 값을 리턴 (0.0 이상 1.0 미만)

3) nextInt(): int 타입 무작위 값을 리턴 (int 범위)

4) nextInt(int n): int 타입 무작위 값을 리턴 (0 이상 n 미만)

Random r = new Random();  //객체생성

int i = r.nextInt(10);  //정수 0이상 10미만 랜덤값
System.out.println(i);

int i = r.nextInt(10) + 1;  //정수 1이상 11미만(10이하) 랜덤값
System.out.println(i);