JList는 간단한 데이터를 리스트로 관리하는데 유용하다. 그러나 필드가 여러 개 있는 복잡한 데이터라면 리스트 형태로는 필요한 데이터를 모두 보여줄 수 없다. 그러므로 JTable을 이용해야 한다. 이 클래스는 사용법도 상당히 복잡하지만, 데이터를 다루는 부분과 guI 부분을 분리하여 설계해야 하므로 프로그램의 모듈화 설계가 매우 중요하다. 이 프로그램은 GUI의 테이블 기능을 재사용 가능하도록 모듈화하여 작성되었다. 입력파일로 주어진 song 데이터에 대해 JTable을 포함하는 실행 화면은 다음과 같다. 실행화면 예시 song.txt 1 빅뱅 뱅뱅뱅 2015 2 빙뱅 WELIKE2PARTY 2015 3 아이유 마음 2015 4 Zion.T 꺼내먹어요 2015 5 빅뱅 LOSER 2015 6 백아연 ..
업다운 버튼과 숫자 편집창, 그리고 기록을 누적하여 기록하는 다음과 같은 프로그램을 만들어 보자. 이 프로그램은 다음과 같은 기능을 가진다. 업 다운 버튼으로 상단 편집창의 숫자를 증가 또는 감소시킨다 RECORD 버튼으로 편집창의 숫자를 하단의 기록창에 누적하여 덧붙인다. 업 다운 버튼이 눌려질 때마다 상단의 배경색을 랜덤하게 바꾸어 준다. 이런 기능을 구현하기 위해 필요한 단계를 차례로 살펴본다. 화면 구성 (레이아웃) 자바 스윙에서는 화면 구성이 좀 번거로운 점이 있다. 이것을 화면 빌더 같은 툴을 이용하여 설계하면 편리하지만, 간단한 화면 구성은 작성할 수 있으면 코드도 깔끔하고 유지보수가 쉽다. 위의 화면은 상단(편집창), 중간(버튼 세개), 하단(라벨로 텍스트 여러 줄 보여줌)으로 구성된다. ..
자바 개발을 하다보면 이클립스 같은 IDE를 사용하지 않고 명령프롬프트 만으로 프로그램을 컴파일하거나 실행시켜 볼 수 있어야 한다. 간단하게 프로그램을 테스트하거나 환경을 점검하기 위해 필요한 일이 많다. 그럴 때 메모장과 명령 프롬프트만으로 자바 프로그램을 실행시키는 방법을 살펴보자. 명령 프롬프트 열기 명령 프롬프트 창을 다음과 같이 실행시킬 수 있다. 데스크탑 하단 왼쪽의 검색하려면 여기에 입력하십시오 라는 검색창에 “cmd”를 입력하면 “명령 프롬프트” 프로그램이 검색되고 그것을 선택하면 다음과 같은 창이 뜬다. (디폴트는 검은색 바탕에 흰 글씨로 보임) 명령창에서 내가 원하는 디렉토리로 이동하기 위해 cd 명령을 사용하면 된다. 원하는 디렉토리는 탐색기에서 해당 디렉토리로 이동한 후 주소창을 클..
제 블로그에서 가장 인기있는 글이 if 문 줄이기인데, 최근 신간 『자바 코딩의 기술』 에 비슷한 내용이 있네요. 새로운 것도 있고 중요한 것 같아서 제 나름대로 다시 한번 정리해 보았습니다. 한국 상황에 맞게 약간 변경도 했습니다. 물론 이 책에는 이외에도 수준높은 내용들이 엄청나게 많습니다. 거기서 초보 개발자에게 의미있을 만한 일반적인 규칙들입니다. (1) 불필요한 비교 조건식을 지워라 자바 언어에서는 int나 숫자 타입에 대해 반드시 비교를 해야 참거짓으로 바꿀 수 있다. 그런데 가끔 이런 문제 때문에 수식이나 함수의 결과가 진위형일 때도 == true 같이 비교식을 쓴 경우가 있다. 불필요한 진위식의 비교는 지우는 것이 필요하다. if (largerThanA(x) == true) 일반적으로 진위..
다음의 C 코드를 Rust로 바꾸어 보겠습니다. 배열과 for 루프, 그리고 함수에 배열을 넘기는 것이 포함됩니다. void analyze_slice(int arr[], int len) { printf("arr[0] = %d, 길이: %d\n", arr[0], len); } void main() { int xs[] = {1, 2, 3, 4, 5}; int ys[500] = {0}; printf("xs 배열의 크기: {}", sizeof(xs)/sizeof(int)); // 배열을 대여 - 함수 호출 analyze_slice(xs, 5); for (int x=0; x < 500; x++) { ys[x] = x; } // 배열의 슬라이스를 대여 analyze_slice(&ys[5], 3); } 배열을 2개 ..
러스트 언어는 C/C++ 언어에 뿌리를 두고 있다고 볼 수 있습니다. 새로운 개념이 많아 배우기 어려운 언어지만 그래도 작은 것부터 만들어보면 좋겠지요? 러스트 playground라는 사이트에서 프로그램을 짜서 컴파일러를 돌려볼 수 있습니다. 러스트는 컴파일이 어렵기로 소문이 자자합니다. 워낙 꼼꼼하게 에러를 내고 안전하고 정확한 코드가 아니면 실행을 안 시켜 주기 때문에 컴파일만 잘 되면 실행하다가 죽을 일이 별로 없다는 장점도 가집니다. (컴파일 오류가 런타임 오류보다는 훨씬 다루기 쉽죠?) 그럼 간단한 C/C++ 코드를 대응하는 러스트 프로그램으로 바꾸는 방법을 살펴보겠습니다. fn main() { let mut a = 10; let b = 20; let mut c = 30; a += b; c -=..
러스트 변수의 지정에서 변수와 객체의 오너십의 문제와 메모리 관리에 대해 Rust, 메모리를 자동으로 제때 해지한다 에서 살펴보았습니다. 여기서는 또하나의 변수에 관한 중요한 기능인 참조에 대해 살펴보려고 합니다. 러스트는 프로그래밍 언어의 개념들을 절묘하게 엮어 기존 언어와는 다른 새로운 규칙의 세계를 만들어 냅니다. 그래서 새로 익혀야 할 개념과 용어, 규칙이 많습니다. 변수는 자기가 가진 객체를 다른 변수에게 참조할 수 있게 빌려줄 수 있습니다. 대여(Borrow)는 말그대로 값에 대한 권한을 일부 빌려주는 것입니다. 그러면 참조 변수는 그 변수를 읽거나 쓸 수 있습니다. 러스트에서 변수와 객체의 관계는 다음과 같이 나누어집니다. 객체에 대한 불변 오너십을 가지는 변수: let name = "lee..
러스트의 등장과 성공으로 메모리 관리, 스택과 힙 등 이슈가 새로 중요하게 조명받고 있습니다. 러스트 공부에 도움이 되었으면 합니다. 프로그램과 메모리 프로그램은 CPU의 레지스터에 메모리에 있는 데이터를 가져와서 계산하고 바꾸고 다시 저장하는 과정을 통해 수행됩니다. 이러한 load와 store가 컴퓨터의 기본 동작입니다. 그런데 컴퓨터에서 수행중인 프로그램은 아주 많으므로 컴퓨터(OS) 관점에서 볼 때 여러 개 프로그램이 필요한 만큼 메모리를 넉넉하게 줄 수는 없습니다. 그래서 컴퓨터는 각 프로그램이 사용하는 메모리를 제한하고 종류를 나누어 규칙에 따라 사용하도록 하고 있습니다. 그래서 메모리는 정적, 스택, 힙 세 종류로 나누어 집니다. 정적 메모리는 코드나 데이터가 저장되는 영역입니다. 프로그램이..
C/C++ 언어는 메모리를 프로그래머가 직접 delete합니다. 모든 메모리를 할당한 역순으로 한 방울도 남기지 않고 해지해야 메모리 리크 없는 프로그램이 됩니다. 그런가하면 여기 저기 흩어져 있는 힙메모리를 가리키는 포인터들은 언제든 댕글링 참조가 될 위험에 노출되어 있습니다. 이것은 정말 사람의 노력이 너무 많이 들어야 하는 무식한 방법이죠. 그런가 하면 자바처럼 또는 대부분의 언어들처럼 프로그래머는 메모리를 쓰기만 하고 해지는 신경 안 쓸래 하는 가비지콜렉션(GC) 모델이 있습니다. 필요하면 언제든 객체를 만들고 아무 생각없이 쓰면 됩니다. 메모리 용량을 넉넉히 늘리는 것이 사람이 직접 손으로 고생하는 것보다 편하고 또 안전하다 라고 자바에서는 주장하고 있지요. 파이썬처럼 아예 응용 프로그램만 만드..
- Total
- Today
- Yesterday
- 이터러블
- TypeError
- 동적바인딩
- contentEquals
- max
- sort key
- C++ 클래스
- 콜렉션
- 지연계산
- 이터레이터
- Iterator
- python exercise
- Camel Style
- CompareTo
- 스트링 +
- contains
- 스트링
- 패턴
- format
- comparable
- follow
- 자바regex
- APPEND
- python example
- Lazy evaluation
- rust
- ToString
- typedef
- zip
- indexof
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |