본문 바로가기

Java 웹 개발

21.09.07 - 웹 개발 입문 20일차

Q. 글자수만큼 별표시를 할 수 있도록 처리해보세요

 

별표시 과정 (1)

package api.lang.string;

public class Test07_4 {
	public static void main(String[] args) {

		int size = 10;

//		String star = null;//초기값으로 사용할 수 없음
		String star = "";// empty string, 빈 문자열

		star += "*";
		star += "*";
		star += "*";
		star += "*";
		star += "*";
		star += "*";
		star += "*";
		star += "*";
		star += "*";
		star += "*";

		System.out.println(star);
	}
}

 

별표시 과정 (2)

package api.lang.string;

public class Test07_5 {
	public static void main(String[] args) {

		int size = 3;

//		String star = null;//초기값으로 사용할 수 없음
		String star = "";//empty string, 빈 문자열

		for(int i=0; i < size; i++) {
			star += "*";
		}

		System.out.println(star);
	}
}

단점->

크기가 커질 수록 소요 시간이 기하급수적으로 늘어난다
문자열 덧셈은 크기가 커질 수록 사용하지 말아야 한다
자바는 문자열을 처리할 때 새로 복사본을 만들어서 작업을 수행한다.
문자열은 한 번 정해지면 크기가 불변이기 때문

 

시간 측정 코드 : long a = System.currentTimeMillis();// 기준시(1970.01.01 자정)부터 지금까지 흘러온 밀리초(ms)

package api.lang.string;

public class Test07_6 {
	public static void main(String[] args) {
    
		int size = 50000;

//		String star = null;//초기값으로 사용할 수 없음
		String star = "";// empty string, 빈 문자열

		long a = System.currentTimeMillis();// 기준시(1970.01.01 자정)부터 지금까지 흘러온 밀리초(ms)

		for (int i = 0; i < size; i++) {
			star += "*";
		}

		long b = System.currentTimeMillis();
		long ms = b - a;

		System.out.println(ms + " ms");

//		System.out.println(star);
	}
}

걸린시간 : 2485 ms

 

 

StringBuffer 또는 StringBuilder를 이용하여 처리를 하면 카피 없이 빠르게 처리가 가능 = 문자열 덧셈 특화 도구

StringBuffer : thread-safe / 줄을 서서 추가 / 속도 느림 / 안정성 높음

StringBuilder : non thread-safe / 줄을 서지 않고 추가 / 속도 빠름 / 안정성 낮음

 

- StringBuffer

package api.lang.string;

public class Test07_7 {
	public static void main(String[] args) {

		int size = 50000;

		StringBuffer buffer = new StringBuffer();//비어있는 저장소 생성

		long a = System.currentTimeMillis();//기준시(1970.01.01 자정)부터 지금까지 흘러온 밀리초(ms)

		for(int i=0; i < size; i++) {
			buffer.append("*");//buffer에 *을 덧붙이겠다!
		}

		long b = System.currentTimeMillis();
		long ms = b - a;

		System.out.println(ms+" ms");

//		System.out.println(buffer.toString());
	}
}

- 걸린시간 : 15 ms

 

- StringBuilder

package api.lang.string;

public class Test07_8 {
	public static void main(String[] args) {

		int size = 50000;

		StringBuilder builder = new StringBuilder();//비어있는 저장소 생성

		long a = System.currentTimeMillis();//기준시(1970.01.01 자정)부터 지금까지 흘러온 밀리초(ms)

		for(int i=0; i < size; i++) {
			builder.append("*");
		}

		long b = System.currentTimeMillis();
		long ms = b - a;

		System.out.println(ms+" ms");

//		System.out.println(builder.toString());
	}
}

걸린시간 : 4 ms

 

 

 

 

Q. 검색엔진 만들기
우리 검색엔진에서는 다음과 같은 제목의 홈페이지를 가지고 있습니다
1.자바로 배우는 프로그래밍 생활
2.나의 자바 개발 노트
3.자바를 위한, 자바에 의한 슬기로운 개발 블로그
4.웹개발자가 꼭 알아야할 자바 기술 모음
5.파이썬과 자바로 구현하는 하이엔드 프로그래밍

자바라는 검색어를 입력하면 다음 순서대로 정렬되어야 합니다
3 1 2 5 4

정렬 기준은 크게 두 가지입니다
먼저 검색단어의 출현빈도가 높은 항목이 앞으로 와야하고
검색단어의 첫 등장위치가 작을수록 앞으로 와야합니다

위 정렬기준을 적용시켜 검색어에 따라 필터링 및 정렬된 결과를 보여주세요

 

 

1. 필터링 기술

package api.lang.string;

public class Test08_1 {
	public static void main(String[] args) {
		//입력
		String[] db = new String[] {
			"자바로 배우는 프로그래밍 생활",
			"나의 자바 개발 노트",
			"자바를 위한, 자바에 의한 슬기로운 개발 블로그",
			"웹개발자가 꼭 알아야할 자바 기술 모음",
			"파이썬과 자바로 구현하는 하이엔드 프로그래밍"
		};

		String keyword = "개발";

		//출력
		for(int i=0; i < db.length; i++) {
			if(db[i].contains(keyword)) {//검색어가 포함되어 있다면
				System.out.println(db[i]);
			}
		}
	}
}

검색어  '개발' 이 포함된거 찾기

나의 자바 개발 노트
자바를 위한, 자바에 의한 슬기로운 개발 블로그
웹개발자가 꼭 알아야할 자바 기술 모음

 

 

2. 결과 수 만큼 배열에 복사하기

package api.lang.string;

public class Test08_2 {
	public static void main(String[] args) {
		//입력
		String[] db = new String[] {
			"자바로 배우는 프로그래밍 생활",
			"나의 자바 개발 노트",
			"자바를 위한, 자바에 의한 슬기로운 개발 블로그",
			"웹개발자가 꼭 알아야할 자바 기술 모음",
			"파이썬과 자바로 구현하는 하이엔드 프로그래밍"
		};

		String keyword = "개발";

		int count = 0;
		for(int i=0; i < db.length; i++) {
			if(db[i].contains(keyword)) {//검색어가 포함되어 있다면
				count++;
			}
		}

		System.out.println("검색 결과는 총 "+count+"건입니다");

		//db에 들어있는 데이터 중 keyword가 포함된 데이터만 result로 복사가 이루어진다
		String[] result = new String[count];//결과 수 만큼 배열을 만들고
		int index = 0;
		for(int i=0; i < db.length; i++) {
			if(db[i].contains(keyword)) {
				result[index] = db[i];
				index++;
			}
		}

		//출력
		for(int i=0; i < result.length; i++) {
			System.out.println(result[i]);
		}

	}
}

검색 결과는 총 3건입니다
나의 자바 개발 노트
자바를 위한, 자바에 의한 슬기로운 개발 블로그
웹개발자가 꼭 알아야할 자바 기술 모음

 

 

3. 위 기능들을 메소드로 만들기

package api.lang.string;

public class SearchEngine {

	private String[] db = new String[] {
		"자바로 배우는 프로그래밍 생활",
		"나의 자바 개발 노트",
		"자바를 위한, 자바에 의한 슬기로운 개발 블로그",
		"웹개발자가 꼭 알아야할 자바 기술 모음",
		"파이썬과 자바로 구현하는 하이엔드 프로그래밍"
	};

	public String[] search(String keyword) {
		int count = 0;
		for(int i=0; i < db.length; i++) {
			if(db[i].contains(keyword)) {//검색어가 포함되어 있다면
				count++;
			}
		}

		//db에 들어있는 데이터 중 keyword가 포함된 데이터만 result로 복사가 이루어진다
		String[] result = new String[count];//결과 수 만큼 배열을 만들고
		int index = 0;
		for(int i=0; i < db.length; i++) {
			if(db[i].contains(keyword)) {
				result[index] = db[i];
				index++;
			}
		}

		return result;
	}
}

 

 

4. 검색 빈도 찾기

 

규칙 만들기 (1)

package api.lang.string;

public class Test08_4 {
	public static void main(String[] args) {
		// 문자열에 포함된 특정 단어의 출현 빈도를 측정
		// Q : example에 "공장"이 몇 번 나왔는지 세어보세요
		String example = "간장공장 공장장은 강공장장이고 된장공장 공장장은 공공장장이다";

		String word = "공장";

		int index = example.indexOf(word);
		System.out.println("index = " + index);

		index = example.indexOf(word, 3);
		System.out.println("index = " + index);

		index = example.indexOf(word, 6);
		System.out.println("index = " + index);

		index = example.indexOf(word, 12);
		System.out.println("index = " + index);

		index = example.indexOf(word, 20);
		System.out.println("index = " + index);

		index = example.indexOf(word, 23);
		System.out.println("index = " + index);

		index = example.indexOf(word, 29);
		System.out.println("index = " + index);

	}
}

 

규칙 만들기 (2)

package api.lang.string;

public class Test08_5 {
	public static void main(String[] args) {
		// 문자열에 포함된 특정 단어의 출현 빈도를 측정
		// Q : example에 "공장"이 몇 번 나왔는지 세어보세요
		String example = "간장공장 공장장은 강공장장이고 된장공장 공장장은 공공장장이다";

		String word = "공장";

		int index = example.indexOf(word, 0);
		System.out.println("index = " + index);

		index = example.indexOf(word, index + 1);
		System.out.println("index = " + index);

		index = example.indexOf(word, index + 1);
		System.out.println("index = " + index);

		index = example.indexOf(word, index + 1);
		System.out.println("index = " + index);

		index = example.indexOf(word, index + 1);
		System.out.println("index = " + index);

		index = example.indexOf(word, index + 1);
		System.out.println("index = " + index);

		index = example.indexOf(word, index + 1);
		System.out.println("index = " + index);

	}
}

 

규칙 만들기 (3)

package api.lang.string;

public class Test08_6 {
	public static void main(String[] args) {
		// 문자열에 포함된 특정 단어의 출현 빈도를 측정
		// Q : example에 "공장"이 몇 번 나왔는지 세어보세요
		String example = "간장공장 공장장은 강공장장이고 된장공장 공장장은 공공장장이다";

		String word = "공장";

		int index = 0;

		index = example.indexOf(word, index);
		System.out.println("index = " + index);
		index++;

		index = example.indexOf(word, index);
		System.out.println("index = " + index);
		index++;

		index = example.indexOf(word, index);
		System.out.println("index = " + index);
		index++;

		index = example.indexOf(word, index);
		System.out.println("index = " + index);
		index++;

		index = example.indexOf(word, index);
		System.out.println("index = " + index);
		index++;

		index = example.indexOf(word, index);
		System.out.println("index = " + index);
		index++;

		index = example.indexOf(word, index);
		System.out.println("index = " + index);
		index++;

	}
}

 

규칙 만들기 (4)

package api.lang.string;

public class Test08_7 {
	public static void main(String[] args) {
		// 문자열에 포함된 특정 단어의 출현 빈도를 측정
		// Q : example에 "공장"이 몇 번 나왔는지 세어보세요
		String example = "간장공장 공장장은 강공장장이고 된장공장 공장장은 공공장장이다";

		String word = "공장";

		int index = 0;

		while (true) {
			index = example.indexOf(word, index);
			System.out.println("index = " + index);

			if (index == -1) {// -1이면 없다는 소리
				break;
			}

			index++;
		}

	}
}

 

규칙 만들기 (5)

package api.lang.string;

public class Test08_8 {
	public static void main(String[] args) {
		// 문자열에 포함된 특정 단어의 출현 빈도를 측정
		// Q : example에 "공장"이 몇 번 나왔는지 세어보세요
		String example = "간장공장 공장장은 강공장장이고 된장공장 공장장은 공공장장이다";

		String word = "공장";

		int index = 0;
		int count = 0;

		while (true) {
			index = example.indexOf(word, index);
			System.out.println("index = " + index);

			if (index == -1) {// -1이면 없다는 소리
				break;
			}
			count++;
			index++;
		}

		System.out.println("count = " + count);

	}
}

 

5 . 위 SearchEngine 메소드에 빈도 측정 코드 추가하기

package api.lang.string;

public class SearchEngine {

	private String[] db = new String[] {
		"자바로 배우는 프로그래밍 생활",
		"나의 자바 개발 노트",
		"자바를 위한, 자바에 의한 슬기로운 개발 블로그",
		"웹개발자가 꼭 알아야할 자바 기술 모음",
		"파이썬과 자바로 구현하는 하이엔드 프로그래밍"
	};

	public String[] search(String keyword) {
		int count = 0;
		for(int i=0; i < db.length; i++) {
			if(db[i].contains(keyword)) {//검색어가 포함되어 있다면
				count++;
			}
		}
	

		//db에 들어있는 데이터 중 keyword가 포함된 데이터만 result로 복사가 이루어진다
		String[] result = new String[count];//결과 수 만큼 배열을 만들고
		int index = 0;
		for(int i=0; i < db.length; i++) {
			if(db[i].contains(keyword)) {
				result[index] = db[i];
				index++;
			}
		}

		return result;
	}
	
   // 빈도 측정 추가
	
	public int frequency(String example, String word) {
		int index = 0;
		int count = 0;

		while(true) {
			index = example.indexOf(word, index);

			if(index == -1) {//-1이면 없다는 소리
				break;
			}
			count++;
			index++;
		}

		return count;
	}

}

 

6. 필터링과 빈도측정을 결합

package api.lang.string;

public class Test08_10 {
	public static void main(String[] args) {
		
		SearchEngine engine = new SearchEngine();

		String keyword = "개발";

		String[] result = engine.search(keyword);

		for (int i = 0; i < result.length; i++) {
			System.out.print("[빈도 : " + engine.frequency(result[i], keyword) + "] ");
			System.out.print("[시작 : " + result[i].indexOf(keyword) + "]");
			System.out.println(result[i]);
		}
	}
}

->

[빈도 : 1] [시작 : 6]나의 자바 개발 노트
[빈도 : 1] [시작 : 20]자바를 위한, 자바에 의한 슬기로운 개발 블로그
[빈도 : 1] [시작 : 1]웹개발자가 꼭 알아야할 자바 기술 모음

 

 

7. 마지막 정렬 코드 추가하기

package api.lang.string;

public class Test08_11 {
	public static void main(String[] args) {
		
		SearchEngine engine = new SearchEngine();

		String keyword = "자바";

		String[] result = engine.search(keyword);

		// 처리 : 버블정렬
		for (int h = result.length - 1; h > 0; h--) {// 마지막 위치부터 1까지
			for (int k = 0; k < h; k++) {// h회차 반복문
				int freq1 = engine.frequency(result[k], keyword);// k위치의 빈도
				int index1 = result[k].indexOf(keyword);// k위치의 시작
				int freq2 = engine.frequency(result[k + 1], keyword);// k+1위치의 빈도
				int index2 = result[k + 1].indexOf(keyword);// k+1위치의 시작

				// 빈도가 낮은 경우에 뒤로 이동, 빈도가 같으면 위치가 큰 것을 뒤로 이동
				// if(빈도가 낮거나 또는 빈도가 같으면서 위치가 크다면) {
				if (freq1 < freq2 || (freq1 == freq2 && index1 > index2)) {
					String temp = result[k];
					result[k] = result[k + 1];
					result[k + 1] = temp;
				}
			}
		}

		for (int i = 0; i < result.length; i++) {
//			System.out.print("[빈도 : "+engine.frequency(result[i], keyword)+"] ");
//			System.out.print("[시작 : "+result[i].indexOf(keyword)+"]");
			System.out.println(result[i]);
		}
	}
}

- 정답 

자바를 위한, 자바에 의한 슬기로운 개발 블로그
자바로 배우는 프로그래밍 생활
나의 자바 개발 노트
파이썬과 자바로 구현하는 하이엔드 프로그래밍
웹개발자가 꼭 알아야할 자바 기술 모음

 

 

 

라이브러리 - 문자열 기타 기능들

1. 문자열 분해 - split()

2. 원시형 자료형과의 변환(ex : int <----> String)

package api.lang.string;

public class Test09 {
	public static void main(String[] args) {

		// 1. 문자열 분해 - split()
		String colors = "빨강/주황/노랑/초록/파랑/남색/보라";

		String[] colorList = colors.split("/");// 슬래시(/)를 구분자(delimiter)로 하여 문자열 분해

		System.out.println("색상은 총 " + colorList.length + "개 있습니다");
		for (int i = 0; i < colorList.length; i++) {
			System.out.println(colorList[i]);
		}

		// 2. 원시형 자료형과의 변환(ex : int <----> String)
		int a = 10;
		// String b = a;//에러
		// String b = (String)a;//에러
		// String b = "" + a;//편법 : 문자열 덧셈은 결과가 문자열
		String b = String.valueOf(a);
		System.out.println("b = " + b);

		String c = "12345";
		// int d = c;
		// int d = (int)c;
		int d = Integer.parseInt(c);// 변환 명령(String ---> int)
		System.out.println("d = " + d);

	}
}

- 정답

색상은 총 7개 있습니다
빨강
주황
노랑
초록
파랑
남색
보라
b = 10
d = 12345

 

 

 

정규표현식 - 필요성

정규 표현식(REGEX, REGular EXpression)
= 문자열을 검사하는 식
ex : 올바른 휴대폰 번호인지 검사(01X-XXXX-XXXX)

package api.regex;

public class Test01 {
	public static void main(String[] args) {
		// 정규 표현식(REGEX, REGular EXpression)
		// = 문자열을 검사하는 식
		// = ex : 올바른 휴대폰 번호인지 검사(01X-XXXX-XXXX)

		String phoneNumber = "010-1212-3434";

		if (phoneNumber.length() == 13) {
			boolean check1 = phoneNumber.charAt(0) == '0';
			boolean check2 = phoneNumber.charAt(1) == '1';
			boolean check3 = phoneNumber.charAt(2) == '0';
			boolean check4 = phoneNumber.charAt(3) == '-';
			boolean check5 = phoneNumber.charAt(4) >= '0' && phoneNumber.charAt(4) <= '9';
			boolean check6 = phoneNumber.charAt(5) >= '0' && phoneNumber.charAt(5) <= '9';
			boolean check7 = phoneNumber.charAt(6) >= '0' && phoneNumber.charAt(6) <= '9';
			boolean check8 = phoneNumber.charAt(7) >= '0' && phoneNumber.charAt(7) <= '9';
			boolean check9 = phoneNumber.charAt(8) == '-';
			boolean check10 = phoneNumber.charAt(9) >= '0' && phoneNumber.charAt(9) <= '9';
			boolean check11 = phoneNumber.charAt(10) >= '0' && phoneNumber.charAt(10) <= '9';
			boolean check12 = phoneNumber.charAt(11) >= '0' && phoneNumber.charAt(11) <= '9';
			boolean check13 = phoneNumber.charAt(12) >= '0' && phoneNumber.charAt(12) <= '9';

			if (check1 && check2 && check3 && check4 && check5 && check6 && check7 && check8 && check9 && check10
					&& check11 && check12 && check13) {
				System.out.println("올바른 전화번호 형식입니다");
			} else {
				System.out.println("잘못된 전화번호 형식입니다");
			}
		} else {
			System.out.println("잘못된 전화번호 형식입니다");
		}

	}
}

-> 너무 노가다 방식이다

이런 방식 사용 X

 

 

정규표현식 사용!

(모든 언어에서 사용 가능)

https://regexper.com/  접속

 

^ : 시작

& : 끝

[0123456789] : 0 1 2 3 4 5 6 7 8 9 중 하나

[0-9] : 0부터 9까지 중 하나

(010\011) : 010 또는 011 중 하나

[0-9]{4} : 0부터 9까지 중 하나 X 4

 

예시

^010-[0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789][0123456789][0123456789]$

package api.regex;

import java.util.regex.Pattern;

public class Test02 {
	public static void main(String[] args) {
		String phoneNumber = "010-1212-3434";
//		String regex = "^010-[0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789][0123456789][0123456789]$";
//		String regex = "^010-[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]$";
//		String regex = "^010-[0-9]{4}-[0-9]{4}$";
		String regex = "^010(-[0-9]{4}){2}$";
		boolean result = Pattern.matches(regex, phoneNumber);
		System.out.println("result = " + result);
	}
}

 

 

 

Q. 사용자가 입력한 이름이 올바른 형식인지 검사하여 출력

package api.regex;

import java.util.regex.Pattern;

public class Test03 {
	public static void main(String[] args) {
		String name = "홍길동";
		String regex = "^[가-힣]{2,7}$";
		boolean result = Pattern.matches(regex, name);
		if (result) {
			System.out.println("올바른 형식의 이름입니다");
		} else {
			System.out.println("이름은 한글 2~7자 이내로 작성하세요");
		}

	}
}

 

 

 

Q. 사용자가 입력한 이메일이 올바른 형식인지 검사하여 출력
이메일은 @ 기준으로 앞부분은 네이버 아이디와 동일한 형식으로 사용하며
@ 뒷부분은 8~10자리의 영문 도메인 작성 후 다음 중 .com .net .co.kr 하나로 끝나야한다

package api.regex;

import java.util.regex.Pattern;

public class Test04 {
	public static void main(String[] args) {
		String id = "asdasd@asdasddd.co.kr";
		String regex = "^[a-z][a-z\\d-9-_]{4,19}@[a-z]{8,10}(\\.com|\\.net|\\.co\\.kr)$";// 첫 글자는 반드시 영문 소문자
		boolean result = Pattern.matches(regex, id);
		if (result) {
			System.out.println("멋진 아이디네요!");
		} else {
			System.out.println("앞 5~20자, 뒤 8~10자리 이내에 이름만 사용 가능합니다");
		}

	}
}

 

 

 

 

Q. 날짜는 1900-01-01 부터 2099-12-31 까지의 범위 내에서만 설정이 가능합니다
1. 모든 달의 날짜를 31일이라고 가정하고 식을 작성
2. 월별로 다른 날짜를 적용시켜서 식을 작성
3. 윤년을 고려하려면 어떻게 되는지 식을 작성

package api.regex;

import java.util.regex.Pattern;

public class Test05 {
	public static void main(String[] args) {

		String birth = "2020-02-29";

//		1. 모든 달이 31일이라고 가정한 경우의 정규표현식
//		String regex = "^(19[0-9]{2}|20[0-9]{2})-(0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-9]|3[0-1])$";

//		2. 2월은 28일까지라고 정한 경우의 정규표현식
//		String regex = "^(19[0-9]{2}|20[0-9]{2})-(02-(0[1-9]|1[0-9]|2[0-8])|(0[469]|11)-(0[1-9]|1[0-9]|2[0-9]|30)|(0[13578]|1[02])-(0[1-9]|1[0-9]|2[0-9]|3[0-1]))$";

//		3. 프로그래밍 코드를 이용하여 윤년 여부를 계산한 뒤 2월에 적용시킨 정규표현식
		int year = Integer.parseInt(birth.substring(0, 4));
		boolean isYunYear = year % 400 == 0 || year % 100 != 0 && year % 4 == 0;
		String regex;
		if (isYunYear) {
			regex = "^(19[0-9]{2}|20[0-9]{2})-(02-(0[1-9]|1[0-9]|2[0-9])|(0[469]|11)-(0[1-9]|1[0-9]|2[0-9]|30)|(0[13578]|1[02])-(0[1-9]|1[0-9]|2[0-9]|3[0-1]))$";
		} else {
			regex = "^(19[0-9]{2}|20[0-9]{2})-(02-(0[1-9]|1[0-9]|2[0-8])|(0[469]|11)-(0[1-9]|1[0-9]|2[0-9]|30)|(0[13578]|1[02])-(0[1-9]|1[0-9]|2[0-9]|3[0-1]))$";
		}

		if (Pattern.matches(regex, birth)) {
			System.out.println("생년월일 설정이 완료되었습니다.");
		} else {
			System.out.println("잘못된 생년월일 형식입니다.");
		}

	}
}

 

 

 

라이브러리 - Math, System 클래스

Math 클래스
= 생성자가 없는 클래스
Math 클래스는 다음 두 가지 경우 중 1번에 해당한다
1. 모든 기능을 등록해두고 편하게 호출하려는 의도가 있는 경우(구성요소가 모두 static)
2. 미리 객체를 만들어두고 그 객체만 사용하게 하려는 경우(싱글톤 방식. 구성요소가 static이 아님)

package api.lang.etc;

public class Test01 {
	public static void main(String[] args) {

		// Math m = new Math(); X
		System.out.println(Math.PI);// 원주율
		System.out.println(Math.E);// 자연지수 e

		int a = 10;
		int b = 20;

		System.out.println(Math.abs(a - b));// abs : 절대값 계산 메소드
		System.out.println(Math.max(a, b));// max : 최대값 계산 메소드
		System.out.println(Math.min(a, b));// min : 최소값 계산 메소드

		double c = 1.5;
		System.out.println(Math.ceil(c));// 올림
		System.out.println(Math.round(c));// 반올림
		System.out.println(Math.floor(c));// 버림

		System.out.println(Math.random());// 랜덤

		int number = 8;
		System.out.println(Math.sqrt(number));

		System.out.println(Math.pow(2, 10));// 2의 10제곱

	}
}

 

 

System 클래스
생성자가 없는 클래스이며 편리하게 이용하도록 전 구성요소가 static 처리되어 있다
운영체제(OS)의 정보를 이용할 수 있도록 구성된 클래스

package api.lang.etc;

public class Test02 {
	public static void main(String[] args) {


		// 통로
		// = System.out 은 표준 출력 통로 객체
		// = System.in 은 표준 입력 통로 객체
		// = System.err 는 표준 오류 통로 객체
		System.out.println("테스트");
		System.err.println("테스트");

		// 현재시각 구하기(ms)
		// = 기준시(1970년 1월 1일 0시 0분 0초)로부터 지금까지 흘러온 밀리초를 반환
		// = 시간차를 구할 때 사용(소요시간)
		long time = System.currentTimeMillis();
		System.out.println("time = " + time);

		// 운영체제의 정보를 읽어올 수 있다(ex : 환경변수)
		// = System.getProperties()는 등록된 모든 정보를 반환
		// = System.getProperty("이름")은 해당 이름에 저장된 정보를 반환

		System.out.println(System.getProperties());

		System.out.println(System.getProperty("user.country"));
		String country = System.getProperty("user.country");
		switch (country) {
		case "KR":
			System.out.println("만나서 반가워요~");
			break;
		case "US":
			System.out.println("Good to see you~");
			break;
		}

		System.out.println(System.getProperty("os.name"));
		String os = System.getProperty("os.name");
		if (os.startsWith("Windows")) {
			System.out.println("윈도우에서 실행하셨네요?");
		} else {
			System.out.println("윈도우가 아니네요?");
		}

		System.out.println(System.getProperty("java.specification.version"));
		double javaVersion = Double.parseDouble(System.getProperty("java.specification.version"));
		if (javaVersion < 9) {
			System.out.println("자바 9 이상으로 업그레이드 하세요!");
		}

		// 프로그램 종료
		// 운영체제는 0이 반환되면 정상 종료되었다고 판단. 0이 아닌 숫자가 반환되면 뭔가 이상하게 끝났다고 판단
		System.exit(0);// 프로그램을 종료하면서 시스템에 0을 반환하라~
		System.out.println("메세지!");

	}
}