프로그램에서 데이터에 대한 반복 계산을 작성하는 방법은 여러 가지가 있습니다. for 루프와 while 루프로 배열이나 입력 등 반복되는 데이터가 있을 때 그것을 하나씩 처리합니다. for (i=0; i 0; } public Student next() { Student st = shuffleList.get(0); shuffleList.remove(st); // 다음 요소를 꺼내 돌려주고 삭제한다 return st; } } } 프로젝트에서 여러 가지 콜렉션에 대해 for-each 문으로 차례로 돌려주며 뭔가 계산하는 기능을 사용하는데 이터레이터 패턴이 매우 유용합니다.
![](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..
![](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 파일이 생성된 것을 확인한다. 그 ..
여기서는 파일에서 학생 데이터를 읽어 객체로 저장하는 방법을 살펴본다. 실행결과는 다음과 같다. 입력파일에는 학번 이름 학과 학년 그리고 점수 여러 개가 나오는 여러 줄의 데이터가 들어있다. 그런 정보를 읽어서 아래와 같이 출력하는 프로그램을 작성하고 싶다. 산업경영공학과201222028최은서3 5 4 3 3 1 4 컴퓨터과학과201722825임소정1 3 2 3 2 컴퓨터과학과201222209남정수2 7 6 6 6 6 4 3 2 [201222028] 최은서 산업경영공학과 (3학년) - [4, 3, 3, 1, 4] [201722825] 임소정 컴퓨터과학과 (1학년) - [2, 3, 2] [201222209] 남정수 컴퓨터과학과 (2학년) - [6, 6, 6, 6, 4, 3, 2] 먼저 파일명을 입력받아 그..
이번에는 좀더 그럴듯한 제너릭 예제를 만들어 보자. 앞에서 Manageable과 Manager 클래스를 살펴보았다. Manageable 인터페이스는 Manager를 만들 수 있는 공통된 메소드의 정의를 제공한다. 이전 포스트에서 살펴본 Manager는 Manageable을 다루기 위한 메소드(입력, 출력, 검색 등)를 제공하는 클래스다. 그러면 이것을 Manageable을 상속한 어떠한 클래스에 대해서든 관리자로 쓸 수 있다. Manager studentMgr = new Manager(); studentMgr.readAll("student.txt"); studentMgr.printAll(); Student st = (Student)studentMgr.find("lee"); 여기서 제너릭에 관해 처음에 얘..
제너릭의 예제로 많이 등장하는 것이 스택이다. 스택이란 데이터를 Last In, First Out으로 저장하는 자료구조다. 그것을 위해 push, pop 등의 연산을 제공해야 한다.push : 요소 타입의 매개변수를 받아 스택에 푸시한다.pop : 스택의 제일 마지막 요소를 삭제하고 그것을 돌려준다.peek : 스택의 제일 마지막 요소를 반환한다. (변동 없음)isEmpty : 스택이 비어있는지 여부를 boolean으로 돌려준다. package stack; import java.util.ArrayList; public class Stack { ArrayList list = new ArrayList(); public boolean isEmpty() { return list.isEmpty(); } publi..
자바에서 기본적인 코딩과 클래스, 상속까지를 마치고 나면 그 다음 고개가 제너릭이다. 제너릭은 상속과 인터페이스를 이해하고 나서 그 다음에 다루어져야 하는 주제여서 기초 단계에서는 그것이 왜 필요한지를 이해하기가 어렵다. 여기서는 상속과 인터페이스를 충분히 공부한 것으로 가정하고 제너릭이 왜 필요한가를 설명해 보겠다. 자바 컴파일러(또는 편집기의 툴팁)는 다음 코드에 대해 아래와 같은 경고(warning) 메시지를 보여준다. ArrayList list = new ArrayList(); ArrayList is a raw type. References to generic type ArrayList should be parameterized 이 의미는 ArrayList를 쓰려면 ArrayList 처럼 타입을 ..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/lU2Xu/btqFOhunIkZ/kSYSB1mJA4PBqkL7RAywXK/img.png)
이번 포스트에서는 앞의 글에 이어서 인터페이스의 구체적인 예제를 살펴보겠다. 그리고 그 인터페이스를 이용하여 실제 클래스를 만드는 것도 살펴본다. 여기서는 실제 동작하는 프로그램을 만들기 위해 데이터를 읽고 출력하고 검색하는 기능을 만들어보겠다. 그것을 위해서 먼저 실제 인터페이스를 하나 정의한다. 이 인터페이스는 읽고 출력하고 비교하는 기능을 가지고 이것을 관리하는 클래스를 만들 것이므로 이름을 Manageable이라고 붙이려고 한다. interface Manageable { void read(Scanner scan); void print(); boolean compare(String kwd); } 그럼 이 인터페이스를 구현한 클래스를 예로 들어 보자. class Book implements Manag..
- Total
- Today
- Yesterday
- format
- python exercise
- zip
- 콜렉션
- APPEND
- 지연계산
- 스트링 +
- C++ 클래스
- 스트링
- 동적바인딩
- typedef
- CompareTo
- rust
- Lazy evaluation
- 패턴
- Iterator
- python example
- contentEquals
- 이터러블
- follow
- max
- comparable
- Camel Style
- sort key
- indexof
- ToString
- 자바regex
- TypeError
- contains
- 이터레이터
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |