본문 바로가기

개발(합니다)/Java&Spring

[java-기초-11-01] 기본 API 클래스

반응형

자바 API 도큐먼트

  • 자바에서 제공하는 API(Application Programming Interface)는 라이브러리라고 부르기도 하고 프로그램 개발에 자주 사용되는 클래스 및 인터페이스의 모음을 말한다.
  • java api

java.lang과 java.util 패키지

  • 자바에서 가장 많이 사용하는 패키지는 java.lang 패키지와 java.util, java.time 패키지이다.

java.lang 패키지

  • java.lang 패키지는 자바 프로그램의 기본적인 클래스를 담고 있는 패키지로 import 없이 클래스와 인터페이스를 사용할 수 있다.
클래스 용도
Object 자바 클래스의 최상위 클래스로 사용
System 표준 입력 장치(키보드)로부터 데이터를 입력받을 때 사용
표준 출력 장치(모니터)로 출력하기 위해 사용
자바 가상 기계를 종료시킬 때 사용
쓰레기 수집기를 실행 요청할 때 사용
Class 클래스를 메모리로 로딩할 때 사용
Strign 문자열을 저장하고 여러가지 정보를 얻을 때 사용
StringBuffer, StringBuilder 문자열을 저장하고 내부 문자열을 조작할 때 사용
Math 수학 함수를 이용할 때 사용
Wrapper Byte, Short, Character 기본 타입의 데이터를 갖는 객체를 만들 때 사용
Integer, Float, Double 문자열을 기본 타입으로 변환할 때 사용
Boolean, Long 입력 값 검사에 사용

java.util 패키지

  • 개발에 조미료 역할을 하는 클래스를 담고 있고 컬렉션 클래스들이 대부분을 차지하고 있다.
클래스 용도
Arrays 배열을 조작(비교, 복사, 정렬, 찾기)할 때 사용
Calendar 운영체제의 날짜와 시간을 얻을 때 사용
Date 날짜와 시간 정보를 저장하는 클래스
Objects 객체 비교, Null 여부 등을 조사할 때 사용
StringTokenizer 특정 문자로 구분된 문자열을 뽑아낼 때 사용
Random 난수를 얻을 때 사용

Object 클래스

  • 클래스를 선언할 때 extends 키워드로 다른 클래스를 상속하지 않으면 암시적으로 java.lang.Object 클래스를 상속한다.
  1. 객체 비교(equals()) : 두 객체가 논리적으로 동일한 객체라면 true를, 그렇지 않으면 false를 리턴한다.
    • String 객체의 equals() 메서드는 String 객체의 번지(주소)를 비교하는 것이 아니고, 문자열이 동일한지 조사해서 같다면 true를 그렇지 않다면 false를 리턴한다.
  2. 객체 해시코드(hashCode()) : 객체를 식별할 하나의 정수값을 의미하며 객체의 메모리 번지(주소)를 이용해서 해시코드를 만들어 하기때문에 객체마다 다른 값을 가지고 있다.
    • 해시코드 값이 다르면 다른 객체로 판단하고, 해시코드 값이 같으면 equals() 메서드로 다시 비교한다. 그러므로 hashCode(0 메서드가 true가 나와도 equals()의 리턴 값이 다르면 다른 객체가 된다.
    • 객체의 동등 비교를 위해서는 Object의 equals() 메서드만 재정의하지 말고 hashCode(0 메서드도 재정의해서 논리적 동등객체일 경우 동일한 해시코드가 리턴되도록 해야 한다.
    • Objects.hashCode(Object o)를 사용하면 편리하다.
  3. 객체 문자 정보(toString()) : 객체를 문자열로 표현한 값을 리턴한다.
    • "클래스명@16진수해시코드"로 구성된 문자정보를 리턴하는데 메서드를 재정의해서 사용하면 원하는 정보를 얻을 수 있다.
  4. 객체 복제(clone()) : 원본 객체의 필드 값과 동일한 값을 가지는 새로운 객체를 생성하는 것을 의미하며 원본 객체를 안전하게 보호하기 위해서 사용한다.
    • clone() 메서드는 얕은 복사를 리턴하고 객체를 복제하려면 원본 객체가 java.lang.Clonable 인터페이스를 구현하고 있어야 한다.
    • Clonable 인터페이스를 구현하는 이유는 설계자가 복제를 허용한다는 의도적인 표시를 하기 위해서이다.
    • Arrays.copyOf와 같은 메서드를 이용해 clone() 메서드를 재정의하여 깊은 복사로 사용한다.
    • 객체의 복제는 얕은 복사와 깊은 복사가 있다.
      • 얕은 복사는 데이터의 번지(주소)를 복사하여 값을 공유하는 복사를 의미하며 1번 객체가 값을 변경하면 2번 객체도 따라 변경된다.
      • 깊은 복사는 데이터의 번지(주소)를 새로 생성하여 값을 고유하게 가지는 복사를 의미하며 1번 객체가 값을 변경해도 2번 객체는 변경되지 않는다.
  5. 객체 소멸자(finalize()) : 참조하지 않는 배열이나 객체는 쓰레기 수집기가 힙 영역에서 자동적으로 소멸시킨다. 쓰레기 수집기는 객체를 소멸하기 직전에 마지막으로 객체의 소멸자(finalize(0)를 실행시킨다.
    • 한두 개의 객체를 쓰레기로 만들었다고 쓰레기 수집기가 수행되는 것을 보장하지는 않는다.
    • 가급적 빨리 쓰레기 수집기를 수행해달라는 메서드는 System.gc()이고 반드시 수행을 보장하지 않는다.
    • 쓰레기 수집기는 메모리가 부족할 경우나 CPU가 한가할 때에 JVM에 의해서 자동 실행된다.

Objects 클래스

  • 객체 비교, 해시코드 생성, null 여부, 객체 문자열 리턴 등의 연산을 수행하는 정적 메서드들로 구성된 Object의 유틸리티 클래스이다.
리턴 타입 메서드(매개변수) 설명
int compare(T a, T b, Comparator<T> c) 두 객체 a와 b를 Comparator를 사용해서 비교
boolean deepEquals(Object a, Object b) 두 객체의 깊은 비교(배열의 항목까지 비교)
boolean equals(Object a, Object b) 두 객체의 얕은 비교(번지만 비교)
int hash(Object... values) 매개값이 저장된 배열의 해시코드 생성
int hashCode(Object o) 객체의 해시코드 생성
boolean isNull(Object obj) 객체가 null인지 조사
boolean nonNull(Object obj) 객체가 null이 아닌지 조사
T requireNonNull(T obj) 객체가 null인 경우 예외 발생
T requireNonNull(T obj, String message) 객체가 null인 경우 예외발생(주어진 예외 메시지 포함)
T requireNonNull(T obj, Supplier<String> messageSupplier) 객체가 null인 경우 예외 발생(람다식이 만든 예외 메시지 포함)
String toString(Object o) 객체가 toString() 리턴 값 리턴
String toString(Object o, String nullDefault) 객체의 toString() 리턴 값 리턴, 첫 번째 매개값이 null일 경우 두 번째 매개 값 리턴
  1. 객체 비교(compare(T a, T b, Comparator c)) : 두 객체를 비굦로 비교해서 int 값을 리턴한다.
    • 같으면 0, o1이 크면 1, o1이 작으면 -1을 리턴한다.
  2. 동등 비교(equals()와 deepEquals()) : 두 객체의 동등을 비교한다.
    • equals의 경우 a와 b가 모두 null일 경우 true를 리턴하는 특이한 점이 있다.
a b Objects.equals(a, b)
not null not null a.equals(b) 리턴값
null not null false
not null null false
null null true
  • deepEquals의 경우 a와 b가 서로 다른 배열일 경우, 항목 값이 모두 값다면 true를 리턴한다.
a b Objects.deepEquals(a, b)
not null(not array) not null(not array) a.equals(b)의 리턴값
not null(array) not null(array) Arrays.deepEquals(a, b)의 리턴 값
not null null false
null not null false
null null ture
  1. 해시코드 생성(hash(), hashCode()) : 매개값으로 주어진 값들을 이용해서 해시코드를 생성하는 역할을 하며 주어진 매개값들로 배열을 생성하고 Arrays.hashCode(Object[])를 호출해서 해시코드를 얻고 이를 리턴한다.
  2. 널 여부 조사(isNull(), nonNull(), requireNonNull()) : Objects.isNull(Object obj)는 매개값이 null일 경우 true를 반환하고, nonNull(Object obj)는 매개 값이 not null일 경우 ture를 리턴하고, requireNonNull()은 아래 세 가지로 오버로딩 되어 있다.
리턴 타입 메서드(매개변수) 설명
T requireNonNull(T obj) not null -> obj
null -> NullPointerException
T requireNonNull(T obj, String message) not nul -> obj
null -> NullPointerException
T requireNonNull(T obj, Supplier<String> msgSupplier) not null -> obj
null -> NullPointerException(msgSupplier.get())
  1. 객체 문자 정보(toString()) : 객체 정보를 리턴하며 두 가지로 오버로딩 되어 있다.
리턴 타입 메소드(매개 변수) 설명
String toString(Object o) not null -> o.toString()
null -> "null"
String  toString(Object o, String nullDefault) not null -> o.toString()
null -> nullDefault

System 클래스

  • 자바는 운영체제상에서 바로 실행되는것이 아니라 JVM 위에서 실행되어 운영체제의 모든 기능을 자바 코드로 직접 접근하기가 어렵다.
  • java.lang에 속하는 System 클래스를 이용하면 운영체제의 일부 기능을 이용할 수 있다.
  • 정적 필드와 정적 메서드로 구성되어 있다.
  1. 프로그램 종료(exit()) : 강제로 종료할 경우에 사용한다.
    • 정상 종료일 경우 0으로 지정하고 비정상 종료일 경우 0이외의 다른 값을 준다.
    • 특정 값이 입력 되었을 경우에만 종료하고 싶다면 자바의 보안 관리자를 직접 설정해서 종료 상태 값을 확인하면 된다.
        System.setSecurityManager(new SecurityManager() {
            @Override
            public void checkExit(int status) {
                if(status != 5) {
                    throw new SecurityException();
                }
            }
       });
  2. 쓰레기 수집기 실행(gc()) : 가급적 쓰레기 수집기를 빠르게 수행해달라고 요청하고 JVM은 빠른 시간 내에 실행 시키기 위해 노력한다.
  3. 현재 시각 읽기(currentTimeMillis(), nanoTime()) : 컴퓨터의 시계로부터 현재 시간을 읽어서 밀리세컨드(1/1000초) 단위와 나노 세컨드(1/10^9초) 단위의 long 값을 리턴한다.
    • 프로그램 실행 소요 시간 측정에 사용되며 시작 시각을 읽고, 프로그램 종료 시각을 읽어서 차이를 구하면 소요 시간이 나온다.
  4. 시스템 프로퍼티 읽기(getProperty()) : JVM이 시작할 때 자동으로 설정되는 시스템의 속성값을 의미한다.
키(key) 설명 값(value)
java.version 자바의 버전 1.8.0_20
java.home 사용하는 JRE의 파일 경료 <jdk 설치 경로>\jre
os.name Operating system name Windows 10
file.separator File separator("\" on UNIX) \
user.name 사용자의 이름 사용자 계정
user.home 사용자의 홈 디렉토리 C:\Users\사용자 계정
user.dir 사용자가 현재 작업 중인 디렉토리 경로 다양
  1. 환경 변수 읽기(getenv()) : 프로그램상의 변수가 아니라 운영체제에서 이름과 값으로 관리되는 문자열 정보다.

Class 클래스

  • 클래스와 인터페이스의 메타 데이터를 관리한다.
  1. Class 객체 얻기(getClass(), forName()) : Class 객체를 얻기 위해서 getClass() 메서드를 이용하고 Class의 생성자는 forName() 정적 메서드를 이용한다.
  2. 리플렉션(getDeclaredConstructors(), getDeclaredFields(), getDeclaredMethods()) : 클래스의 생성자, 필드, 메서드 정보를 알아낼 수 있다.
  3. 동적 객체 생성(newInstance()) : 클래스 이름을 결정할 수 없고 런타임 시에 클래스 이름이 결정되는 경우 매우 유용하게 사용된다.
    • newInstance() 메서드는 기본 생성자를 호출해서 객체를 생성하기 때문에 반드시 클래스에 기본 생성자가 존재해야 한다.

String 클래스

  • 문자열은 데이터로서 아주 많이 사용되고 있어서 미리 만들어놓은 클래스이다.
  1. String 생성자 : 비권장 생성자를 제외하고 약 13개의 생성자를 제공한다.
     // 배열 전체를 String 객체로 생성
     String str = new String(byte[] bytes); 
     // 지정한 문자셋으로 디코딩
     String str = new String(byte[] bytes, String charsetName); 
    
     // 배열의 offset 인덱스 위치부터 length만큼 String 객체로 생성
     String str = new String(byte[] bytes, int offset, int length); 
     // 지정한 문자셋으로 디코딩
     String str = new String(byte[] bytes, int offset, int length, String charsetName);
  2. String 메서드 : 문자열 추출, 비교, 찾기, 분리, 변환 등과 같은 다양한 메서드를 가지고 있고 그 중 사용 빈도가 높은 메서드는 아래와 같다.
리턴 타입 메서드명(매개 변수) 설명
char charAt(int index) 특정 위치의 문자 리턴
boolean equals(Object anObject) 두 문자열을 비교
byte[] getBytes() byte[]로 리턴
byte[] getBytes(Charset charset) 주어진 문자셋으로 인코딩한 byte[]로 리턴
int indexOf(String str) 문자열 내에서 주어진 문자열의 위치를 리턴
int length() 총 문자의 수를 리턴
String replace(CharSequence target, CharSequence replacement) target 부분을 replacement로 대치한 새로운 문자열을 리턴
String substring(int beginIndex) beginIndex 위치에서 끝까지 잘라낸 새로운 문자열을 리턴
String substring(int beginIndex, int endIndex) beginIndex 위치에서 endIndex전까지 잘라낸 새로운 문자 열으 ㄹ리턴
String toLowerCase() 알파벳 소문자로 변환한 새로운 문자열을 리턴 
String toUpperCase() 알파벳 대문자로 변환한 새로운 문자열을 리턴
String trim() 앞뒤 공백을 제거한 새로운 문자열을 리턴
String valueOf(int i)
valueOf(double d)
기본 타입 값을 문자열로 리턴

StringTokenizer 클래스

  • 문자열이 특정 구분자로 연결되어 있을 경우, 구분자를 기준으로 부분 문자열을 분리하기 위해서는 String의 split() 메서드를 이용하거나, java.util 패키지의 StringTokenizer 클래스를 이용할 수 있다.
  1. split() 메서드 : 정규표현식을 구분자로 해서 문자열을 분리한 후 배열에 저장하고 리턴한다.
  2. countTokens() 메서드 : 꺼내지 않고 남아 있는 토큰의 수
  3. hasMoreTokens() 메서드 : 남아 있는 토큰이 있는지 여부
  4. nextToken() 메서드 : 토큰을 하나씩 꺼내옴

StringBuffer, StringBuilder 클래스

  • 내부 버퍼(buffer : 데이터를 임시로 저장하는 메모리)에 문자열을 저장해 두고, 그 안에서 추가, 수정, 삭제 작업을 할 수 있도록 설계되어 있다.
  • StringBuffer는 멀티 스레드 환경에서 사용할 수 있도록 동기화 적용되어 있어 스레드에 안전하지만 StringBuildr는 단일 스레드 호나경에서만 사용하도록 설계 되어 있다.
메서드 설명
append(...) 문자열 끝에 주어진 매개값을 추가
insert(int offset, ...) 문자열 중간에 주어진 매개값을 추가
delete(int start, int end) 문자열의 일부분을 삭제
deleteCharAt(int index) 문자열에서 주어진 index의 문자를 삭제
replace(int start, int end, String str)  문자열의 일부분을 다른 문자열로 대치
StringBuilder reverse() 문자열의 순서를 뒤바꿈
setCharAt(int index, char ch) 문자열에서 주어진 index의 문자를 다른 문자로 대치
반응형