자바 개발 도구인 JDK(Java Development Kit)는 화면 출력, 키 입력, 네트워킹 등 프로그램 개발에 필요한 기본적인 기능과 다양한 응용 기능을 구현한 많은 클래스 및 인터페이스를 포함하는 표준 패키지를 제공하며, 이를 자바 API라고 한다.
| 자동임포트 | 설명 |
|---|---|
| java.lang - System | 문자열, 수학 함수, 입출력 등과 같이 자바 프로그래밍에 필요한 기본적인 클래스와 인터페이스 제공. 이 패키지의 클래스들은 특별히 import문을 사용하지 않아도 자동으로 임포트됨 |
| java.util | 날짜, 시간, 벡터, 해시맵 등의 유틸리티 클래스와 인터페이스 |
| java.io | 키보드, 모니터, 프린터 등의 입출력 클래스와 인터페이스 |
| java.awt | GUI 프로그래밍에 필요한 AWT 클래스와 인터페이스 |
| javax.swing | 스윙 GUI 프로그래밍에 필요한 클래스와 인터페이스 |
Object는 java.lang 패키지에 속한 클래스이며, 모든 클래스는 강제로 Object를 상속 받는다. Object만이 유일하게 아무 클래스도 상속받지 않는, 자바 클래스 계층 구조의 최상위 클래스이다.
| 메소드 | 설명 |
|---|---|
| boolean equals(Object obj) | obj가 가리키는 객체와 현재 객체를 비교하여 같으면 true 리턴 |
| Class getClass() | 현 객체의 런타임 클래스를 리턴 |
| int hashCode() | 현 객체에 대한 해시 코드 값 리턴 |
| String toString() | 현 객체에 대한 문자열 표현을 리턴 |
| void notify() | 현 객체에 대해 대기하고 있는 하나의 스레드를 깨운다. |
| void notifyAll() | 현 객체에 대해 대기하고 있는 모든 스레드를 깨운다. |
| void wait() | 다른 스레드가 깨울 때까지 현재 스레드를 대기하게 한다. |
Object에는 객체를 문자열로 변환하는 toString()이 있으며, 각 클래스는 toString()을 오버라이딩하여 자신만의 문자열을 리턴함.
public String toString(); //public으로 선언해야 함에 특히 주의
개념
기본 타입 : byte, short, int, long, char, float, double, boolean
Wrapper 클래스 : Byte, Short, Integer, Long, Character, Float, Double, Boolean
Wrapper 클래스에는 기본 타입 값을 문자열로 변환하거나, 문자열을 기본 타입 값으로 변환하는 메소들이 주를 이루고 있다.
Integer 클래스의 주요 메소드
| 메소드 | 설명 |
|---|---|
| static int bitCount(int i) | 정수 i의 이진수 표현에서 1의 개수 리턴 |
| double doubleValue() | double 타입으로 값 리턴 |
| static intValue() | int 타입으로 값 리턴 |
| static int parseInt(String s) | 스트링 s를 10진 정수로 변환한 값 리턴 |
| static int pareseInt(String s, int radix) | 스트링 s를 지정된 진법의 정수로 변환한 스트링 리턴 |
| static String toBinaryString(int i) | 정수 i를 이진수 표현으로 변환한 스트링 리턴 |
| static String toHexString(int i) | 정수 i를 16진수 표현으로 변환한 스트링 리턴 |
| static String toString(int i) | 정수 i를 스트링으로 변환하여 리턴 |
기본 타입의 값을 Wrapper 객체로 변환하는 것을 박싱(boxing)이라 하고, 반대의 경우를 언박싱(unboxing)이라고 함.
Integer ten = Integer.valueOf(10);
int n = ten.intValue();
자동 박싱(auto boxing)
Integer ten = 10; // 자동 박싱. Integer ten = Integer.valueOf(10);과 동일
int n = ten; // 자동 언박싱. int n = ten.intValue();과 동일
| 메소드 | 설명 |
|---|---|
| char charAt(int index) | index 인덱스에 있는 문자 값 리턴 |
| int compareTo(String anotherString) | 두 스트링을 사전적 순서 기준 비교, 같으면 0, 현 스트링이 anotherString보다 먼저 나오면 음수, 아니면 양수 리턴 |
| String concat(String str) | str 스트링을 현재 스트링 뒤에 덧붙인 스트링 리턴 |
| boolean contains(CharSequence s) | s에 지정된 문자들을 포함하고 있으면 true 리턴 |
| int length() | 스트링의 길이(문자 개수) 리턴 |
| String replace(Charsequence target, Charsequence replacement) | target이 지정하는 일련의 문자들을 replacement가 지정하는 문자들로 변경한 스트링 리턴 |
| String[] split(String regex) | 정규식 regex에 일치하는 부분을 중심으로 스트링을 분리하고 분리된 스트링을 배열에 저장하여 리턴 |
| String subString(int beginIndex) | beginIndex 인덱스부터 시작하는 서브 스트링 리턴 |
| String toLowerCase() | 소문자로 변경한 스트링 리턴 |
| String toUpperCase() | 대문자로 변경한 스트링 리턴 |
| String trim() | 스트링의 앞뒤 공백 문자 제거한 스트링 리턴 |
StringBuffer 클래스는 스트링을 다루는 클래스로서, 내부에 가변 크기의 버퍼를 가지고 문자의 개수에 따라 버퍼 크기를 자동 조절. 생성된 스트링의 수정이 가능.
StringBuffer sb = new StringBuffer("Java"); //"Java"를 가진 StringBuffer 객체
StringTokenizer 클래스는 문자열을 분리하기 위해 사용된다. 문자열 분리할 때 사용되는 기준 문자를 구분 문자(delimiter)라고 하고, 구분 문자로 분리된 문자열을 토큰(token)이라고 한다.
ex) 단어는 공백 한 개로 구분되는, 단어의 수를 구하는 로직
import java.util.*;
public class StringTokenizerEx {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String query = sc.nextLine();
StringTokenizer st = new StringTokenizer(query, " ");
int n = st.countTokens(); //분리된 토큰 개수
System.out.println("토큰 개수 =" + n);
while(st.hasMoreTokens()) { // for(int i=0; i<n; i++)와 동일
String token = st.nextToken(); // 토큰 얻기
System.out.println(token); // 토큰 출력
sc.close();
}
}
}
StringTokenizer 클래스의 생성자와 메소드
| 생성자와 메소드 | 설명 |
|---|---|
| StringTokenizer(String str) | str 스트링으로 파싱한 스트링 토크나이저 생성 |
| int countTokens() | 스트링 토크나이저에 포함된 토큰의 개수 리턴 |
| boolean hasMoreTokens() | 스트링 토크나이저에 다음 토큰이 있으면 true 리턴 |
| String nextToken() | 다음 토큰 리턴 |
모든 메소드가 static 타입이기 때문에 'Math.메소드' 형태로 사용할 수 있다.
| 메소드 | 설명 |
|---|---|
| static double abs(double a) | 실수 a의 절대값 리턴 |
| static double exp(double a) | e^2 값 리턴 |
| static double sin(double a) | 실수 a의 sine 값 리턴 |
| static double random() | 0.0 크거나 같고 1.0 보다 작은 임의의 실수 리턴 |
| static long round(double a) | 실수 a를 소수 첫째 자리에서 반올림한 정수를 long 타입으로 변환 |
| static double sqrt(double a) | 실수 a의 제곱근 리턴 |
exam Math 클래스 활용
public class MathEx {
public static void main(String[] args) {
System.out.println(Math.abs(-3.14)); // 절대값 구하기
System.out.println(Math.sqrt(9.0)); // 제곱근
System.out.println(Math.exp(2)); // e의 2승
System.out.println(Math.round(3.14)); // 반올림
// [1, 45] 사이의 정수형 난수 6개 발생
System.out.print("이번주 행운의 번호는 ");
for(int i=0; i<6; i++)
System.out.print((int)(Math.random()*45 + 1) + " ");
}
}
ps. 기초가 중요해요... 그렇죠...? 그렇게 생각하죠?