[Java 23] 자바 - 기본 API 클래스
학습목표
- 자주 사용되는 API의 사용법을 이해한다.
자바 API 도큐먼트
API는 라이브러리라고 부르기도 하는데, 프로그램 개발에 자주 사용되는 클래스 및 인터페이스의 모음을 말합니다. API 도큐먼트는 쉽게 API를 찾아 이용할 수 있도록 문서화 한것으로 다음 URL에 접속해 볼 수 있습니다.
자바 API 도큐먼트 사이드 : https://docs.oracle.com/javase/8/docs/api/
해당 사이트에 접속하면 다음과 같은 화면이 보일 것입니다. 3개의 프레임으로 구성되고 각각 ‘패키지 전체 목록’ ‘패키지에 속하는 클래스와 인터페이스 목록’ ‘선택한 클래스와 인터페이스에 대한 상세 설명’으로 구분되어 있습니다.
패키지 전체목록 > 패키지 선택 > 패키지에 속하는 클래스 혹은 인터페이스 선택 > Field, Constr, Method 의 상세설명 이동
도큐먼트 보는법을 간단히 알아봤고 이제부터 API에 대해 알아보겠습니다. 모든 API를 다루기는 힘드니 자주 사용하는 API 위주로 간단하게 정리해보겠습니다.
String API
String 메소드
리턴타입 | 메소드명(매개 변수) | 설명 |
---|---|---|
char | charAt(int index) | 특정 위치의 문자 리턴 |
boolean | equals(Object anObject) | 두 문자열 비교 |
byte[] | getBytes() | byte[]로 리턴 |
byte[] | getBytes(Charset charset) | 주어진 문자셋으로 인코딩한 byte[]로 리턴 |
int | indexOf(String str) | 문자열 내에서 주어진 문자열의 위치를 리턴 |
int | length() | 총 문자수를 리턴 |
String | substring(int beginIndex) | beginIndex 위치에서 끝까지 잘라낸 새로운 문자열 리턴 |
String | substring(int beginIndex, int endIndex) | beginIndex 위치에서 endIndex 전까지 잘라낸 새로운 문자열 리턴 |
String | toLowerCase() | 알파벳 소문자로 변환한 새로운 문자열 리턴 |
String | toUpperCase() | 알파벳 대문자로 변환한 새로운 문자열 리턴 |
String | trim() | 앞뒤 공백을 제거한 새로운 문자열 리턴 |
String | valueOf(int i) | 기본 타입값(int)을 문자열로 리턴 |
String | valueOf(double d) | 기본 타입값(double)을 문자열로 리턴 |
StringBuffer, StringBuilder 클래스
자바에서 String을 객체로 취급하기 때문에 한번 생성되면 변하지 않습니다. 만약 아래의 코드처럼 “ABC”라는 String data를 만들면 “ABC”라는 객체가 생성되고 data += "DEF"
를 하더라도 기존 객체에 추가되는 것이 아니라 “ABCDEF”라는 새로운 객체가 만들어 지는 것입니다.
String data = "ABC";
data += "DEF";
이처럼 문자열 결합하는 + 연산자를 많이 할수록 String 객체의 수가 늘어나기 때문에 프로그램 성능이 느려질 수 있습니다. 문자열 변경이 많은 작업으 할 때, StringBuffer, StringBuilder 클래스를 사용하는 것이 좋습니다. 이 두 클래스는 내부 버퍼(buffer : 데이터를 임시로 저장하는 메모리)에 문자열을 저장해 두고, 그 안에서 추가, 수정, 삭제 작업을 할 수 있도록 설계되어 있습니다. String처럼 새로운 객체를 만들지 않고 문자열 조작이 가능한 것입니다.
StringBuilder sb = new StringBuilder();
StringBuilder sb = new StringBuilder(16);
StringBuilder sb = new StringBuilder("java");
예제
StringBuilder와 함께 사용되는 메소드는 아래 코드 실습을 통해 알아보겠습니다.
[StringBuilderExample] 문자열 조작
public class StringBuilderExample {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder(); //StringBuilder 객체 생성
// 문자열을 끝에 추가
sb.append("java ");
sb.append("Program Study");
System.out.println(sb.toString());
// index4 위치 뒤에 2를 삽입
sb.insert(4, "2");
System.out.println(sb.toString());
// index4 위치의 문자를 6으로 변경
sb.setCharAt(4, '6');
System.out.println(sb.toString());
// index6부터 index13 '전'까지를 "Book" 문자열로 대체
sb.replace(6, 13, "Book");
System.out.println(sb.toString());
// index4부터 index5 '전'까지 삭제
sb.delete(4, 5);
System.out.println(sb.toString());
// 총 문자 수 얻기
int length = sb.length();
System.out.println("총문자수 : " + length);
//버퍼에 있는 것을 String 타입으로 리턴
String result = sb.toString();
System.out.println(result);
}
}
Arrays 클래스
배열 항목 검색
예제
[Member] Comparable 구현 클래스
기본 타입 또는 String 배열은 Arrays.sort() 메소드의 매개값으로 지정해주면 자동으로 오름차순으로 정렬이 됩니다. 그러나 사용자 정의 클래스 타입일 경우에는 클래스 Comparable 인터페이스를 구현하고 있어야 정렬이 됩니다. Member 배열에서 Member 객체들을 name 필드값으로 정렬하고 싶다면 다음과 같이 Member 클래스를 작성해야 합니다.
public class Member implements Comparable<Member> {
String name;
Member(String name) {
this.name = name;
}
@Override
public int compareTo(Member o) {
return name.compareTo(o.name);
}
}
[SearchExample] 배열검색
import java.util.Arrays;
public class SearchExample {
public static void main(String[] args) {
// 기본 타입값 검색
int[] scores = { 99, 97, 98 };
Arrays.sort(scores);
int index = Arrays.binarySearch(scores, 99);
System.out.println("찾은 인덱스 : " + index);
// 문자열 검색
String[] names = { "홍길동", "김길동", "박길순" };
Arrays.sort(names);
index = Arrays.binarySearch(names, "홍길동");
System.out.println("찾은 인덱스 : " + index);
// 객체 검색
Member m1 = new Member("홍길동");
Member m2 = new Member("김길동");
Member m3 = new Member("박길순");
Member[] members = { m1, m2, m3 };
Arrays.sort(members);
index = Arrays.binarySearch(members, m1);
System.out.println("찾은 인덱스 : " + index);
}
}
실행결과
찾은 인덱스 : 2
찾은 인덱스 : 2
찾은 인덱스 : 2
Math, Random 클래스
Math 클래스
메소드 | 설명 | 예제 코드 | 리턴값 |
---|---|---|---|
double ceil(double a) | 올림값 | double v1 = Math.ceil(5.4) | v1 = 6.0 |
double floor(double a) | 내림값 | double v2 = Math.floor(5.4) | v2 = 5.0 |
int max(int a, int b) | 최대값 | int v3 = Math.max(5, 9) | v3 = 9 |
double max(double a, double b) | 최대값 | double v4 = Math.max(5.3, 2.5) | v4 = 5.3 |
int min(int a, int b) | 최소값 | int v5 = Math.min(5, 9) | v5 = 5 |
double min(double a, double b) | 최대값 | double v6 = Math.max(5.3, 2.5) | v6 = 2.5 |
double random() | 랜덤값 | double v7 = Math.random(;) | 0.0 <= v7 < 1.0 |
double round(double a) | 반올림값 | long v8 = Math.round(5.4); | v8 = 5 |
Random 클래스
여기서 자주 사용하는 Math.random()만 살펴보면,
0.0 <= Math.random() < 1.0 // Math.random 메소드는 해당 범위를 가진다
만약 Math.random() 메소드를 활용해 1부터 10까지의 정수 난수를 얻고 싶다면 다음과 같이 만들면 됩니다.
0.0*10 <= Math.random() < 1.0*10 // 0.0~10.0 사이의 double 타입의 값 추출
(int) (0.0*10) <= (int) Math.random() < (int) (1.0*10) // int 타입을 강제 타입 변환하여 0~10사이의 int 값 추출
(int) (0.0*10) + 1 <= (int) Math.random() < (int) (1.0*10) + 1 // 1~11 사이의 int 값 추출
Date, Calender 클래스
Date 클래스
예제
import java.util.Date;
import java.text.SimpleDateFormat;
public class DateEx {
public static void main(String[] args) {
Date now = new Date();
String strNow1 = now.toString();
System.out.println(strNow1);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy년 MM월 dd일 hh시 mm분 ss초");
String strNow2 = sdf.format(now);
System.out.println(strNow2);
}
}
실행결과
Mon May 04 16:59:16 KST 2020
2020년 05월 04일 04시 59분 16초
Calendar 클래스
달력을 표현한 클래스로 추상(abstract) 클래스이므로 new 연산자를 사용해서 인스턴스를 생성할 수 없습니다. 이는 날짜를 계산하는 방법이 지역과 문화, 나라에 따라 다르기 때문입니다. 특별한 역법을 사용하는 것이 아니라면 직접 하위 클래스를 만들 필요는 없고 Calendar 클래스의 정적 메소드인 getInstance() 메소드를 이용하면 현재 운영체제에 설정된 시간대를 기준으로 한 Calender 사용이 가능합니다.
Calendar now = Calendar.getInstance();
get() 메소드를 통한 날짜와 시간 정보 읽기
int year = now.get(Calendar.YEAR); // 년도 리턴
int month = now.get(Calendar.MONTH) + 1; // 월을 리턴
int day= now.get(Calendar.DAY_OF_MONTH); // 일을 리턴
int week = now.get(Calendar.DAY_OF_WEEK); // 요일을 리턴
int amPm = now.get(Calendar.AM_PM); // 오전/오후를 리턴
int hour = now.get(Calendar.HOUR); // 시를 리턴
int minute = now.get(Calendar.MINUTE); // 분을 리턴
int second = now.get(Calendar.SECOND); // 초를 리턴
예제
import java.util.Calendar;
public class CalendarEx {
public static void main(String[] args) {
Calendar now = Calendar.getInstance();
int year = now.get(Calendar.YEAR);
int month = now.get(Calendar.MONTH);
int day = now.get(Calendar.DAY_OF_MONTH);
int week = now.get(Calendar.DAY_OF_WEEK);
String strWeek = null;
switch (week) {
case Calendar.MONDAY:
strWeek = "월";
break;
case Calendar.TUESDAY:
strWeek = "화";
break;
case Calendar.WEDNESDAY:
strWeek = "수";
break;
case Calendar.THURSDAY:
strWeek = "목";
break;
case Calendar.FRIDAY:
strWeek = "금";
break;
case Calendar.SATURDAY:
strWeek = "토";
break;
default:
strWeek = "일";
}
int amPm = now.get(Calendar.AM_PM);
String strAmPm = null;
if (amPm == Calendar.AM) {
strAmPm = "오전";
} else {
strAmPm = "오후";
}
int hour = now.get(Calendar.HOUR);
int minute = now.get(Calendar.MINUTE);
int second = now.get(Calendar.SECOND);
System.out.print(year + "년 ");
System.out.print(month + "월 ");
System.out.print(day + "일 ");
System.out.print(strWeek + "요일 ");
System.out.print(strAmPm + " ");
System.out.print(hour + "시 ");
System.out.print(minute + "분 ");
System.out.print(second + "초");
}
}
실행결과
2020년 4월 4일 월요일 오후 5시 23분 19초
날짜 형식 클래스 SimpleDateFormat
패턴문자 | 의미 | 패턴문자 | 의미 |
---|---|---|---|
y | 년 | H | 시(0~23) |
M | 월 | h | 시(1~12) |
d | 일 | m | 분 |
E | 요일 | s | 초 |
예제
import java.text.SimpleDateFormat;
import java.util.Date;
public class SimpleDateFormatEx {
public static void main(String[] args) {
Date now = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(sdf.format(now));
sdf = new SimpleDateFormat("yyyy년 MM월 dd일");
System.out.println(sdf.format(now));
sdf = new SimpleDateFormat("yyyy.MM.dd a HH:mm:ss");
System.out.println(sdf.format(now));
sdf = new SimpleDateFormat("오늘은 E요일");
System.out.println(sdf.format(now));
sdf = new SimpleDateFormat("올해의 D번째 날");
System.out.println(sdf.format(now));
sdf = new SimpleDateFormat("이달의 D번째 날");
System.out.println(sdf.format(now));
}
}
실행결과
2020-05-04
2020년 05월 04일
2020.05.04 PM 17:33:48
오늘은 Mon요일
올해의 125번째 날
이달의 125번째 날
댓글남기기