위로 아래

java.lang 패키지

특징

  1. 자동으로 import 된다.
  2. JDK의 하위 폴더 lib 안의 src.zip을 압축 풀어보면 java.lang의 목록을 볼 수 있다. 

 

 목록

  1. Object : 최상위 클래스로 기본적인 메소드 제공
  2. String, StringBuffer, StringBuilder : 문자열 처리 메소드 제공
  3. Number, Integer, Long, Float, Double : 기본형 데이터를 객체화
  4. System : 시스템 정보나 입출력을 처리하는 메소드 제공
  5. Math : 각종 수학 함수 제공
  6. Thread : 스레드를 처리하는 메소드 제공
  7. Class : 실행 중에 클래스 정보를 제공

 

 


java.lang : Object 클래스

public String toString() : 객체의 문자 정보 반환
public boolean equals(Object obj) : 두 객체가 동일한지 여부 반환
public int hashcode() : 객체의 해시 코드를 반환
protected Object clone() : 객체의 사본을 생성
  1. 모든 자바 클래스의 가장 최상위 클래스.
  2. 모든 자바 클래스는 Object 클래스로부터 상속을 받는다. (자동으로 상속 받아 생략)
    1. 모든 클래스는 부모 클래스인 Object 클래스의 메소드를 사용할 수 있고, 재정의할 수도 있다.
    2. 모든 클래스는 Object 타입(형)으로 형변환할 수 있다.
  3. toString : https://sungmin1.tistory.com/124

 

 


java.lang : Class 클래스

forName()   
getName()   // 객체의 패키지 포함 이름 불러오기
getSimpleName()   // 객체의 이름만 불러오기
getTypeName()   // 객체의 패키지 포함 이름 불러오기
get.Package()   // 객체의 패키지 이름 불러오기
  1. 객체의 정보를 불러온다.
  2. public 생성자가 없다.
  3. 어떤 객체라도 생성하면 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

  1. 값을 변경 시, 원래 값을 메모리에 가비지 값으로 두고 새로운 값을 메모리에 할당한다.
  2. 안 좋은 방법이지만, 편하니까 많이 쓴다. (요즘엔 메모리 여유가 많아서)

StirngBuilder, StringBuffer

  1. 값을 변경 시, 원래 값의 데이터를 지우고 해당 자리에 새로운 데이터를 입력한다.
  2. 가비지 값을 만들지 않아 메모리 관리가 더 안정적이다.
  3. 둘은 비슷하다.

예시

더보기
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()   // 현재 시각을 나노초 단위로 반환
  1. 시스템을 많이 사용하면 메모리에 부하를 줄 수 있다.
  2. System.out.println()도 마찬가지.
  3. 웹 작업할 시에 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
  1. 기본 자료형은 객체가 아니기 때문에, 객체 지향 특징 (캡술화, 상속, 다형성)을 사용할 수 없다.
  2. 포장 클래스 : 기본 자료형에 대해서 객체로 인식되도록 포장했다는 뜻.
  3. 박싱 : 기초 타입 데이터를 포장해 객체화하는 것
  4. 언박싱 : 박싱의 반대 과정
  5. 모든 기초 타입에 대응하는 포장 클래스가 있다.

 

박싱

// 박싱   // 포장 클래스의 생성자나 valueOf() 메소드 사용.
Integer bi = new Integer(10);   // 포장 클래스의 생성자 사용
Integer.valueOf(10);   // valueOf() 메소드 사용

// 자동 박싱   // 기초 타입 데이터를 포장 클래스 객체에 대입
Integer bi = 10;
  1. 포장 클래스 생성자 이용
  2. valueOf() 메소드 이용
  3. 자동 박싱 : 기초 타입 데이터를 포장 클래스 객체에 대입

 

언박싱

// 언박싱   // intValue 메소드 호출
int i = bi.intValue();   
double d = bi.doubleValue();

// 자동 언박싱   // 포장 객체를 기초 타입 데이터에 대입, 기초 타입 데이터와 포장 객체 연산.
int i1 = bi;
int i2 = bi + 20;
  1. intValue() 메소드 이용
  2. 자동 언박싱 : 포장 객체를 기초 타입 데이터에 대입
  3. 자동 언박싱 : 기초 타입 데이터와 포장 객체 연산.

 

예시

더보기
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   // 연도
  1. 달력 정보를 제공하는 클래스. 
  2. 국가마다 달력을 효시하는 방식이 다르니 추상 클래스로 되어 있다.

 

예시

더보기
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에 담기
  1. 요일, 월, 일, 시간, 타임존, 연도 순서로 나타난다. 
패턴 기호 설명 패턴 기호 설명
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)

 

  1. 10진수를 format하는 NumberFormat 클래스의 자식 클래스.
  2. 정수, 실수, 과학적 표기, 퍼센트 표시, 화폐 표시 등 다양한 format을 지원한다.
  3. 선행제로(leading zero), 후행 제로(trailing zero), 접두어, 접미어 등을 추가하거나 편집할 수 있다.
  4. 쉼표 등의 구분자로 숫자를 그룹핑할 수 있다.
패턴 기호 설명 사용 예 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%
	}
}