![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/J7GwL/btqw7O8Y3tl/TXWwZg3qY1RjSUkG8kOlxk/img.png)
(1) 가장 간단한 정규표현식 - 문자열 regex 패턴으로 "foo"가 주어진다면 그것은 "foo"라는 연속된 세 글자의 단어를 나타내는 패턴이 됩니다. 그럼 이것은 어떻게 매치가 될까요? 정규표현식 테스트 프로그램 (1) regex 먼저 (2) input 먼저 (3) 그룹찾기 (기타) 종료.. 1 regex: foo input: Let's test foo pattern... 찾은 문자열 "foo" (11, 14) input: how many foos in afooafoo? 찾은 문자열 "foo" (9, 12) 찾은 문자열 "foo" (18, 21) 찾은 문자열 "foo" (22, 25) input: 위의 실행 결과에서 보듯이 foo라는 regex는 입력 안에서 같은 것이 나타나는 부분에 모두 매치됩니..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/H8DBi/btqw8axafRy/gMqzaA3jKa0TKQpX4bslZ1/img.png)
오라클 사이트에서는 자바 튜토리얼 중 하나로 regex를 훌륭하게 소개하는 파트를 제공합니다. 이 튜토리얼의 특징은 자바의 regex 기능을 테스트해 볼 수 있는 프로그램을 제공해 주는 것입니다. 이것을 RegexTestHarness라는 이름의 자바 클래스인데 main 함수를 포함하고 있는 이 클래스를 컴파일해서 실행하면 regex를 공부하면서 테스트할 수 있는 훌륭한 프로그램이 얻어집니다. 다음 링크에서 그 프로그램 소스를 확인해 보기 바랍니다. https://docs.oracle.com/javase/tutorial/essential/regex/ 그런데 이 프로그램을 몇 가지 점에서 좀더 편리하게 수정한 프로그램이 아래 링크에 제공됩니다. 이것은 컴파일러 과목의 실습을 위해 사용 기능 몇가지만 수정한 ..
정규표현식은 언어를 표현하는 수학적인 방법입니다. 원래의 정규표현식은 나열, 선택, 반복으로 많은 언어를 표현하며, 어휘나 간단한 구문적 구조를 표현하기 위해 유용한 도구입니다. regex는 정규표현식을 프로그램에서 이용하는 방법을 통칭합니다. 프로그래밍 언어마다 regex 표현을 위한 구문과 라이브러리 클래스를 제공하고 있습니다. 이것은 문자열에 대한 간단한 검색이나 데이터 추출, 변환 등에 편리하게 사용할 수 있는 기능으로 자바 뿐 아니라 자바스크립트와 파이썬 등에서 문자열을 다루기 위해 많이 사용되고 있습니다. 흔히 문자열을 쪼개거나 replace 하는 등의 라이브러리 메소드들은 정규표현식의 개념을 포함하고 있습니다. 자바의 tokenize나 split 같은 함수가 그런 예입니다. 이들 함수에서 정..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/bgAJR7/btqABsWSEvB/qIqiXGHFb5EytVaZV6kJz1/img.png)
자바에서 입력을 위해 제공되는 클래스들은 매우 다양합니다. 여러 가지 종류의 입력 클래스가 필요한 이유는 먼저 데이터의 종류에서 출발합니다. 스트림이란 데이터의 연속인데 이것이 문자의 연속이냐 바이트의 연속이냐에 따라 나누어집니다. 대표적인 입력 소스인 파일은 문자 단위의 데이터를 가지는 (그래서 메모장으로 읽을 수 있는) 텍스트 파일이 있고 바이트 단위의 이진 데이터를 가지는 바이너리 파일이 있습니다. 바이너리 파일은 그것을 이해하고 처리할 수 있는 프로그램이 있어야 읽을 수 있습니다. 예를 들어 jpg 파일이나 .doc 파일은 해당 어플리케이션이 있어야 읽어서 내용을 보여줄 수 있습니다. 즉 메모장으로 열 수 없는 파일이죠? 그러므로 자바에서는 이 두 가지 입력 방식을 InputStream과 Read..
https://www.geeksforgeeks.org/inner-class-java/ 이번 포스트에서는 자바의 이너클래스에 대해 살펴보겠습니다. 이너클래스란 다른 클래스의 멤버로 정의된 클래스를 말합니다. 자바는 두개 이상의 데이터를 묶어서 사용하려도(C/C++의 struct) 클래스가 필요하고 함수를 다른 곳에 전달하려도(C/C++의 함수 포인터) 클래스가 필요합니다. 그렇다고 따로 .java 파일을 만들 필요까지는 없고 이 클래스에서만 사용할 꺼라면 이너클래스(Inner Class, 내부클래스)가 좋은 선택입니다. class Hand { Card[] hand; Hand(String shapes, String nums) { hand = new Card[shapes.length()]; Card c = n..
프로그래밍 언어를 이해하는데 중요한 키워드들이 여러 개 있습니다. 키워드를 중심으로 관련된 주제들을 모아서 살펴보는 글을 작성해 보려고 합니다. 소프트웨어 개발과 프로그래밍 언어에 관련된 이야기들을 키워드를 중심으로 풀어보는 시리즈입니다. 첫번째 키워드는 계산순서(evaluation order)입니다. 이것은 프로그래밍 언어의 패러다임과 깊이 연관되는 상당히 어려운 주제인데, 명령형 프로그래밍 언어부터 시작해서 차례로 살펴보겠습니다. 그리고 다음 글에서 lazy evaluation이라고 하는 좀 다른 프로그램의 실행 순서의 개념을 살펴보겠습니다. 명령형 프로그래밍 언어는 명령문(문장)을 차례대로 수행해 가는 방식의 프로그램을 작성하게 됩니다. 순서는 제어구조에 의해 결정될 것입니다. 문장은 수식을 포함하..
프로그래밍 언어를 이해하는데 중요한 키워드들이 여러 개 있습니다. 키워드를 중심으로 관련된 주제들을 모아서 살펴보는 글을 작성해 보려고 합니다. 소프트웨어 개발과 프로그래밍 언어에 관련된 이야기들을 키워드를 중심으로 풀어보는 시리즈입니다. 두 번째 키워드는 지연계산(delayed evaluation 또는 lazy evaluation)이라고 하는 명령형 프로그램의 실행 순서와는 좀 다른 계산 순서의 개념을 살펴보겠습니다. 이것은 함수 호출 시 매개변수의 계산에 관련된 것으로 명령형 프로그램은 매개변수 부분에 있는 수식의 계산을 모두 끝낸 후 함수를 호출할 수 있습니다. 그것을 applicative order라고 부릅니다. 즉 test(f(g()))라는 코드가 있다면 g()를 먼저 계산하고 다음에 그 값으로..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/AtWmU/btqFBejVMfU/NRlQ50w3fUB1DRZnjeWQDK/img.png)
프로그래밍 언어에서 이터레이터는 미리 정해진 값의 집합에 대해 값을 하나씩 돌려주는 기능(하나씩 끝까지 반복하게 해주는 기능)을 제공하는 객체입니다. 언어마다 이터레이터를 사용하는 방식이 다른데 파이썬은 이터레이터를 언어의 중요한 개념으로 사용하고 있습니다. 순차나열의 구조를 가지는 반복부를 분석해보면 (1) 반복되는 대상 집합과 (2) 반복을 위해 값을 하나씩 꺼내서 주는 부분(다음 값이 무엇인지, 언제 끝낼지 결정해야 함), 그리고 (3) 그것을 이용해서 뭔가를 처리하는 코드 부분으로 구성되어 있습니다. 이 때 값을 하나씩 제공하는 부분과 그 값을 사용하는 부분이 분리되게 코드를 구성한다면 가독성을 올리고 재사용성이 훨씬 높아지는 코드를 작성할 수 있습니다. 이터레이터는 다음 값을 제공하는 기능과 끝..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/ccxaq2/btquxpKXXos/YEPzhl236ngVKW2IaTyjT0/img.png)
이번 글에서는 Main 클래스 외에 두 개의 클래스를 더 가지는 예제를 살펴본다. 두 클래스 간에 서로 관계를 가지는 경우 그것을 객체 참조로 나타내고자 한다. 다음과 같이 학생 정보를 입력받아 출력을 내보내는 프로그램을 작성해 보자. 입력 파일 결과 출력 형태 1 lee f A 2 kim m B 3 choi m C 4 park f A 5 kang m B [1] lee (녀) – A팀 [2] kim (남) – B팀 [3] choi(남) – C팀 [4] park(녀) – A팀 [5] kang(남) – B팀 여기서는 학생 클래스 하나만 있고 다섯개의 객체가 생성되어 리스트에 저장될 것이다. 그런데 자바 프로그램에서 꼭 데이터를 입력받지 않아도 클래스가 될 수 있는데, 다음과 같이 팀 정보를 출력하고자 한다면..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/dN7SeG/btquxsAoTo0/jqvRnuXQP7qT9kBreZvKx1/img.png)
자바 프로그램의 실행 파일을 배포하기 위해서는 실행가능한 jar 파일(runnable jar)을 만드는 것이 좋습니다. 이클립스 환경에서 실행할 수 있는 jar 파일을 만드는 방법을 알아보겠습니다. (1) 이클립스 프로젝트창에서 jar 파일을 만들려고 하는 프로젝트 이름 위에서 팝업메뉴를 열고 Export...을 선택한다 (2) 대화상자 Select에서 Java/Runnable Jar를 선택한다 (3) 다음 Runnable Jar File Specification 창에서 Launch Configuration의 드랍다운 박스를 열고 내보낼 프로젝트의 메인 클래스를 선택한다. (4) 내보낼 Jar 파일의 위치와 파일명을 넣는다. (5) 탐색기를 열어 해당 디렉토리에 jar 파일이 생성된 것을 확인한다. 그 ..
- Total
- Today
- Yesterday
- Camel Style
- max
- zip
- rust
- 자바regex
- format
- C++ 클래스
- python exercise
- follow
- comparable
- 스트링
- 이터러블
- python example
- 지연계산
- 이터레이터
- contentEquals
- indexof
- CompareTo
- 콜렉션
- sort key
- contains
- Lazy evaluation
- TypeError
- typedef
- 패턴
- 스트링 +
- ToString
- Iterator
- APPEND
- 동적바인딩
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |