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();
}
}