๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“ฐ ์–ธ์–ด/Java

์ž๋ฐ”์—์„œ ์œ ์šฉํ•œ ํด๋ž˜์Šค๋“ค

<Java์˜ ์ •์„ ๊ฐœ์ •3ํŒ>์„ ๊ธฐ๋ณธ์œผ๋กœ ๋ฐฐ์šด ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

 

๋ชฉ์ฐจ

  • java.util.Objects ํด๋ž˜์Šค
  • java.util.Random ํด๋ž˜์Šค
  • ์ •๊ทœ์‹(Regular Expression) - java.util.regex ํด๋ž˜์Šค
  • java.util.Scanner ํด๋ž˜์Šค
  • java.util.StringTokenizer ํด๋ž˜์Šค
  • java.math.BigInteger ํด๋ž˜์Šค

 

1. java.util.Objects ํด๋ž˜์Šค

  • Objectํด๋ž˜์Šค์˜ ๋ณด์กฐ ํด๋ž˜์Šค
  • ๊ฐ์ฒด ๋น„๊ต, hashcode์ƒ์„ฑ, null์—ฌ๋ถ€, ๊ฐ์ฒด ๋ฌธ์ž์—ด ๋ฆฌํ„ด ๋“ฑ์˜ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ •์  ๋ฉ”์†Œ๋“œ๋“ค๋กœ ๊ตฌ์„ฑ๋จ
๋ฉ”์†Œ๋“œ ๋ฆฌํ„ด ํƒ€์ž… ์„ค๋ช…
compare(T a, T b, Comparator <T> c) int ๋‘ ๊ฐ์ฒด a์™€ b๋ฅผ Comparator๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋น„๊ต
deepEquals(Object a, Object b) boolean ๋‘ ๊ฐ์ฒด์˜ ๊นŠ์€ ๋น„๊ต
equals(Object a, Object b) boolean ๋‘ ๊ฐ์ฒด์˜ ์–•์€ ๋น„๊ต
hash(Object values) int ๋งค๊ฐœ๊ฐ’์ด ์ €์žฅ๋œ ๋ฐฐ์—ด์˜ ํ•ด์‹œ ์ฝ”๋“œ ์ƒ์„ฑ
hash(Object o) int ๊ฐ์ฒด์˜ ํ•ด์‹œ์ฝ”๋“œ ์ƒ์„ฑ
isNull(Object obj) boolean ๊ฐ์ฒด๊ฐ€ null์ธ์ง€ ์กฐ์‚ฌ
nonNull(Object obj) boolean ๊ฐ์ฒด๊ฐ€ null์ด ์•„๋‹Œ์ง€ ์กฐ์‚ฌ
requireNonNull(T obj)
requireNonNull(T obj, String message)
requireNonNull(T obj, Supplier <String> messageSupplier)
T ๊ฐ์ฒด๊ฐ€ null์ธ ๊ฒฝ์šฐ ์˜ˆ์™ธ ๋ฐœ์ƒ
,,,(์ฃผ์–ด์ง„ ์˜ˆ์™ธ ๋ฉ”์‹œ์ง€ ํฌํ•จ)
,,,(๋žŒ๋‹ค์‹์ด ๋งŒ๋“  ์˜ˆ์™ธ ๋ฉ”์‹œ์ง€ ํฌํ•จ)
toString(Object o)
toString(Object o, String nullDefault)
String ๊ฐ์ฒด์˜ toString() ๋ฆฌํ„ด๊ฐ’ ๋ฆฌํ„ด
...(์ฒซ ๋ฒˆ์งธ ๋งค๊ฐœ๊ฐ’์ด null์ผ ๊ฒฝ์šฐ ๋‘ ๋ฒˆ์จฐ ๋งค๊ฐœ๊ฐ’ ๋ฆฌํ„ด)

 


2. java.util.Random ํด๋ž˜์Šค

๋‚œ์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํด๋ž˜์Šค๋กœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค.

๋ฉ”์†Œ๋“œ ์„ค๋ช…
Random() System.ํ˜„์žฌ์‹œ๊ฐ„์„ ์ข…์ž๊ฐ’(seed)์œผ๋กœ ์ด์šฉํ•˜๋Š” Random์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑ
Random(long seed) ๋งค๊ฐœ๋ณ€์ˆ˜seed๋ฅผ ์ข…์ž๊ฐ’์œผ๋กœ ํ•˜๋Š” Random์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑ
boolean nextBoolean() booleanํ˜• ๋‚œ์ˆ˜ ๋ฐ˜ํ™˜
void nextBytes(byte[] bytes) bytes๋ฐฐ์—ด์— byteํƒ€์ž…์˜ ๋‚œ์ˆ˜๋ฅผ ์ฑ„์›Œ์„œ ๋ฐ˜ํ™˜
double nextDouble doubleํƒ€์ž…์˜ ๋‚œ์ˆ˜ ๋ฐ˜ํ™˜ (0.0 <= x < 1.0)
float nextFloat()  floatํƒ€์ž…์˜ ๋‚œ์ˆ˜ ๋ฐ˜ํ™˜ (0.0 <= x < 1.0)
double nextGaussian() ํ‰๊ท ์€ 0.0์ด๊ณ  ํ‘œ์ค€ํŽธ์ฐจ๋Š” 1.0์ธ Gaussian๋ถ„ํฌ์— ๋”ฐ๋ฅธ doubleํ˜•์˜ ๋‚œ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜
int nextInt() intํ˜• ๋‚œ์ˆ˜ ๋ฐ˜ํ™˜ 
int nextInt(int n) 0์ด์ƒ n๋ฏธ๋งŒ์˜ ๋ฒ”์œ„๋‚ด์— ์žˆ๋Š” intํ˜• ๋‚œ์ˆ˜ ๋ฐ˜ํ™˜ 
long nextLong()  longํ˜• ๋‚œ์ˆ˜ ๋ฐ˜ํ™˜ 
void setSeed(long seed) ์ข…์ž๊ฐ’์„ ์ฃผ์–ด์ง„ ๊ฐ’(seed)์œผ๋กœ ๋ณ€๊ฒฝ

 


3. ์ •๊ทœ์‹(Regular Expression) - java.util.regex ํด๋ž˜์Šค

  • ์ •๊ทœ์‹(Regular Expression) : ํŠน์ •ํ•œ ๊ทœ์น™์„ ๊ฐ€์ง„ ๋ฌธ์ž์—ด์˜ ์ง‘ํ•ฉ์„ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์“ฐ์ด๋Š” ํ˜•์‹์–ธ์–ด
  • ์ž…๋ ฅ๊ฐ’์„ ์ •ํ•ด์ง„ ํ˜•์‹์— ๋งž๋Š”์ง€ ๊ฒ€์ฆํ•ด์•ผ ํ•  ๋•Œ์—๋Š” ์ •๊ทœํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ •๊ทœํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ• ๋•Œ์—๋Š” java.util.regex ํŒจํ‚ค์ง€ ์•ˆ์— ์žˆ๋Š” Patternํด๋ž˜์Šค์™€ Matcherํด๋ž˜์Šค๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.
  1. Patternํด๋ž˜์Šค : ์ •๊ทœ์‹์„ ์ •์˜ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋จ
  2. Matcherํด๋ž˜์Šค : pattern์„ ๋ฐ์ดํ„ฐ์™€ ๋น„๊ตํ•˜๋Š” ์—ญํ• 

 

3-1) ์ •๊ทœ์‹์„ ์ •์˜ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๊ตํ•˜๋Š” ๊ณผ์ •

  1. ์ •๊ทœ์‹์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ Patternํด๋ž˜์Šค์˜ static๋ฉ”์„œ๋“œ์ธ Pattern compile(String regex)์„ ํ˜ธ์ถœํ•˜์—ฌ Pattern์ธ์Šคํ„ด์Šค๋ฅผ ์–ป๋Š”๋‹ค.
  2. ์ •๊ทœ์‹์œผ๋กœ ๋น„๊ตํ•  ๋Œ€์ƒ์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ Patternํด๋ž˜์Šค์˜ Matcher matcher(CharSequence input)์„ ํ˜ธ์ถœํ•ด์„œ Matcher์ธ์Šคํ„ด์Šค๋ฅผ ์–ป๋Š”๋‹ค.
  3. Matcher์ธ์Šคํ„ด์Šค์— boolean matches()๋ฅผ ํ˜ธ์ถœํ•ด์„œ ์ •๊ทœ์‹์— ๋ถ€ํ•ฉํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

 

- ์ •๊ทœ์‹ ์˜ˆ์ œ

import java.util.regex.*;  //Pattern๊ณผ Matcher๊ฐ€ ์†ํ•œ ํŒจํ‚ค์ง€

class RegularEx1{
    public static void main(String[] args){
        String[] data = {"bat", "baby", "bonus", "car", "combat"};
        
        pattern p = Pattern.compile("c[a-z]*"); //ํŒจํ„ด ์ง€์ • : c๋กœ ์‹œ์ž‘ํ•˜๋Š” ์†Œ๋ฌธ์ž์˜๋‹จ์–ด
        
        for(int i=0; i < data.length; i++){
            Matcher m = p.matcher(data[i]);
            if(m.matches())
                System.out.print(data[i] + ",");
        }
    }
}

 


4. java.util.Scanner ํด๋ž˜์Šค

  • ์ฝ์€ ๋ฐ”์ดํŠธ๋ฅผ ๋‹ค์–‘ํ•œ ํƒ€์ž…(๋ฌธ์ž, ์ •์ˆ˜, ์‹ค์ˆ˜, ๋ถˆ๋ฆฐ, ๋ฌธ์ž์—ด ๋“ฑ)์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฆฌํ„ดํ•˜๋Š” ํด๋ž˜์Šค
  • Scanner๋Š” ์ž…๋ ฅ๋˜๋Š” ํ‚ค ๊ฐ’์„ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜๋Š” ํ† ํฐ ๋‹จ์œ„๋กœ ์ฝ๋Š”๋‹ค.
  • ๊ณต๋ฐฑ ๋ฌธ์ž : ' \t ',' \f ',' \r ',' ',' \n '
  • ๊ฐœ๋ฐœ์ž๊ฐ€ ์›ํ•˜๋Š” ํƒ€์ž… ๊ฐ’์œผ๋กœ ์‰ฝ๊ฒŒ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค.
  • ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์‹œํ‚ค๊ณ  ์ฝ˜์†”์ฐฝ์— ๋ฌธ์ž์—ด์„ ์ž…๋ ฅํ•˜๊ณ  'Enter'๋ฅผ ๋ˆ„๋ฅด๋ฉด ๋œ๋‹ค.
๋ฉ”์†Œ๋“œ ์„ค๋ช…
String next()  ๋‹ค์Œ ํ† ํฐ์„ ๋ฌธ์ž์—ด๋กœ ๋ฆฌํ„ด 
byte nextByte() ๋‹ค์Œ ํ† ํฐ์„ byte ํƒ€์ž…์œผ๋กœ ๋ฆฌํ„ด 
short nextShort()  ๋‹ค์Œ ํ† ํฐ์„ short ํƒ€์ž…์œผ๋กœ ๋ฆฌํ„ด 
int nextInt()  ๋‹ค์Œ ํ† ํฐ์„ int ํƒ€์ž…์œผ๋กœ ๋ฆฌํ„ด
long nextLong()  ๋‹ค์Œ ํ† ํฐ์„ long ํƒ€์ž…์œผ๋กœ ๋ฆฌํ„ด 
float nextFloat()  ๋‹ค์Œ ํ† ํฐ์„ float ํƒ€์ž…์œผ๋กœ ๋ฆฌํ„ด 
double nextDouble()  ๋‹ค์Œ ํ† ํฐ์„ double ํƒ€์ž…์œผ๋กœ ๋ฆฌํ„ด 
String nextLine()  ' \n '์„ ํฌํ•จํ•˜๋Š” ํ•œ ๋ผ์ธ์„ ์ฝ๊ณ  ' \n '์„ ๋ฒ„๋ฆฐ ๋‚˜๋จธ์ง€๋งŒ ๋ฆฌํ„ด 
void close()  Scanner์˜ ์‚ฌ์šฉ ์ข…๋ฃŒ 
boolean hasNext()  ํ˜„์žฌ ์ž…๋ ฅ๋œ ํ† ํฐ์ด ์žˆ์œผ๋ฉด true, ์•„๋‹ˆ๋ฉด ์ƒˆ๋กœ์šด ์ž…๋ ฅ์ด ๋“ค์–ด์˜ฌ ๋•Œ๊นŒ์ง€ ๋ฌดํ•œ์ • ๊ธฐ๋‹ค๋ ค์„œ, ์ƒˆ๋กœ์šด ์ž…๋ ฅ์ด ๋“ค์–ด์˜ค๋ฉด ๊ทธ ๋•Œ true ๋ฆฌํ„ด. ctrl + z ํ‚ค๊ฐ€ ์ž…๋ ฅ๋˜๋ฉด ์ž…๋ ฅ ๋์ด๋ฏ€๋กœ false ๋ฆฌํ„ด 

 

- Scannerํด๋ž˜์Šค ์‚ฌ์šฉ ์˜ˆ์ œ

import java.util.Scanner;
 
Scanner scan = new Scanner(System.in); // Scanner ๊ฐ์ฒด 

 


5. java.util.StringTokenizer ํด๋ž˜์Šค

๋ฉ”์†Œ๋“œ ์„ค๋ช…
StringTokenizer(String str, String delim)
StringTokenizer(String str, String delim,
boolean returnDelims)
๋ฌธ์ž์—ด(str)์„ ์ง€์ •๋œ ๊ตฌ๋ถ„์ž(delim)๋กœ ๋‚˜๋ˆ„๋Š” StringTokenizer๋ฅผ ์ƒ์„ฑ(๊ตฌ๋ถ„์ž๋Š” ํ† ํฐ์œผ๋กœ ๊ฐ„์ฃผํ•˜์ง€ ์•Š์Œ)
,,,(returnDelims์˜ ๊ฐ’์„ true๋กœ ํ•˜๋ฉด ๊ตฌ๋ถ„์ž๋„ ํ† ํฐ์œผ๋กœ ๊ฐ„์ฃผํ•œ๋‹ค.)
int countTokens() ์ „์ฒด ํ† ํฐ์˜ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜
boolean hasMoreTokens()  ํ† ํฐ์ด ๋‚จ์•„์žˆ๋Š”์ง€ ํ™•์ธ 
String nextToken()  ๋‹ค์Œ ํ† ํฐ ๋ฐ˜ํ™˜

 

5-1) ๋ฌธ์ž์—ด์„ ๋‚˜๋ˆ„๋Š” ๋ฐฉ๋ฒ•๋“ค

  String์˜ split   ๋˜๋Š”
Scanner์˜ useDelimiter
StringTokenizer
๊ณตํ†ต์  ๊ธด ๋ฌธ์ž์—ด์„ ๊ตฌ๋ถ„์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ token์ด๋ผ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฌธ์ž์—ด๋กœ ์ž˜๋ผ๋‚ด๋Š” ๋ฐ ์‚ฌ์šฉ๋จ
์ฐจ์ด์  ๊ตฌ๋ถ„์ž๋กœ ์ •๊ทœ์‹ ํ‘œํ˜„์„ ์‚ฌ์šฉ
๊ฐ„๋‹จX, ์ •๊ตO
๊ตฌ๋ถ„์ž๋กœ ํ•˜๋‚˜์˜ ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉ
๊ฐ„๋‹จO, ์ •๊ตX

 


6. java.math.BigInteger ํด๋ž˜์Šค

  • ์ •์ˆ˜ํ˜•์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ํ•œ๊ณ„๋ฅผ ๋„˜๋Š” ์ˆ˜๋“ค์„ ๋‹ค๋ฃฐ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๋‚ด๋ถ€์ ์œผ๋กœ int๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•ด์„œ ๊ฐ’์„ ๋‹ค๋ค„ longํƒ€์ž…๋ณด๋‹ค ํ›จ์”ฌ ํฐ ๊ฐ’์„ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์ง€๋งŒ ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง„๋‹ค.
  • String์ฒ˜๋Ÿผ ๋ถˆ๋ณ€(immutable)์ด๋‹ค.

 

6-1) BigInteger์˜ ์—ฐ์‚ฐ ๋ฉ”์†Œ๋“œ

๋ฉ”์†Œ๋“œ ์„ค๋ช…
BigInteger add(BigInteger val) ๋ง์…ˆ(this + val)
BigInteger subtract(BigInteger val) ๋บ„์…ˆ(this - val)
BigInteger multiply(BigInteger val) ๊ณฑ์…ˆ(this * val)
BigInteger divide(BigInteger val) ๋‚˜๋ˆ—์…ˆ(this / val)
BigInteger remainder(BigInteger val) ๋‚˜๋จธ์ง€(this % val)

 

6-2) ๋น„ํŠธ ์—ฐ์‚ฐ ๋ฉ”์†Œ๋“œ

BigInteger์˜ ๋–จ์–ด์ง€๋Š” ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ๋น„ํŠธ๋‹จ์œ„๋กœ ์—ฐ์‚ฐํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋“ค์„ ์ œ๊ณตํ•จ

๋ฉ”์†Œ๋“œ ์„ค๋ช…
int bitCount() 2์ง„์ˆ˜๋กœ ํ‘œํ˜„ํ–ˆ์„ ๋•Œ, 1์˜ ๊ฐœ์ˆ˜(์Œ์ˆ˜๋Š” 0์˜ ๊ฐœ์ˆ˜)๋ฅผ ๋ฐ˜ํ™˜
int bitLength() 2์ง„์ˆ˜๋กœ ํ‘œํ˜„ํ–ˆ์„ ๋•Œ, ๊ฐ’์„ ํ‘œํ˜„ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ bit ์ˆ˜
boolean testBit(int n) ์šฐ์ธก์—์„œ n+1๋ฒˆ์งธ ๋น„ํŠธ๊ฐ€ 1์ด๋ฉด true, 0์ด๋ฉด false
BigInteger setBit(int n) ์šฐ์ธก์—์„œ n+1๋ฒˆ์งธ ๋น„ํŠธ๋ฅผ 1๋กœ ๋ณ€๊ฒฝ
BigInteger clearBit(int n) ์šฐ์ธก์—์„œ n+1๋ฒˆ์งธ ๋น„ํŠธ๋ฅผ 0์œผ๋กœ ๋ณ€๊ฒฝ
BigInteger flipBit(int n) ์šฐ์ธก์—์„œ n+1๋ฒˆ์งธ ๋น„ํŠธ๋ฅผ ์ „ํ•œ(0 <-> 1)