회고록 블로그

[공부 필기] Java 기본 공부하기 (29) 본문

2. 프로그래밍 언어 공부/Java

[공부 필기] Java 기본 공부하기 (29)

김간장 2021. 12. 10. 23:01

공부 중인 강의 : 윤성우 선생님, 윤성우의 열혈 Java 프로그래밍 강의.

링크 : https://cafe.naver.com/cstudyjava

 

윤성우의 프로그래밍 스터디그룹 [C/... : 네이버 카페

윤성우의 스터디 공간입니다. C와 JAVA를 공부하시는 분들은 모두 들어오세요. ^^

cafe.naver.com

 

※ 강의 청강 중 필요한 내용만 필기함

※ 틀린 필기가 있을 수 있음..

 


1. Math 클래스

- 수학 관련 연산 기능을 제공하는 클래스

- 인스턴스 생성 불필요

   → 수학과 관련된 메소드가 static 메소드(클래스 메소드)로 정의되어 있음

         * 클래스 메소드(static 메소드)이기 때문에 인스턴스 생성하지 않고 [클래스명.메소드명]으로 접근함

 

 

2. 난수 생성 시 사용하는 클래스 : Random

- Random 클래스를 이용함

   → 예시

import java.util.Random;

public class Main {
	public static void main(String[] args) {
		Random rand = new Random();
		
		System.out.println(rand.nextDouble()); // 0-1 사이의 double형 난수 리턴
		System.out.println(rand.nextDouble());
		System.out.println(rand.nextInt(3)); // 0이상 3미만의 int형 난수 리턴
        System.out.println(rand.nextInt(5)); // 0이상 5미만의 int형 난수 리턴
	}
}

 

- 사실 컴퓨터는 진정한 난수를 뽑아내지 못함

   → 그렇기 때문에 컴퓨터로 뽑아내는 난수를 pseudo random이라고 함

   →컴퓨터로 뽑아낸 난수는 눈으로 보기에는 무작위로 생성된 것 같지만 사실은 패턴이 존재함

 

- 컴퓨터가 난수를 생성하는 방법은 'seed'를 기반으로 설계됨

   → seed 값이 전달되고 그 값을 기반으로 난수가 생성되는 것

   → 이 때문에 pseudo random(의사 난수)라고 함

   → 사실 진짜 난수가 되기 위해서는 seed 값 조차 존재하면 안됨

 

- 유의할 점

   → 난수 생성은 seed 값이 있어야 하고, 그 값을 기반으로 난수가 생성됨

   → 이때 프로그래머가 seed 값을 지정해줄 수 있음

        * seed 값을 고정시켜주면 몇 번, 몇 십번을 실행해봐도 결과는 동일함

import java.util.Random;

public class Main {
	public static void main(String[] args) {
		Random rand = new Random(3); // seed 값 고정(인자로 seed값 전달)
		
		System.out.println(rand.nextDouble()); 
		System.out.println(rand.nextDouble());
		System.out.println(rand.nextInt(3)); 
        System.out.println(rand.nextInt(5));
	}
}

[그림1] 8:50:32에 실행한 결과
[그림2] 8:51:35에 실행한 결과

- 일반적으로 Random 인스턴스 생성 시 인자를 전달하지 않으면 seed 값을 랜덤으로 정해줌

   → seed 값이 랜덤으로 정해진다고 했지만 사실 이 seed 값이 정해지는 것도 규칙이 있음

   → 그 규칙은 Random 클래스의 코드를 보면 됨

         * 코드를 보면 알 수 있듯이 난수의 seed 값을 뽑아내는 규칙은 시간(nonoTime)과 관련이 있음

[그림3] Random 클래스의 생성자

 

3. 문자열의 토큰

- 구분자를 기준으로 덩어리를 나누면 그 덩어리가 토큰이 됨

   e.g. 010-1234-5678 같은 경우 구분자는 '-'(마이너스 부호)이고 토큰은 '010, 1234, 5678' 총 3개가 됨

- 물론 문자열에도 토큰이 존재함

 

- 현업에서는 구분자를 기준으로 해서 토큰을 추출하는 경우가 종종 있음

- 그래서 구분자를 기준으로 문자열 토큰을 추출하는 방법을 알아볼 것임..

 

- 문자열의 토큰을 나누는 방법

   → StringTokenizer 클래스

   → 패키지는 java.util.StringTokenizer

- 예시

   → nextToken 메소드 : 다음 토큰 리턴

   → hasMoreTokens 메소드 : 리턴할 토큰이 더 남아 있는지 확인(있으면 true, 없으면 false)

...
		StringTokenizer st = new StringTokenizer("010-1234-5678", "-");
		// 첫번째 인자는 문자열, 두번째 인자는 구분자
		
		while(st.hasMoreTokens()) {
			System.out.println(st.nextToken());
		}
...

 

- 구분자가 무엇이냐에 따라 토큰의 개수는 달라짐

   → 만약 위의 예시 코드에서 "2"가 구분자라면 토큰은 2개일 것

- 코드의 안정성을 위해서 반환할 토큰이 남아있는지 확인한 후 (hasMoreTokens) 토큰을 반환(nextToken)하는게 좋음

 

- 구분자는 공백이 될 수도 있고, 아래와 같이 두 개 이상이 될 수도 있음

   → [그림4]에서 공백을 구분자에 넣지 않으면 [그림5]와 같이 결과가 출력돼버림

[그림4]
[그림5]

 

Comments