위로
아래
java.lang 패키지
특징
- 자동으로 import 된다.
- JDK의 하위 폴더 lib 안의 src.zip을 압축 풀어보면 java.lang의 목록을 볼 수 있다.
목록
- Object : 최상위 클래스로 기본적인 메소드 제공
- String, StringBuffer, StringBuilder : 문자열 처리 메소드 제공
- Number, Integer, Long, Float, Double : 기본형 데이터를 객체화
- System : 시스템 정보나 입출력을 처리하는 메소드 제공
- Math : 각종 수학 함수 제공
- Thread : 스레드를 처리하는 메소드 제공
- Class : 실행 중에 클래스 정보를 제공
java.lang : Object 클래스
public String toString() : 객체의 문자 정보 반환
public boolean equals(Object obj) : 두 객체가 동일한지 여부 반환
public int hashcode() : 객체의 해시 코드를 반환
protected Object clone() : 객체의 사본을 생성
- 모든 자바 클래스의 가장 최상위 클래스.
- 모든 자바 클래스는 Object 클래스로부터 상속을 받는다. (자동으로 상속 받아 생략)
- 모든 클래스는 부모 클래스인 Object 클래스의 메소드를 사용할 수 있고, 재정의할 수도 있다.
- 모든 클래스는 Object 타입(형)으로 형변환할 수 있다.
- toString : https://sungmin1.tistory.com/124
java.lang : Class 클래스
forName()
getName() // 객체의 패키지 포함 이름 불러오기
getSimpleName() // 객체의 이름만 불러오기
getTypeName() // 객체의 패키지 포함 이름 불러오기
get.Package() // 객체의 패키지 이름 불러오기
- 객체의 정보를 불러온다.
- public 생성자가 없다.
- 어떤 객체라도 생성하면 JVM이 대응하는 Class 객체를 자동으로 생성한다.
예시
더보기
package ch08.sec02;
public class ClassDemo {
public static void main(String[]args) {
Keyboard k = new Keyboard("Logitech");
Class c = k.getClass();
System.out.println(c.getName()); // 결과 ch08.sec02.Keyboard
System.out.println(c.getSimpleName()); // 결과 Keyboard
System.out.println(c.getTypeName()); // 결과 ch08.sec02.Keyboard
System.out.println(c.getPackage()); // 결과 package ch08.sec02
System.out.println(c.getPackage().getName()); // 결과 ch08.sec02
}
}
java.lang : Math 클래스
Math.abs(a) // a의 절대값
Math.max(a,b) // a와 b 중 더 큰 값
Math.min(a,b) // a와 b 중 더 작은 값
Math.pow(a, b) // a^b 값
Math.random() // 0.0이상 1.0미만의 난수
Math.PI // 파이 값
Math.sqrt(a) // a의 제곱근 값
Math.sin(a) // a의 sin 값
Math.cos(a) // a의 cos 값
Math.tan(a) // a의 tan 값
Math.exp(a) // e^a 값
Math.log(a) // a의 자연 로그 값
Math.log10(a) // a의 10의 로그 값
예시
더보기
public class MathDemo {
public static void main(String[] args) {
System.out.println(Math.pow(2,8)); // 결과 256.0
System.out.println(Math.random()); // 0.814927713946663
System.out.println(Math.sin(Math.PI)); // 1.2246467991473532E-16
System.out.println(Math.min(10,20)); // 결과 10
}
}
java.lang : StringBuffer, StringBuilder 클래스
String
- 값을 변경 시, 원래 값을 메모리에 가비지 값으로 두고 새로운 값을 메모리에 할당한다.
- 안 좋은 방법이지만, 편하니까 많이 쓴다. (요즘엔 메모리 여유가 많아서)
StirngBuilder, StringBuffer
- 값을 변경 시, 원래 값의 데이터를 지우고 해당 자리에 새로운 데이터를 입력한다.
- 가비지 값을 만들지 않아 메모리 관리가 더 안정적이다.
- 둘은 비슷하다.
예시
더보기
public class StringBuilderDemo {
public static void main(String[] args) {
//String 이용
String s = new String("hi");
System.out.println(s.hashCode()); // 결과 3329 (해시값, 위치값)
s = s+"!";
System.out.println(s.hashCode()); // 결과 103232 (해시값, 위치값)
// 해시값(주소값)이 다르다. 가비지 생성.
//StringBuilder 이용
StringBuilder sb = new StringBuilder("hi");
System.out.println(sb.hashCode()); // 결과 2055281021 (해시값, 위치값)
sb = sb.append("!");
System.out.println(sb.hashCode()); // 결과 2055281021 (해시값, 위치값)
// 해시값이 같다. 가비지를 생성하지 않는다.
}
}
java.lang : System 클래스
System.arraycopy() // 배열 복사
System.currentTimeMillis() // 현재 시각을 밀리초 단위로 반환
System.eixt() // 현재 실행 중인 JVM을 종료
System.gc() // 가비지 컬렉터 실행 요청
System.getenv(String name) // 지정된 환경 변수 값을 반환
System.getProperty(String key) // 주어진 key 값에 해당하는 시스템 특성을 반환
System.nanoTime() // 현재 시각을 나노초 단위로 반환
- 시스템을 많이 사용하면 메모리에 부하를 줄 수 있다.
- System.out.println()도 마찬가지.
- 웹 작업할 시에 syso은 많이 쓰면 서버가 다운될 수 있으니 consol을 이용한다.
예시
더보기
public class SystemDemo {
public static void main(String[] args) {
int[] src = new int[] {1,2,3,4,5,6};
int[] dst = {100,200,300,400,500,600,700};
System.arraycopy(src, 2, dst, 3, 4);
for (int i=0;i<dst.length;i++) {
System.out.println(dst[i]+ " ");
}
System.out.println();
System.out.println(System.currentTimeMillis()); // 결과 1692586633412
System.out.println(System.getenv("JAVA_HOME")); // 결과 null
System.out.println(System.getProperty("os.name")); // 결과 Windows 10
System.out.println(System.nanoTime()); // 결과 1380676247826300
}
}
Garbage 예시
더보기
class Garbage{
public int no;
Garbage(int no){
this.no = no;
System.out.printf("Garbage(%d) 생성\n", no);
}
@Override
protected void finalize() { // 끝날 때 호출
System.out.printf("Garbage(%d) 수거\n", no);
}
}
public class GarbageDemo {
public static void main(String[] args) {
for (int i=0;i<3;i++) {
new Garbage(i);
}
System.gc(); // LIFO 방식
}
}
java.lang : 포장 클래스
포장 클래스 (Wrapper class)
// 포장 클래스 객체
Byte
Short
Integer
Long
Float
Double
Character
Boolean
- 기본 자료형은 객체가 아니기 때문에, 객체 지향 특징 (캡술화, 상속, 다형성)을 사용할 수 없다.
- 포장 클래스 : 기본 자료형에 대해서 객체로 인식되도록 포장했다는 뜻.
- 박싱 : 기초 타입 데이터를 포장해 객체화하는 것
- 언박싱 : 박싱의 반대 과정
- 모든 기초 타입에 대응하는 포장 클래스가 있다.
박싱
// 박싱 // 포장 클래스의 생성자나 valueOf() 메소드 사용.
Integer bi = new Integer(10); // 포장 클래스의 생성자 사용
Integer.valueOf(10); // valueOf() 메소드 사용
// 자동 박싱 // 기초 타입 데이터를 포장 클래스 객체에 대입
Integer bi = 10;
- 포장 클래스 생성자 이용
- valueOf() 메소드 이용
- 자동 박싱 : 기초 타입 데이터를 포장 클래스 객체에 대입
언박싱
// 언박싱 // intValue 메소드 호출
int i = bi.intValue();
double d = bi.doubleValue();
// 자동 언박싱 // 포장 객체를 기초 타입 데이터에 대입, 기초 타입 데이터와 포장 객체 연산.
int i1 = bi;
int i2 = bi + 20;
- intValue() 메소드 이용
- 자동 언박싱 : 포장 객체를 기초 타입 데이터에 대입
- 자동 언박싱 : 기초 타입 데이터와 포장 객체 연산.
예시
더보기
public class WrapperDemo {
public static void main(String[] args) {
Integer bi1 = new Integer(10); // 박싱
int i1 = bi1.intValue();
int i = bi1; // 자동 언박싱
double d = bi1.doubleValue();
Integer bi2 = 20; // 자동 박싱
int i2 = bi2 + 20; // 자동 언박싱되면서 처리
String s1 = Double.toString(3.14);
Double pi = Double.parseDouble("3.14");
Integer bi3 = Integer.valueOf("11",16); // 16진수로 반환
}
}
java.util : Arrays 패키지
List asList (배열) // 배열을 리스트로 변환
int binarySearch(배열, 키) // 배열에서 키 값이 있는 인덱스를 반환
Arrays.copyOf(배열, 길이) // 원본 배열을 길이만큼 복사
Arrays.copyOfRange (배열, 시작, 끝) // 원본 배열을 지정한 영역만큼 복사
boolean equals (배열, 배열) // 두 배열의 동일 여부를 비교
Arrays.binarySearch(sa, "애플") // 이진트리 방법으로 "애플"이라는 단어 찾아서 인덱스 번호 반환
Arrays.fill (배열, 값) // 배열을 지정된 값으로 저장
Arrays.fill (배열, 시작, 끝, 값) // 배열의 지정된 영역에 지정된 값을 저장
Arrays.sort (배열) // 배열을 오름차순으로 정렬
예시
더보기
import java.util.Arrays;
public class ArraysDemo {
public static void main(String[]args) {
char[] a1 = {'J', 'a', 'v', 'a'};
char[] a2 = Arrays.copyOf(a1, a1.length); // 배열을 복사
System.out.println(a2); // 결과 Java
String[] sa = {"케이크","애플","도넛","바나나"};
print(sa); // 결과 케이크 애플 도넛 바나나
Arrays.sort(sa); // 가나다 순으로 배열을 정렬
print(sa); // 결과 도넛 바나나 애플 케이크
System.out.println(Arrays.binarySearch(sa, "애플")); // 결과 2
Arrays.fill(sa, 2,3,"기타"); // 배열 sa에서 인덱스 번호 2~3의 내용을 "기타"로 수정
print(sa); // 결과 도넛 바나나 기타 기타
}
static void print(Object[] oa) { // 배열 내용을 출력하도록 만드는 정적 메소드
for(Object o :oa)
System.out.println(o+" ");
System.out.println();
}
}
java.util : Date, Calendar 패키지
Date 패키지
//현재 날짜와 시간을 담는 메소드
Date now = new Date();
간단한 현재 날짜와 시간 정보 외에는 쓰지 않는다.
Calendar 패키지
// 현재 날짜와 시간을 나타내는 Calendar 객체를 생성
Calendar now = Calendar.getInstance();
// 메소드
get(now.YEAR); // Calendar 객체 now의 YEAR 값을 반환
after(시간) // 주어진 시간보다 뒤면 true 반환
before(시간) // 주어진 시간보다 앞이면 true 반환
compareTO(객체1 객체2) // 두 개의 Calendar 객체 비교
getFirstDayOfWeek() // 첫 날이 무슨 요일인지 반환
getTime() // Calendar 객체를 Date 객체로 변환
set(필드, 값) // 주어진 필드를 주어진 값으로 변경
set(년도, 달, 날짜) // 연, 월, 일 값을 변경
// 상수
AM, AM_PM, PM // 오전, 오후
DATE // 날짜
JANUARY, FEBRUARY ... // 1월, 2월 ...
SUNDAY, MONDAY ... // 일요일, 월요일 ...
MINUTE // 분
HOUR // 시간 (0~11)
HOUR_OF_DAY // 시간 (0~23)
MONTH // 월 (0~11)
DAY_OF_MONTH // 한 달 내에서의 날짜
WEEK_OF_YEAR // 일 년 내에서의 몇 주차
YEAR // 연도
- 달력 정보를 제공하는 클래스.
- 국가마다 달력을 효시하는 방식이 다르니 추상 클래스로 되어 있다.
예시
더보기
import java.util.Calendar;
import java.util.Date;
public class CalendarDemo {
public static void main(String[] args) {
Date now = new Date(); //결과 Tue Aug 22 09:57:29 KST 2023
System.out.println(now);
Calendar c = Calendar.getInstance();
System.out.println(c);
System.out.println(c.get(Calendar.YEAR)); // 결과 2023
System.out.println(c.get(Calendar.MONTH)+1); // 결과 8
System.out.println(c.get(Calendar.DAY_OF_MONTH)); //결과 22
System.out.println(c.get(Calendar.DAY_OF_WEEK)); //결과 3
System.out.println(c.get(Calendar.WEEK_OF_YEAR)); //결과 34
System.out.println(c.get(Calendar.WEEK_OF_MONTH)); //결과 4
System.out.println(c.get(Calendar.HOUR)); //결과 9
System.out.println(c.get(Calendar.HOUR_OF_DAY)); //결과 9
System.out.println(c.get(Calendar.MINUTE)); //결과 57
}
}
java.util : StringTokenizer 패키지
//생성자
StringTokenizer 객체 이름 = new StringTokenizer(문자열, "구분할 문자");
// 주어진 문자열로 분리시킨 StringTokenizer 객체 생성
객체.countTokens() // 남아 있는 토근의 개수를 int 형으로 반환
객체.hasMoreTokens() // 남아 있는 토큰이 있는지 여부 true, false 반환
객체.nextToken() // 다음 토크을 String으로 꺼내온다.
문자열을 토큰으로 분리하는데 사용
예시
더보기
import java.util.StringTokenizer;
public class StringTokenizerDemo {
public static void main(String[] args) {
String s = "of the people, by the people, for the people";
StringTokenizer st = new StringTokenizer(s, " ,");
System.out.println(st.countTokens()); // 결과 9
while(st.hasMoreTokens()) {
System.out.println("["+st.nextToken()+"]");
//결과 [of] [the] [people] [by] [the] [people] [for] [the] [people]
}
}
}
java.util : Random 패키지
// 생성자
Random r = new Random(); // 랜덤 객체 생성
r.nextInt(); // 0에서 1사이의 난수 발생
r.nextInt(10); // 0에서 9사이의 난수 발생
r.nextLong() // long 타입의 난수 발생
r.nextBoolean(); // true, false 중 랜덤 발생
r.nextDouble(); // 0.0이상 1.0미만의 double 타입 실수 난수 발생
r.nextFloat(); // 0.0이상 1.0미만의 float 타입 실수 난수 발생
r.nextGaussian(); // 평균, 표준편차가 0.0 및 1.0인 정규분포 난수 발생
r.setSeed(시드); // 시드 값 설정
예시
더보기
import java.util.Random;
public class RandomDemo {
public static void main(String[]args) {
Random r = new Random();
for(int i=0;i<5;i++) { // 난수 5개 생성
System.out.println(r.nextInt(100)+" "); // 0~99 사이의 난수 발생
}
}
}
java.util : SimpleDateFormat 패키지
SimpleDateFormat 클래스
// 생성자
SimpleDateFormat sdf1 = new SimpleDateFormat(패턴); // 패턴 정의
String s = sdf1.format(new Date()); // Date 객체를 패턴에 의해 생성해서 문자열 s에 담기
- 요일, 월, 일, 시간, 타임존, 연도 순서로 나타난다.
패턴 기호 | 설명 | 패턴 기호 | 설명 |
y | 연 | h | 시 (1~12) |
M | 월 | H | 시 (0~23) |
w | 월 구분 없는 주 | k | 시 (1~24) |
W | 주 | K | 시 (0~11) |
d | 일 | m | 분 |
D | 월 구분 없는 일 | s | 초 |
E | 요일 | S | 밀리초 |
a | 오전과 오후 | z | 타임존 |
예시
더보기
import java.text.*;
import java.util.*;
public class SimpleDateFormatDemo {
public static void main(String[] args) {
Date d = new Date();
SimpleDateFormat sdf1 = new SimpleDateFormat("E yyyy.MM.dd 'at' hh:mm:ss a z");
System.out.println(sdf1.format(d)); // 결과 화 2023.08.22 at 10:47:47 오전 KST
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
try {
d = sdf2.parse("2023-02-28");
} catch(ParseException e) {
}
System.out.println(sdf1.format(d)); // 결과 화 2023.02.28 at 12:00:00 오전 KST
Calendar calendar = Calendar.getInstance();
SimpleDateFormat sdf3 = new SimpleDateFormat("E yyyy.MM.dd",Locale.US);
System.out.println(sdf3.format(calendar.getTime())); // 결과 Tue 2023.08.22
SimpleDateFormat sdf4 = new SimpleDateFormat("E yyyy.MM.dd", Locale.KOREA);
System.out.println(sdf4.format(calendar.getTime())); // 결과 화 2023.08.22
}
}
java.util : MessageFormat 패키지
// 생성자
MessageFormat m = new MessageFormat ();
// 방법 1. 인덱스 번호 순서와 들어갈 값을 동시에 주기
MessageFormat.format("language:{1} version:{0}", version, java); // {인덱스 번호}에 따라 값이 들어감
// 방법2. 인덱스 번호 먼저 주고, 들어갈 값 data를 따로 주기
MessageFormat f = new MessageFormat("language:{0} version:{1}"); // 인덱스 번호 순서 먼저 주고
System.out.println(f.format(data));
예시
더보기
import java.text.MessageFormat;
public class MessageFormatDemo {
public static void main(String[]args) {
String java = "Java";
int version = 8;
String s = MessageFormat.format("language:{1} version:{0}", version, java);
System.out.println(s); // 결과 language:Java version:8
Object[] data = {java, version};
MessageFormat f = new MessageFormat("language:{0} version:{1}");
System.out.println(f.format(data)); // 결과 language:Java version:8
}
}
java.util : DecimalFormat 패키지
// 생성자
DecimalFormat df = new DecimalFormat("패턴");
// 생성된 포맷에 넣을 숫자
df.format(1234567.890)
- 10진수를 format하는 NumberFormat 클래스의 자식 클래스.
- 정수, 실수, 과학적 표기, 퍼센트 표시, 화폐 표시 등 다양한 format을 지원한다.
- 선행제로(leading zero), 후행 제로(trailing zero), 접두어, 접미어 등을 추가하거나 편집할 수 있다.
- 쉼표 등의 구분자로 숫자를 그룹핑할 수 있다.
패턴 기호 | 설명 | 사용 예 | 1234567.890 반환값 |
# | 10진수 | # | 12345678 |
0 | 선행 제로 10진수 | 0000000.00 | 01234567.89 |
. | 소수점 | #.000 | 1234567.890 |
, | 구분자 | #,###.## | 1,234,567.89 |
+ or - | 양수 또는 음수 | -#.0 | -1234567.9 |
E | 지수 | #.##E00 | 1.23E06 |
; | 패턴 구분 | +#.#;-#.# | +1234567.9 |
% | 백분율 | #.00% | 123456789.00% |
예시
더보기
import java.text.DecimalFormat;
public class DecimalFormatDemo {
public static void main(String[] args) {
DecimalFormat f1 = new DecimalFormat("#");
DecimalFormat f2 = new DecimalFormat("000000000.00");
DecimalFormat f3 = new DecimalFormat("#.000");
DecimalFormat f4 = new DecimalFormat("#,###.##");
DecimalFormat f5 = new DecimalFormat("-#.#");
DecimalFormat f6 = new DecimalFormat("#.##E00");
DecimalFormat f7 = new DecimalFormat("+#.#;-#.#");
DecimalFormat f8 = new DecimalFormat("#.00%");
System.out.println(f1.format(1234567.890));
// 결과 1234568
System.out.println(f2.format(1234567.890));
// 결과 001234567.89
System.out.println(f3.format(1234567.890));
// 결과 1234567.890
System.out.println(f4.format(1234567.890));
// 결과 1,234,567.89
System.out.println(f5.format(1234567.890));
// 결과 -1234567.9
System.out.println(f6.format(1234567.890));
// 결과 1.23E06
System.out.println(f7.format(-1234567.890));
// 결과 -1234567.9
System.out.println(f8.format(1234567.890));
// 결과 123456789.00%
}
}