본문 바로가기

Java

Day 6. Java 로또 프로그램(객체지향)

Java 로또 프로그램(객체지향)

이번에는 지난 수업에 List를 이용해서 짜보았던 로또 프로그램을 객체 지향적으로 다시 짜보았다. 시나리오는 LottoBall클래스에서 공을 하나씩 만들어주고, LottoMachine클래스에서 setLottoballs 매소드를 이용해서 가져와서 mix를 이용해서 섞어주고 getLottoballs를 이용해서 6개의 공을 가져오는 것이다. 


바로 밑에 올리는 코드는 스스로 생각해 작성한 프로그램이다.

package my.examples.javaexam.lotto;

public class LottoBall {
    private int num;

    public LottoBall(int num){
        this.num = num;
    }
    //getNumber(); -> getter메소드
    //number프로퍼티
    public int getNum(){
        return num;
    }
}
package my.examples.javaexam.lotto;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class LottoMachine {
    private int num;
    private List<LottoBall> lottoballs;
    LottoBall ball;

    public void setLottoballs(){
       lottoballs = new ArrayList<>()
       for(int i=1; i<46; i++) {
           ball = new LottoBall(i);
           //ball.setNum(i);
           lottoballs.add(ball);
       }
    }

    public void mix() {
        Collections.shuffle(lottoballs);
    }

    public void getLottoBalls(){
        for(int i=0; i<6; i++){
            System.out.println(lottoballs.get(i).getNum());
        }
    }

}
package my.examples.javaexam.lotto;

public class LottoExam {
    public static void main(String[] args){
        LottoMachine lm = new LottoMachine();

        lm.setLottoballs();
        lm.mix();
        lm.getLottoBalls();
    }
}


다음은 수업을 듣고 더욱 객체지향적으로 짠 코드이다.

package my.examples.javaexam.lotto2;

import java.util.List;

public interface LottoBallFactory {
    List<LottoBall> createLottoBalls();
}

-----------------------------------------------------

package my.examples.javaexam.lotto2;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class KoreaLottoBallFactory implements LottoBallFactory {
    @Override
    public List<LottoBall> createLottoBalls() {
        List<LottoBall> balls = new ArrayList<>();
        //String[] colors; colors = {"red", "orange", "yellow","green","blue","indigo","purple"};
        List<String> colors = new ArrayList<>();
        colors.add("red");
        colors.add("orange");
        colors.add("yellow");
        colors.add("green");
        colors.add("blue");
        colors.add("indigo");
        colors.add("purple");
        Random rand = new Random();

        for(int i=1; i<=45; i++){
            String color = colors.get(rand.nextInt(colors.size()));
            balls.add(new LottoBall(i, color));
        }
        return  balls;
    }
}

-----------------------------------------------------

package my.examples.javaexam.lotto2;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class UsLottoBallFactory implements LottoBallFactory{
    @Override
    public List<LottoBall> createLottoBalls() {
        List<LottoBall> balls = new ArrayList<>();
        List<String> colors = new ArrayList<>();
        colors.add("Yellow");
        colors.add("FuckinRed");
        colors.add("Boolooo");
        Random random = new Random();

        for(int i=1; i<=49; i++){
            String color = colors.get(random.nextInt(colors.size()));
            balls.add(new LottoBall(i,color));
        }

        return balls;
    }
}

-----------------------------------------------------
package my.examples.javaexam.lotto2;

public class LottoBall {
    private int number;
    private String color;

    public LottoBall(int number, String color){
        this.number = number;
        this.color = color;
    }

    public int getNumber(){
        return number;
    }

    public void SetColor(String color){
        this.color = color;
    }

    public String getColor(){
        return color;
    }
}

-----------------------------------------------------
package my.examples.javaexam.lotto2;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class LottoMachine {
    private List<LottoBall> balls;

    public void setLottoBalls(List<LottoBall> balls){
        this.balls = balls;
    }

    public void mix(){
        Collections.shuffle(balls);
    }

    public List<LottoBall> getLottoBalls(int count){
        List<LottoBall> result = new ArrayList<>();
        for(int i = 0; i<count; i++){
            result.add(balls.get(i));
        }
        return result;
    }
}

공 공장(인스턴스)도 만들고 그걸 이용해서 한국공 공장과 미국공 공장도 만들고, 랜덤으로 공의 색을 입히는 공정도 추가했다. 


'Java' 카테고리의 다른 글

Day 7. 과제(JAVA IO)  (0) 2018.12.12
Day 7. 과제  (0) 2018.12.12
Day 6. file, folder 관계와 컴포시트 패턴  (0) 2018.12.12
Day 5. Collection framework(자료구조)  (0) 2018.12.10
Day 4. 과제  (0) 2018.12.10