JAVA

로또 만들어보기

jiyoon12 2025. 4. 30. 12:45
  • 1차 코드
package lotto.ch01;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class LottoFrame extends JFrame implements ActionListener {

    private JButton button;

    public LottoFrame(){
        initData();
        setInitLayout();
        addEventListener();
    }

    private void initData(){
        setTitle("Lotto Game");
        setSize(600,400);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        button = new JButton("Game start");
    }
    private void setInitLayout(){
        add(button, BorderLayout.NORTH);

        setVisible(true);
    }
    private void addEventListener(){
        button.addActionListener(this);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("그림을 그려라");
    }

    // 테스트 코드 작성
    public static void main(String[] args) {
        new LottoFrame();
    }
}
package lotto.ch01;

import java.util.Arrays;
import java.util.Random;

/**
 * SRP - 클래스를 설계할 때 원칙중에 하나이다.
 * 단일 책임의 원칙(클래스는 가능한 단 하나의 책임을 가지는 것이 좋다)
 */
public class LottoRandomNumber {

    final int LOTTO_NUMBER_COUNT = 6;

    // 메서드: 6개의 랜덤 번호가 필요(중복제거, 정렬)
    public int[] createNumber() {


        int[] lottoWinNum = new int[LOTTO_NUMBER_COUNT];
        Random random = new Random();
        for (int i = 0; i < lottoWinNum.length; i++) {
            lottoWinNum[i] = random.nextInt(45) + 1;

            for (int j = 0; j < i; j++) {

                if (lottoWinNum[j] == lottoWinNum[i]) {
                    i--;
                }
            }
        } // outer for

        // 정렬 방법(오름차순)
        Arrays.sort(lottoWinNum);
        return lottoWinNum;
    }

    //테스트 코드
    public static void main(String[] args) {
        LottoRandomNumber lottoRandomNumber = new LottoRandomNumber();
        int[] result = lottoRandomNumber.createNumber();
        for (int i = 0; i < result.length; i++) {
            System.out.println(result[i]);
        }
    }
}

  • 2차 코드
package lotto.ch02;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class LottoFrame extends JFrame implements ActionListener {
    
    private JButton button;
    private LottoRandomNumber lottoRandomNumber;
    private int[] result = new int[6];

    public LottoFrame() {
        initData();
        setInitLayout();
        addEventListener();
    }

    private void initData() {
        setTitle("Lotto Game");
        setSize(600, 400);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        button = new JButton("Game start");
        lottoRandomNumber = new LottoRandomNumber();
    }

    private void setInitLayout() {
        add(button, BorderLayout.NORTH);

        setVisible(true);
    }

    private void addEventListener() {
        button.addActionListener(this);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("그림을 그려라");
        result = lottoRandomNumber.createNumber();

        //그림을 다시 그려라
        repaint();
    }

    @Override
    public void paint(Graphics g) {
        super.paint(g);

        Font f = new Font("궁서체", Font.BOLD, 20);
        g.setFont(f);

        g.drawString(result[0] + "",100,300);
        g.drawString(result[1] + "",150,300);
        g.drawString(result[2] + "",200,300);
        g.drawString(result[3] + "",250,300);
        g.drawString(result[4] + "",300,300);
        g.drawString(result[5] + "",350,300);
    }

    // 테스트 코드 작성
    public static void main(String[] args) {
        new LottoFrame();
    }
}

  • 3차 리팩토링 코드
package lotto.ch03;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


public class LottoFrame extends JFrame implements ActionListener {

    private static final String INITIAL_MESSAGE = "로또 번호를 클릭하세요";
    private static final String FONT_NAME = "고딕";
    private static final int FONT_SIZE = 20;

    private JButton button;
    private LottoRandomNumber lottoRandomNumber;
    private boolean isInitialState = true; // 초기 상태 플래그
    private int[] currentNumbers;


    public LottoFrame() {
        initData();
        setInitLayout();
        addEventListener();
    }

    private void initData() {
        setTitle("Lotto Game");
        setSize(600, 400);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        button = new JButton("Game Start");
        lottoRandomNumber = new LottoRandomNumber();
        currentNumbers = new int[LottoRandomNumber.LOTTO_NUMBER_COUNT];
    }

    private void setInitLayout() {
        setLayout(new BorderLayout()); //기본값이다.
        add(button, BorderLayout.NORTH);
        setVisible(true);
    }

    private void addEventListener() {
        button.addActionListener(this);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        isInitialState = false; // 상태값 변경
        currentNumbers = lottoRandomNumber.createNumber();

        repaint();
    }

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        g.setFont(new Font(FONT_NAME, Font.BOLD, FONT_SIZE));
        if (isInitialState) {
            g.drawString(INITIAL_MESSAGE, 230, 200);
        } else {
            for (int i = 0; i < currentNumbers.length; i++) {
                g.drawString(currentNumbers[i] + "", 100 + (i * 50), 300);
            }
        }
    }

    // 테스트 코드 작성
    public static void main(String[] args) {
        new LottoFrame();
    }
}