요즘 어디가나 경품이 핫하죠? 이터레이터 패턴을 응용하여 경품 추첨 프로그램을 만들어 보겠습니다. 이 프로그램은 경품추첨 명단과 경품의 리스트를 받아 추첨하는 과정을 수행하는 프로그램입니다. 추첨 기능은 두가지여서 경품에 따라 차례로 명단에서 이름을 뽑는 방식과 명단에 있는 사람 중에서 랜덤한 순서로 한명씩 경품을 추첨하는 형태입니다. 먼저 전체적인 프로그램의 실행의 전체구조를 살펴보겠습니다. 명단을 가질 mList와 입력을 받을 스캐너를 만들고 명단을 읽어들인 후 전체 출력하고 나서 추첨부를 호출합니다. public class EventMgr { Scanner scan = new Scanner(System.in); ArrayList mList = new ArrayList(); void run() { r..
프로그램에서 데이터에 대한 반복 계산을 작성하는 방법은 여러 가지가 있습니다. for 루프와 while 루프로 배열이나 입력 등 반복되는 데이터가 있을 때 그것을 하나씩 처리합니다. for (i=0; i 0; } public Student next() { Student st = shuffleList.get(0); shuffleList.remove(st); // 다음 요소를 꺼내 돌려주고 삭제한다 return st; } } } 프로젝트에서 여러 가지 콜렉션에 대해 for-each 문으로 차례로 돌려주며 뭔가 계산하는 기능을 사용하는데 이터레이터 패턴이 매우 유용합니다.
프로그래밍 언어에서 이터레이터는 미리 정해진 값의 집합에 대해 값을 하나씩 돌려주는 기능(하나씩 끝까지 반복하게 해주는 기능)을 제공하는 객체입니다. 언어마다 이터레이터를 사용하는 방식이 다른데 파이썬은 이터레이터를 언어의 중요한 개념으로 사용하고 있습니다. 순차나열의 구조를 가지는 반복부를 분석해보면 (1) 반복되는 대상 집합과 (2) 반복을 위해 값을 하나씩 꺼내서 주는 부분(다음 값이 무엇인지, 언제 끝낼지 결정해야 함), 그리고 (3) 그것을 이용해서 뭔가를 처리하는 코드 부분으로 구성되어 있습니다. 이 때 값을 하나씩 제공하는 부분과 그 값을 사용하는 부분이 분리되게 코드를 구성한다면 가독성을 올리고 재사용성이 훨씬 높아지는 코드를 작성할 수 있습니다. 이터레이터는 다음 값을 제공하는 기능과 끝..
컴프리헨션과 제너레이터 수식을 살펴보겠습니다. 제너레이터는 좀 어려운 개념이긴 하지만 파이썬에서 정말 중요한 핵심이라고 할 수 있고 파이썬의 강력한 힘은 여기서 나온다고 해도 과언이 아닙니다. 컴프리헨션은 이전의 포스트에서 다루었는데, 사실 리스트 컴프리헨션이라고 하는 것이 더 적합합니다. 리스트를 생성하거나 변환하는 일을 아주 간결한 코드로 강력하게 할 수 있는 기능입니다. 이전 포스트에서도 얘기했지만 리스트 컴프리헨션은 파이썬의 가장 강력하고 편리한 기능 중 하나입니다. comp_list = [x*x for x in mylist if x % 2 == 1] --- (i) 제너레이터 수식은 리스트 컴프리헨션과 똑같이 만들어지는데 대괄호 [ ] 대신 괄호 ( )를 씁니다. gen_expr = (x*x fo..
- Total
- Today
- Yesterday
- rust
- contains
- Iterator
- 이터러블
- 이터레이터
- 자바regex
- sort key
- contentEquals
- 스트링
- TypeError
- max
- 지연계산
- Camel Style
- zip
- python example
- 스트링 +
- python exercise
- follow
- 동적바인딩
- indexof
- 패턴
- 콜렉션
- APPEND
- Lazy evaluation
- typedef
- CompareTo
- C++ 클래스
- ToString
- format
- comparable
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |