회고록 블로그
[공부 필기] Java 기본 공부하기 (29) 본문
공부 중인 강의 : 윤성우 선생님, 윤성우의 열혈 Java 프로그래밍 강의.
링크 : https://cafe.naver.com/cstudyjava
※ 강의 청강 중 필요한 내용만 필기함
※ 틀린 필기가 있을 수 있음..
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));
}
}
- 일반적으로 Random 인스턴스 생성 시 인자를 전달하지 않으면 seed 값을 랜덤으로 정해줌
→ seed 값이 랜덤으로 정해진다고 했지만 사실 이 seed 값이 정해지는 것도 규칙이 있음
→ 그 규칙은 Random 클래스의 코드를 보면 됨
* 코드를 보면 알 수 있듯이 난수의 seed 값을 뽑아내는 규칙은 시간(nonoTime)과 관련이 있음
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]와 같이 결과가 출력돼버림
'2. 프로그래밍 언어 공부 > Java' 카테고리의 다른 글
[공부 필기] Java 기본 공부하기 (31) (0) | 2021.12.14 |
---|---|
[공부 필기] Java 기본 공부하기 (30) (0) | 2021.12.12 |
[공부 필기] Java 기본 공부하기 (28) (0) | 2021.12.09 |
[공부 필기] Java 기본 공부하기 (27) (0) | 2021.12.06 |
[Java 공부하기] clone 메소드를 오버라이딩 해서 사용해야하는 이유에 대해서 찾아보기 (0) | 2021.12.06 |