잡탕1 - IT2009. 3. 18. 12:14
"프로그래밍의 길은 멀고도 험한 것"

프로그래밍에 처음 입문해서 짜보는 프로그램이 'Hello Wolrd' 일 것이다
해당 언어의 기본출력으로 텍스트를 출력하는 가장 간단한 프로그램..
어떤 언어든 최초 예제는 저걸로 시작한다
언제부터 시작되었는지 정확히 알 수는 없지만 타이핑하게되는 프로그래밍 첫 예제임은 부인할 수 없다

그러다가 순환문을 배우게 되면 구구단을 짜게 된다
2*1=2 로 시작해서 9*9=81 까지 출력해보는 for 문의 예제로 말이다

이런 거의 정형화 되어지는 이러한 프로그래밍 예제에서 요즘 떠오르는게 있다
바로 lotto 숫자 출력 프로그램이다
1~45 까지 숫자중에서 랜덤 6개를 중복없이 출력하는 이 예제는
순환, 랜덤, 자료형, 배열 등을 포함할 수 있다

언어를 배우다보면 알게되는 지식으로부터 상상했던 프로그램이 땡기는 경우가 있다
소켓 인터페이스를 배우면 채팅 프로그램을 만들고 싶은 충동이 일어나는 등 말이다
비단 엔터프라이즈 환경의 core 프로그램이 아니라해도 반 장난성 프로그램들을 만들고 싶어질 때가 있다

그래서 그런지 몰라도 나도 Java 로 로또 숫자 생성 프로그램을 만들어본 적이 있다
아마 1~45 중 6개 랜덤한 숫자를 뽑아서 BitSet 을 이용해서 중복을 없에는 방식이었을 것이다
잘 돌아가는걸 보며 나름 흐믓해 했었던거 같다

'JAVA의 정석' 을 보다가 충격적인 로또 프로그램을 보게된다
내가 짠것보다 무려 코딩라인이 1/2 이나 줄어 있고 간단명료한 것이다

 import java.util.*;

class TreeSetLotto {
    public static void main(String[] args) {
        Set set = new TreeSet();

        for (int i = 0; set.size() < 6 ; i++) {
            int num = (int)(Math.random()*45) + 1;
            set.add(new Integer(num));
        }
        System.out.println(set);
    }
}

BitSet 을 이용해서 중복제거 과정을 프로그램에서 돌리는 내 예제와는 다르게
입력부터 중복을 배제하고, 정렬까지 되는 TreeSet을 이용하여  출력하는 이런 간단명료한!

이런 작은 예제에서부터 이런 차이가 난다면 대형 프로젝트에 투입됐을 때의 차이는 명확할 것이다
프로그램의 소소한 부분을 신경쓰지 못하는 아닐함 or 무지...

기초, 기본이 중요하다는건 그 영향력을 생각한다면 상당한 큰 부분이지만
실상은 이런 작은 차이에서 시작된다

"나는 과연 프로그래머가 될 수 있을까?"
"능력부족은 과연 노력만으로 매꿔질 수 있는 것인가?"

다시한번 생각해볼 문제다
Posted by pearl짓거리전문