API

6 분 소요

API

  • 프로그램 개발에 자주 사용되는 클래스 및 인터페이스 모음

util 패키지

클래스 용도
Arrays 배열을 조작(비교, 복사, 정렬, 찾기)할 때 사용
Calendar 운영체제의 날짜와 시간을 얻을 때 사용
Date 날짜와 시간 정보를 저장하는 클래스
Objects 객체 비교, 널(null) 여부 등을 조사할 때 사용
StringTokenizer 특정 문자로 구분된 문자열을 뽑아낼 때 사용
Random 난수 얻을때 사용

Object 클래스

객체 해시코드(hashCode())

  • 객체 해시코드란 객체를 식별할 하나의 정수값을 말함
    • 리턴된 해시코드 값이 같은지 확인하는 메소드
    • hashCode() 실행 시 해시코드 값이 같으면 equals() 메소드로 다시 비교함.(hashCode() 메소드가 true 여도, equals()의 리턴값이 다르면 다른 객체가 됨.)

객체 문자 정보(toString())

  • toString() 메소드는 객체의 문자 정보를 16진수해시코드로 구성된 문자 정보를 리턴함.
    • 오버라이딩 하여 간결하고, 유익한 정보를 리턴하도록 되어있음.(원래 메소드의 리턴값은 별 값어치 없는 정보임)

객체 복제(clone())

  • 객체 복제는 원본 객체의 필드값과 동일한 값을 가지는 새로운 객체를 생성하는것을 말함.
    • 객체 복체를 하는 이유는 원본 객체를 안전하게 보호하기 위해서임.
    • 얕은복제(thin clone)
    • 단순히 필드값을 복사해서 객체를 복제하는것을 말하며, 필드값만 복제하기 때문에 필드가 기본타입일 경우 값 복사가 일어나고, 필드가 참조 타입일 경우 객체의 번지가 복사 됨.
    • 복제 객체에서 참조 객체를 변경하면 원본 객체도 변경된 객체를 가지게 됨.(얕은 복제의 단점)
  • 이메소드로 객체를 복제하려면 원본 객체는 반드시 java.lang.Cloneable 인터페이스를 구현하고 있어야 함.

    • 깊은복제(deep clone)
    • 깊은 복제란 참조하고있는 객체도 복제하는것을 말함. 원본과 복제본이 각각 참조하는 객체는 다름.

Object 클래스

  • 연산을 수행하는 정적 메소드들로 구성된 Object의 유틸리티 클래스

객체 비교(compare(T a,T b, Comparatorc))

  • 두 객체를 비교자로 비교해서 int 값을 리턴함.
    • T 는 비교할 객체 타입

동등비교 (equals()와 deepEquals())

  • equals() 는 두객체의 동등을 비교함. (비교하는 두 객체가 모두 null 이면 true 를 리턴)
  • deppEquals() 는 두 객체의 동등을 비교하는데, 서로 다른 배열일 경우 항목 값이 모두 같다면 true 를 리턴함.

널 여부 조사(isNull(), nonNull(), requireNonNull())

  • isNull() 은 매개값이 null 일 경우 true 리턴
  • nonNull() 은 매개값이 not null 일 경우 true 리턴
  • requireNonNull()은 3가지로 오버로딩 되어있음.
리턴타입 메소드(매개변수) 설명
T requireNonNull(T obj) not null -> obj , null -> NullPointerException
T requireNonNull(T obj, String message) not null -> obj , null -> NullPointerException(message)
T requireNonNull(T obj, Supplier msgSupplier) not null -> obj , null -> NullPointerException(msgSupplier.get())

System 클래스

  • System 클래스의 모든 필드와 메소드는 정적(static) 필드,메소드로 구성되어있음.

프로그램 종료(exit())

  • 현재 실행하고 있는 프로세스를 강제 종료시키는 역할

쓰레기 수집기 실행(gc())

  • JVM 은 메모리가 부족할 때와 CPU 가 한가할때 쓰레기수집기(Garbage Collector)를 실행시켜 사용하지 않는 객체를 자동 제거 (힙(heap) 영역에 쓰이지않는 객체 삭제)

시스템 프로퍼티 읽기(getProperty())

  • 시스템 프로퍼티(System Property)는 JVM 이 시작할 때 자동 설정되는 시스템의 속성값

환경변수 읽기(getenv())

  • 환경 변수의 값이 필요할 경우 사용하는 메소드

Class 클래스

Class 객체 얻기

  • 프로그램에서 Class 객체를 얻기 위해서는 Object 클래스가 가지고있는 getClass() 메소드를 이용
  • getClass() 메소드는 해당 클래스로 객체를 생성했을 때만 사용 가능
  • 객체를 생성하기전 Class 객체를 얻기 위해서는 forName() 메소드 사용 (해당 메소드는 예외 처리가 필요함)

리플렉션

  • Class 객체를 이용해 클래스의 생성자, 필드, 메소드 정보를 알아내는것을 리플렉션 이라고함.
    Constructor[] constructor = class.getDeclaredConstructors();
    Field[] fields = class.getDeclaredFields();
    Method[] methods = class.getDeclareMethods();
    
  • 클래스에 선언된 멤버만 가져오고 상속된 멤버는 가져오지 않음.

동적 객체 생성(newInstance())

  • Class 객체를 이용 시 new 연산자를 사용하지 않아도 동적으로 객체를 생성할 수 있음.
  • 이방법은 코드 작성 시 클래스 이름을 결정할 수없고, 런타임 시에 클래스 이름이 결정되는 경우 사용
try{
    Class class = Class.forName("런타임 시 결정되는 클래스 이름");
    Object obj = class.newInstance();
}catch(Exception e) {
}
  • 이 메소드는 기본 생성자를 호출해서 객체를 생성하기 때문에 반드시 클래스에 기본생성자가 존재해야 함.
    • 리턴타입은 Ojbect 이므로 이것을 원래 클래스 타입으로 변환해야 사용이 가능하지만, 클래스 타입을 모르는 상태이므로 변환이 불가능함.
      • 인터페이스 타입으로 변환 후 인터페이스에 선언되어있는 메소드를 호출하면 개별 클래스의 실체 메소드인 메소드가 실행됨.

String 클래스

String 메소드

리턴타입 메소드명(매개변수) 설명
int indexOf(String str) 문자열 내에서 주어진 문자열의 위치를 리턴 (해당하는 값이 없으면 -1 리턴)
String replace(CharSequence target, CharSequence Replacement) target 부분을 Replacement로 대치한 새로운 문자열을 리턴
String substring(int beginIndex) beginIndex 위치에서 끝까지 잘라낸 새로운 문자열을 리턴
String subStinrg(int beginIndex, int endIndex) beginIndex 위치에서 endIndex 전까지 잘라낸 새로운 문자열을 리턴
String toLowerCase() 알파벳 소문자로 변환한 새로운 문자열을 리턴
String toUpperCase() 알파벳 대문자로 변환한 새로운 문자열을 리턴
String trim() 앞뒤 공백을 제거한 새로운 문자열을 리턴
String valueOf(int i), value(double d) 기본 타입값을 문자열로 리턴

StringBuffer, StringBuilder 클래스

  • 문자열을 결합하는 + 연산자를 많이 사용하면 할수록 그만큼 String 객체의 수가 늘어나기 때문에, 프로그램의 성능을 느리게 하는 요인이 됨.
  • 문자열을 변경하는 작업이 많을 경우에는 StringBuffer 또는 StringBuilder 클래스를 사용
    • 두 클래스는 내부 버퍼(buffer: 데이터를 임시로 저장하는 메모리)에 문자열을 저장해두고 그안에서 추가,수정,삭제 작업을 할수있도록 설계되어있음.
      • StringBuffer 은 멀티스레드 환경에서 사용할 수 있도록 동기화가 적용되어 있어 스레드에 안전
      • StringBuilder는 단일 스레드 환경에서만 사용하도록 설계되어 있음.
        StringBuilder sb = new StringBuilder();
        StringBuilder sb = new StringBuilder(int capacity); // 주어진 개수만큼 문자 저장할수있는 초기 버퍼를 만듬
        StringBuilder sb = new StringBuilder(String str); // str로 주어진 매개값을 버퍼의 초기값으로 저장
        

정규표현식과 pattern 클래스

  • 문자열이 정해져 있는 형식(정규 표현식 : Regular Expression)으로 구성되어 있는지 검증해야 하는경우 정규 표현식과 비교함.

정규 표현식 작성 방법

  • 정규표현식은 문자 또는 숫자 기호와 반복 기호가 결합된 문자열임.
기호 설명
[] 한개의 문자 (예시 : [abc] : abc 중 하나의 문자 // [^abc] : abc 이외의 하나의 문자 // [a-zA-Z] : a~z,A~Z 중 하나의 문자
\d 한개의 숫자,[0-9]와 동일
\s 공백
\w 한개의 알파벳 또는 한개의 숫자, [a-zA-Z_0-9]와 동일
? 없음 또는 한개
* 없음 또는 한개 이상
+ 한개 이상
{n} 정확히 n개
{n,} 최소한 n개
{n,m} n개에서부터 m개까지
() 그룹핑
. 문자로서의 점(.)
. 모든 문자중에서 한개의 문자
  • 전화번호 정규식
(02|010)-\d{3,4}-\d{4}
//(02|010) : 02 또는 010
//- : - 포함
//\d{3,4} : 3자리 또는 4자리 숫자
//- : 포함
//\d{4} : 4자리 숫자    

Pattern 클래스

  • 문자열을 정규 표현식으로 검증하는 기능은 Pattern 클래스의 정적 메소드인 matches() 메소드가 제공
    boolean result = Pattern.matches("정규식", "검증할 문자열");
    

Arrays 클래스

  • 배열 조작 기능(배열 조작이란 배열의 복사 항목 정렬, 항목 검색과 같은 기능)
리턴 타입 메소드 이름 설명
int binarySearch(배열, 찾는값) 전체 배열 항목에서 찾는 값이 있는 인덱스 리턴
타겟 배열 copyOf(원본배열, 복사할 길이) 원본배열의 0번 인덱스에서 복사할 길이만큼 복사한 배열 리턴, 복사할 길이는 원본 배열의 길이보다 커도 되며, 타겟 배열의 길이가됨
타겟 배열 copyOfRange(원본배열, 시작인덱스, 끝인덱스) 원본 배열의 시작 인덱스에서 끝 인덱스까지 복사한 배열 리턴
boolean deepEquals(배열,배열) 두 배열의 깊은 비교(중첩 배열의 항목까지 비교)
boolean equals(배열,배열) 두 배열의 얕은 비교(중첩 배열의 항목은 비교하지 않음)
void fill(배열, 값) 전체 배열 항목에 동일한 값을 저장
void fill(배열, 시작인덱스, 끝인덱스, 값) 시작 인덱스부터 끝 인덱스까지의 항목에만 동일한 값을 저장
void sort(배열) 배열의 전체 항목을 오름차순으로 정렬
String toString(배열) “[값1,값2,…]” 와 같은 문자열 리턴

Wrapper(포장) 클래스

  • 자바는 기본 타입의 값을 갖는 객체를 생성할 수 있는데 이런 객체를 포장 객체라고 함.
    • 포장객체의 특징은 기본 타입값은 외부에서 변경 불가. 내부의 값을 변경하고싶다면 새로운 포장 객체를 만들어야 함.

박싱(Boxing)과 언박싱(Unboxing)

  • 기본타입의 값을 포장 객체로 만드는 과정을 박싱(Boxing) 이라고 하고, 포장 객체에서 기본 타입의 값을 얻어 내는 과정을(UnBoxing) 이라 함.

자동 박싱과 언박싱

  • 자동 박싱은 포장 클래스 타입에 기본값이 대입될 경우 발생
    Integer obj = 100; //자동박싱
    
  • 자동 언박싱은 기본 타입에 포장 객체가 대입될 경우에 발생함.
    Integer obj = new Integer(200);
    int value1 = obj; //자동 언박싱
    int value2 = bj + 100; // 자동 언박싱 (Integer 객체로부터 int 타입의 값이 자동 언박싱되어 연산)
    

    날짜 형식 클래스(SimpleDateFormat)

  • 특정 문자열 포맷으로 날짜 출력해주는 클래스

    문자열 형식 클래스(messageFormat)

  • 클래스 사용 시 문자열에 데이터가 들어갈 자리를 표시해 두고, 프로그램이 실행하면서 동적으로 데이터를 삽입해 문자열을 완성 시킬수 있음.
String message = "회원 ID: {0} \n회원 이름 : {1} \n 회원 전화: {2}";

Object[] arg = {id, name, tel};
String result = MessageFormat.format(text, arg); // 배열사용 시

String result = MessageFormat.format(message, id, name, tel); // 배열 미사용

java_time 패키지

  • 자바 7 이전까지는 날짜와 시간 정보를 얻기 위해 Date 와 Calendar 클래스를 이용
    • 자바 8부터는 날짜와 시간을 나타내는 여러가지 API 를 새롭게 추가함.

카테고리:

업데이트: