싱글쓰레드와 멀티쓰레드
·
자바/프로세스와 쓰레드
1. 싱글 쓰레드와 멀티 쓰레드의 개념 - 두 개의 작업을 하나의 쓰레드(th1)로 작업하는 것을 싱글쓰레드, 두 개의 쓰레드(th1, th2)로 작업하는 것을 멀티쓰레드라고 부른다. ( 위의 그림은 싱글쓰레드와 멀티쓰레드를 보여준다. ) ( t2와 t`2의 끝나는 시간은 같지만 t1은 t`1보다 더 빨리 끝난다. 왜냐하면 그림에서 보여주듯이 멀티에서는 쓰레드의 '작업전환(context switching)'을 하기 때문이다. ) ( 작업전환으로 인해 보통 PC(Program Counter) 등의 정보를 얻어야 하기 때문에 시간이 걸린다. ) ( 그래서 무조건 멀티쓰레드가 좋은 것이 아니기 때문에, 단순히 CPU만을 사용하는 계산 작업이면 싱글쓰레드가 유리하다. ) 1-1. 싱글쓰레드와 멀티쓰레드를 이해하..
쓰레드의 기본적 구현과 실행
·
자바/프로세스와 쓰레드
1. 쓰레드의 구현 방식 - 쓰레드 구현의 방식은 두 가지가 있는데, Thread 클래스를 상속받는 방법과 Runnable 인터페이스를 구현하는 방법이 있다. ( 어느 쪽이든 별 차이는 없지만 Thread를 상속받는다면 다른 클래스를 상속 못 받기 때문에, 인터페이스로 구현하는 것이 일반적이다. ) ( 인터페이스 구현은 재사용이 높고 일관성을 유지하기에 객체지향적 방법이라고 말할 수 있다. ) 1-1. 쓰레드 구현을 이해하기 위한 예제(1) : 상속을 받는 것과 인터페이스를 구현하는 방법을 알아보는 예제이다. import java.util.*; public class Exercise001 { public static void main(String[] args) { ThreadEx1 t1 = new Thr..
프로세스와 쓰레드의 전반적인 개념
·
자바/프로세스와 쓰레드
1. 프로세스란? - 간단하게 말하면 '실행 중인 프로그램' 이다. - os로부터 필요한 자원을 할당받으면 프로세스가 된다. - 둘 이상의 쓰레드를 가진 프로세스를 '멀티쓰레드 프로세스' 라고 부른다. ( 쓰레드는 간단히 말하면 공장(프로세스)에서 일하는 사람(쓰레드)으로 비유해도 좋다. ) ( 프로세스는 메모리에 할당받아 자리를 차지하며, 쓰레드 또한 프로세스처럼 call stack의 공간을 필요하기 때문에 프로세스의 메모리 한계에 따라 쓰레드의 수가 정해진다. 그렇다고, 한계에 다다를 정도로 만들지는 않는다. ) 2. 멀티태스킹과 멀티쓰레딩 - 멀티태스킹은 여러 개의 프로세스를 동시에 실행할 수 있는 것을 말한다. - 멀티쓰레딩은 하나의 프로세스 내에서 여러 쓰레드가 동시에 수행하는 것을 말한다. (..
소수 만들기
·
알고리즘 (with JAVA)/코딩 테스트 기출 문제
1. 문제 설명 2. 입출력 조건 및 예제 입력 조건 문제 설명 참고 출력 조건 문제 설명 참고 입력 예제 2 1 2 3 4 1 2 7 6 4 출력 예제 1 4 3. 제약 조건 문제 설명 참고 4. 가정법 X 5. 기저 사례 X 6. 코드 public class Main { private static BufferedReader sc = new BufferedReader(new InputStreamReader(System.in)); private static StringTokenizer st; private static StringBuilder sb = new StringBuilder(); public static void main(String[] args) throws Exception { int c =..
최소직사각형 찾기
·
알고리즘 (with JAVA)/코딩 테스트 기출 문제
1. 문제 설명 2. 입출력 조건 및 예제 입력 조건 X 출력 조건 X 입력 예제 4 60 50 30 70 60 30 80 40 출력 예제 4000 3. 제약 조건 X 4. 가정법 X 5. 기저 사례 X 6. 코드 public class Main { private static BufferedReader sc = new BufferedReader(new InputStreamReader(System.in)); private static StringTokenizer st; public static void main(String[] args) throws Exception { int c = Integer.parseInt(sc.readLine()); int[][] A = new int[c][2]; for(int ..
(12) Properties
·
자바/컬렉션 프레임워크
1. Properties에 대한 기본 개념 - Propertie는 HashTable을 상속받아 구현한 것이다. - HashTable은 키와 값을 (Object, Object)로 받는 반면, Properties는 (String, String)으로 저장한다. - 주로 애플리케이션의 환경설정과 관련된 속성을 저장하는데 사용되며 데이터를 파일로부터 읽고 쓰는 편리한 기능을 한다. - 보다 자세한 메서드의 내용은 658p를 참고한다. 2. Properties을 이해하기 위한 예제(1) : 기본적으로 키와 값을 저장하고 매서드를 이용하여 출력해보는 예제이다. ( 23번째 줄을 보면 "koo"가 없으면 "80"을 넣는 것인데, 마지막에 출력해보면 "koo"가 저장되지 않은 것을 볼 수 있다. ) ( 여기서 Itera..
(11) - TreeMap
·
자바/컬렉션 프레임워크
1. TreeMap에 대한 기본 개념 - 이진검색트리의 형태로 키와 값의 쌍으로 이루어진 데이터를 저장하므로, 검색과 정렬에 적합한 컬렉션 클래스이다. - HashMap과 검색 성능 비교는 떨어지지만 범위 검색이나 정렬이 필요한 경우 TreeMap이 유리하다. - TreeMap의 자세한 메서드들은 654p를 참고하자. 2. TreeMap을 이해하기 위한 예제(1) : (10) HashMap과 Hashtable (tistory.com)의 예제(4)을 TreeMap을 이용해서 구현하고 Comparator를 이용하여 정렬하기.
(10) HashMap과 Hashtable
·
자바/컬렉션 프레임워크
1. HashMap과 Hashtable의 관계 - 이 둘의 관계는 ArrayList와 Vector와의 관계가 같아서 새로운 버전인 HashMap을 사용할 것을 권장한다. 2. HashMap 개념 - Map의 특징상 키와 값을 묶어서 하나의 entry(데이터)로 저장하는 특징을 가진다. - 또한 해싱을 사용하기 때문에 많은 양의 entry를 검색하는데 있어서 뛰어난 성능을 가진다. - HashMap은 Entry라는 내부 클래스를 정의하고, 다시 Entry타입의 배열을 선언한다. ( 여기서 Entry 내부 클래스를 정의하는 이유는 key와 value는 연관있는 entry로 보기 때문에 각각의 배열보다는 하나의 클래스로 정의해서 하나의 배열로 다루는 것이 데이터의 integrity 측면에서 더 바람직하기 때문..
(9) TreeSet
·
자바/컬렉션 프레임워크
1. TreeSet에 대한 기본 개념 - 이진 검색 트리의 자료구조 형태로 데이터를 저장하는 컬렉션 클래스이다. - 이진 검색 트리의 특성상 정렬, 검색, 범위 검색에 높은 성능을 가지고 있으며, TreeSet은 이 자료구조의 성능을 향상시킨 '레드-블랙 트리'로 구현되어 있다. - 구조는 트리이기 때문에 데이터를 순차적으로 저장하는 것이 아닌 저장위치를 찾아서 저장해야 하고, 삭제하는 경우 트리의 일부를 재구성해야하므로 링크드 리스트보다 데이터 추가/삭제하는 것이 느리다. - 그러나 정렬된 상태를 저장하기 때문에 단일 값 검색과 범위 검색이 매우 빠르다. - 메서드에 대한 자세한 내용은 자바의 정석 640p를 참고한다. ( 위 그림은 이진 검색 트리의 구조를 보여주며 맨 위의 노드는 '부모 노드', 왼..
(8) HashSet
·
자바/컬렉션 프레임워크
1. HashSet의 기본 개념 - Set 인터페이스를 구현한 가장 대표적인 컬렉션이며, 기본적으로 중복된 요소를 저장하지 않고 저장순서 또한 유지하지 않는다. - 만약 중복된 요소를 추가한다면, false를 반환하게 된다. - 만약 저장순서를 유지하고 싶다면, LinkedHashSet을 사용한다. - HashSet 메서드의 상세한 내용은 자바의 정석 631p를 참고한다. 1-1. HashSet을 이해하기 위한 예제(1) : HashSet의 중복을 확인하는 예제이다. 1-2. HashSet을 이해하기 위한 예제(2) : 6자리 로또 번호 랜덤 생성하는 예제이다. 1-3. HashSet을 이해하기 위한 예제(3) : 6자리 로또 번호 랜덤 생성하는 예제이다. ( 정렬 기준은 set에 저장된 Integer ..
(7) Comparator와 Comparable
·
자바/컬렉션 프레임워크
1. Comparator와 Comparable - Arrays.sort()는 Character 클래스의 Comparable의 구현에 의해 정렬된 것이다. - Comparable을 구현하는 클래스는 같은 타입의 인스턴스끼리 서로 비교할 수 있는 클래스들인 Integer와 wrapper, String, Date, File 같은 것들이며 기본적으로 오름차순으로 구현되어 있다. - 아래의 코드는 Comparator와 Comparable의 인터페이스 구조이다. ( Comparator는 java.util 패키지에 있고, Comparable은 java.lang 패키지에 있다. ) - 만약 오름차순이 아닌 내림차순과 같은 새로운 기준에 의해서 정렬되고 싶다면, Comparator를 사용한다. 1-1. Comparato..
(6) Arrays
·
자바/컬렉션 프레임워크
1. Arrays 클래스의 메서드들 (1) copyOf(), copyOfRange() (2) fill(), setAll() (3) sort(), binarySearch() ( binarySearch()는 꼭 정렬된 배열만 수행할 수 있으며, 정렬되지 않았다면 잘못된 결과를 전달한다. ) (4) deepEquals(), deepToString() : 각각 다차원 배열을 다룰 때 사용되는 메서드이다. (5) asList(Object... a) ( 그냥 list에 Arrays.asList를 한다면 add가 불가능하다. )
(5) Iterator, ListIterator, Enumeration
·
자바/컬렉션 프레임워크
1. Iterator - 컬렉션 프레임웍에서는 컬렉션에 저장된 요소들을 읽어오는 방법을 표준화하였다. 그것은 바로 각 요소에 접근할 수 있느 기능을 가진 Iterator 인터페이스이다. - Collection 인터페이스에 정의된 메서드이므로, List와 Set에도 Iterator가 포함되어 있다. - 메서드 종류는 아래와 같다. (1) bollean hasNext() (2) Object next() (3) void remove() : next()로 읽어야만 remove()를 사용할 수 있다.. - Map 인터페이스를 구현한 컬렉션 클래스는 키와 값을 iterator()로 불러올 수 없지만, 따로 키값을 가져오는 keySet()이나 entrySet()을 불러와야 한다. 1-1. Iterator를 이해하기 ..
(4) Stack과 Queue
·
자바/컬렉션 프레임워크
1. Stack과 Queue - Stack은 LIFO(Last In First Out)이고, Queue는 FIFO(First In First Out)이다. - Stack은 ArrayList로, Queue는 LinkedList로 구현하는 것이 좋다. Queue 또한 ArrayList로 구현해도 되지만 데이터 삭제를 할 때 공간을 다시 채워주어야 하기 때문에, LinkedList가 유리하다. - Stack의 메서드는 아래와 같다. ( 중요한 부분만 적었다. 상세한 내용은 자바의 정석 604p를 참고하자. ) (1) Object peek() : Stack의 맨 위에 있는 저장된 객체를 반환한다. pop()과 달리 객체를 꺼내지는 않음 ( 만약 비어있다면, EmptyStackException 발생 ) (2) O..
(3) LinkedList
·
자바/컬렉션 프레임워크
1. LinkedList - 배열은 자료구조가 간단하며 사용하기 쉽고 읽어오는데 걸리는 시간이 가장 빠르다는 장점이 있다. - 그러나 배열은 단점 또한 존재하는데 아래와 같다. (1) 크기를 변경할 수 없다. : 변경할 수 없으므로 새로운 배열을 생성해야 한다. : 또한 크게 생성하면 메모리 낭비가 있다. (2) 비순차적인 데이터의 추가 또는 삭제에 시간이 많이 걸린다. : 차례대로 추가하거나 뒤에서 데이터를 삭제하는 것은 빠르지만, 중간에 데이터를 추가한다면, 다른 데이터들을 복사해서 옮겨야 된다. - 위와 같은 단점들을 보완하기 위해서 링크드 리스트가 등장하게 되었다. - 배열은 연속적이지만, 링크드 리스트는 불연속적으로 구성되어 있다. - 위 그림처럼 링크드 리스트는 클래스 안에 2개의 속성을 가져..
부분 레이아웃을 전체 레이아웃에 메모리에 객체화 시키기.
·
안드로이드 with 자바/자잘한 문제들
1. 구현해야 할 것 ( 버튼을 클릭하면 아래의 그림처럼 부분 레이아웃이 나오게 된다. ) 2. MainActivity.java import androidx.appcompat.app.AppCompatActivity; import android.content.Context; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.widget.Button; import android.widget.CheckBox; import android.widget.LinearLayout; public class MainActivity extends AppCompatActivity { Linea..
(2) ArrayList
·
자바/컬렉션 프레임워크
1. ArrayList - ArrayList는 기존의 Vector를 개선한 것으로 구현원리와 기능적인 측면에서 동일하다. - Object 배열을 이용해서 데이터를 순차적으로 저장하며, 공간이 없다면 더 큰 새로운 배열을 만들어서 복사하여 저장한다. - 자세한 메서드 종류는 자바의 정석 584~585를 참고한다. 1-1. ArrayList를 이해하기 위한 예제(1) : 추가, 제거, 포함 등의 메서드를 이용하는 예제이다. 1-2 ArrayList를 이해하기 위한 예제(2) : 43개의 문자열을 10개씩 자르고 List 객체에 넣어주는 예제이다. 1-3. ArrayList를 이해하기 위한 예제(3) : Vector 클래스를 알아보는 예제이다. ( trimToSize() 호출은 새로운 인스턴스를 생성해서 반환..
(1) 컬렉션 프레임웍이란?
·
자바/컬렉션 프레임워크
1. 컬렉션 프레임웍이란? - 데이터 군(group)을 저장하는 클래스들을 표준화한 설계를 뜻한다. - 컬렉션은 다수의 데이터, 즉 데이터 그룹을, 프레임웍은 표준화된 프로그래밍 방식을 의미한다. - Vector, Hashtable, Properties와 같은 클래스를 컬렉션 클래스라고 부르며, 원래는 JDK1.2 이전에는 서로 다른 각자의 방식으로 처리해야 했으나, 프레임웍이 등장 이후로는 표준화된 방식으로 다룰 수 있도록 체계화되었다. 1-1. 컬렉션 프레임웍의 핵심 인터페이스 - 아래의 그림처럼 컬렉션 프레임웍에서는 컬렉션 데이터 그룹을 크게 3가지 타입이 존재하는데, List와 Set의 공통된 부분을 다시 뽑아서 새로운 인터페이스인 Collection을 추가 정의하였다. - List, Set, M..
java.time 패키지(3) - 파싱과 포맷
·
자바/java.time 패키지
1. 파싱과 포맷 - 형식화와 관련된 클래스들은 java.time.format 패키지에 들어있는데, 이 중에서 DateTimeFormatter가 핵심이다. - 직접 형식들은 정의도 할 수 있다. - 아래의 코드를 보고 이해하자. ( DateTimeFormatter의 상수를 더 보고 싶다면 자바의 정석 573p를 참고하자. ) 1-1. 로케일에 종속된 형식화 - ofLocalizedDate(), ofLocalizedTime(), ofLocalizedDateTime()이 있는데, DateTimeFormatter의 static 메서드이다. - 아래의 코드를 보고 이해하자. ( ofLocalizedDate()로 만들었고, 인자값은 FULL 뿐만 아니라, LONG, MEDIUM, SHORT가 더 있는데, 출력 값..
java.time 패키지(2) - TemporalAdjusters와 Period & Duration
·
자바/java.time 패키지
1. TemporalAdjusters - 날짜와 시간을 plus()와 minus()를 써서 바꿨지만, TemporalAdjusters를 사용하면 직관적으로 바꿀 수 있다. - 아래의 코드를 보고 이해하자. - 이외에도 여러 개의 메서드가 존재하는데, 이것은 자바의 정석 565p를 참고하자. - 아래의 코드는 TemporalAdjuster의 인터페이스이다. ( 사실 with() 대신에 adjustInto()를 사용해도 된다. ) ( adjustInto()를 쓴다는 것은 내부적으로 사용하기 위해서 사용되기 때문에, 이것이 아니라면 with()를 쓴다.) 1-1. TemporalAdjusters를 이해하기 위한 예제(1) : TemporalAdjuster를 내부적으로 인터페이스를 상속 받아 구현한다. ( im..
Toast 직접 만들어 표시하기.
·
안드로이드 with 자바/자잘한 문제들
1. 구현해야 할 것 : 버튼을 누를 시, 아래의 노랑 테두리 박스가 나타면서 "모양 바꾼 토스트" 출력하기 2. MainActivity.java import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class MainActivity ex..
java.time 패키지(1)
·
자바/java.time 패키지
1. java.time 패키지 - 앞서 말했듯이 Date와 Calendar가 가지고 있는 단점을 해소하기 위해 나오게 되었다. - java.time 패키지는 String처럼 불변이기 때문에, 날짜와 시간을 변경하는 메서드 내부에서는 새로운 객체를 생성한다. - Calendar 클래스는 날짜와 시간을 하나로 표현하는 반면 이 패키지에서는 시간을 표현할 때는 LocalTime을 날짜를 표현할 때는 LocalDate를 표현한다. - 또한 날짜와 시간을 둘 다 필요하다면 LocalDateTime을 사용하고, 시간대(time-zone)까지 사용한다면 ZonedDateTime까지 사용해야 한다. - Date 클래스와 유사한 클래스로는 Instant가 있는데, 초 단위로 표현한다. - 또한 날짜와 시간을 초단위로 표..
형식화 클래스(2) - ChoiceFormat & MessageFormat
·
자바/형식화 클래스들
1. ChoiceFormat - 특정 범위에 속하는 값을 문자열로 변환해준다. - 특히, Switch 문이나 if 문에서 연속적이거나 불연속적인 것을 적절하게 처리 못할 경우 이 클래스를 사용하게 된다. - 아래의 코드를 보고 이해하자. ( 여기서 중요한 점은 limits와 grades 값들이 둘 다 똑같은 위치에 있어야 원하는 값이 나온다는 것이다. ) - 또한 아래의 코드처럼 세부적으로 조건을 지정할 수 있다. 2. MessageFormat - 이 클래스는 데이터를 정해진 양식에 맞게 출력할 수 있도록 도와준다. - 쉽게 말하면, 데이터가 들어갈 자리를 만려해 놓은 양식을 미리 작성하는 것이다. - 이 클래스 또한 parse를 이용해서 데이터를 추출한다. - 또한 홀따옴표(')는 escape문자로 사..
형식화 클래스(1) - DecimalFormat & SimpleDateFormat
·
자바/형식화 클래스들
1. DecimalFormat - 형식화 클래스 중에서 숫자를 형식화 하는데 사용되는 것이 DecimalFormat이다. - 아래의 코드를 보고 이해하자. ( 자세한 내용은 자바의 정석 541p~542p 참고하자. ) 2. SimpleDateFormat - Date와 Calendar만으로 날짜 데이터를 원하는 형태로 다양하게 출력하는 것은 불편하고 복잡하기 때문에 SimpleDateFormat을 사용해서 적절히 사용해본다. - DateFormat은 추상클래스로 SimpleDateFormat의 조상이다. 그래서 인스턴스 생성하기 위해서는 getDateInstance()와 같은 static 메서드를 이용해야 한다. ( 반환 인스턴스는 DateFormat을 상속받아 완전하게 구현한 SimpleDateForma..
Calendar와 Date
·
자바/형식화 클래스들
1. Calendar와 GregorianCalendar - Calendar는 추상클래스이기 때문에 직접 객체 생성이 안되고, 메서드를 통해 구현된 클래스의 인스턴스를 얻는다. (예): Calendar cal = Calendar.getInstance() - GregorianCalendar는 태국을 제외한 나라들이 쓰는 클래스이다. - 생성자를 구현하는 방식은 아래의 두 가지가 있다. (1) Calendar cal = Calendar.getInstance() (2) Calendar cal = new GregorianCalendar() ( 그러나 만일 (2)를 사용하는 도중 갑자기 새로운 Calendar 방식을 사용하거나 다른 인스턴스를 필요하다면, (2)를 쓴 해당 클래스를 다시 고쳐야 한다. ) ( 그러나..
유용한 클래스(7) - BigDecimal class
·
자바/유용한 클래스들
1. java.math.BigDecimal class - BigDecimal은 실수형과 달리 정수를 이용해서 실수를 표현한다. - 앞에서 배운 것과 같이 실수의 오차는 10진수 실수를 2진수로 정확히 변환할 수 없는 경우가 있기 때문에 발생하는 것이므로, 이 클래스를 이용해서 오차가 없는 2진수를 만드는 것이다. - BigDecimal은 다음과 같은 변수를 가진다. (1) private final BigInteger intVal : 정수(unscaled value) (2) private final int scale : 지수(scale) (3) private transient int precision : 정밀도(precision) ( 12345 * 10^-2의 뜻으로 정밀도는 전체 자릿수를 의미한다. ) ..
유용한 클래스(6) - BigInteger class
·
자바/유용한 클래스들
1. java.math.BigInteger class - 정수형 타입인 long으로 표현할 수 있는 값은 10진수로 19자리 정도인데, 이것보다 더 큰 계산을 한다면 BigInteger를 사용하는 것이 좋다. - BigInteger class는 int 배열을 사용해서 값을 다루기 때문에, long 타입보다는 성능면에서는 떨어진다. - BigInteger class는 다음과 같은 변수를 가진다. (1) final int signum : 부호 1(양수), 0, -1(음수) 셋 중의 하나의 값을 가진다. (2) final int[] mag : 값(magnitude) ( 위 코드에서 볼 수 있듯이, String처럼 불변이며 '2의 보수'의 형태를 취하고 있다. 즉, 같은 mag 값이더라도 signum은 다르다는..
유용한 클래스(5) - StringTokenizer class
·
자바/유용한 클래스들
1. java.util.StringTokenizer class - 이 클래스는 긴 문자열을 지정된 구분자(delimiter)를 기준으로 토큰이라는 여러 개의 문자열로 잘라내는 데 사용된다. - StringTokenizer는 구분자로 단 하나의 문자 밖에 사용하지 못하기 때문에 보다 복잡한 형태의 구분자로 문자열을 나누어야 할 때는 어쩔 수 없이 정규식 표현(Scanner 또는 split)를 사용해야 할 것이다. - StringTokenizer 클래스의 생성자와 메서드는 아래와 같다. (1) StringTokenizer(String str, String delim) : str 문자열을 지정된 구분자 delim으로 나누는 StringTokenizer를 생성한다. (2) StringTokenizer(Strin..
유용한 클래스(4) - Scanner class
·
자바/유용한 클래스들
1. java.util.Scanner class - 스캐너 생성자는 다양한 유형의 입력 소스로부터 데이터를 읽을 수 있다. (1) Scanner(String source) (2) Scanner(File source) (3) Scanner(InputStream source) (4) Scanner(Readable source) (5) Scanner(ReadableByteChannel source) (6) Scanner(Path source) - 또한 정규식 표현을 이용한 라인단위 검색을 지원하며 구분자(delimiter)에도 정규식 표현을 사용할 수 있어서 복잡한 형태의 구분자도 처리가 가능하다. (1) Scanner useDelimiter(Pattern pattern) (2) Scanner useDelim..
유용한 클래스(3) - 정규식 - regex 패키지
·
자바/유용한 클래스들
1. 정규식의 java.util.regex - 정규식은 텍스트 데이터 중에서 원하는 조건과 일치하는 문자열을 찾아내기 위해 사용하는 것을 말한다. - java.util.regex.Pattern을 찾아보면 정규식에 사용되는 기호화 작성방법이 나와있다. - 그러나 광범위하므로, 자주 쓰이는 것을 학습하고 넘어가는 것이 좋다. - 아래의 코드를 보고 이해하자. 1-1. java.util.regex의 예제(1) : find() 함수를 통해 grouping 할 수 있는 것을 보여주는 예제이다. ( 0\\d{1,2}: 0으로 시작하는 최소 2자리에서 최대 3자리 숫자(0포함) ) ( \\d{3,4}: 최소 3자리에서 최대 4자리 숫자 ) ( \\d{4}: 4자리의 숫자 ) 1-2. java.util.regex의 예..