728x90

 

☕ 인터스페이스

- "무슨 기능을 만들어야할까?" VS "구현부터 하기"

- 어떤 기능을 만들어야 할 지 부터 고민한다. 만들어야 할 기능들을 관련 된 것끼리 묶은 후 이름을 지어준다

 

 

☕ 인터페이스 작성 문법

-> 만들어야하는 기능을 선언한다

- "인터페이스이름"은 Upper CamelCase로 작성된다

- interface도 확장자가 .java파일로 작성한다

- 인터페이스의 모든 필드는 public static final이어야 하며, 모든 메소드는 public abstract이어야한다. (JAVA 7)까지는 final, abstract를 생략하면 자동으로 붙는다

- Java8부터는 디폴드 메서드와 정적 메소드도 선언 가능하다

 

[public] interface 인터페이스 이름 {...}
// 예시
public interface User {...}

 

 

☕ 로또 번호 생성기

 

LottoMacineMain.java

package com.example;

public class LottoMacineMain {
    public static void main(String[] args) {

        // Ball b1 = new Ball(1);
        // Ball b2 = new Ball(2);
        // ....
        // Ball b45 = new Ball(45);
        // 변수가 45개 필요하다

        // 변수가 45개 필요하다. Ball 인스턴스를 45개 참조할 수 있는 배열이 만들어진다
        Ball[] balls = new Ball[LottoMachine.MAX_BALL_COUNT];
        for(int i = 0; i<LottoMachine.MAX_BALL_COUNT; i++){
            balls[i] = new Ball(i+1);
        }

        // LottoMachine 인스턴스가 생성된다
        LottoMachine lottoMachine = new LottoMachineImpl();
        lottoMachine.setBalls(balls);
        lottoMachine.mix();
        Ball[] result = lottoMachine.getBalls();

        for(int i=0; i<result.length; i++){
            System.out.println(result[i].getNumber());
        }
    }
}


/*
결과값:
8
28
7
5
40
45
*/

 

interface LottoMacine

package com.example;
/*
1. 1~45까지는 써이는 ball을 로또 기계에 넣는다
2. 로또 기계에 있는 ball들을 섞는다
3. 섞인 ball 중에서 6개를 꺼낸다.
 */
public interface LottoMachine {
    int MAX_BALL_COUNT = 45;
    int RETURN_BALL_COUNT = 6;
    public void setBalls(Ball[] balls); // Ball[] Ball이 여러개를 받겠다.
    public void mix(); // 자기가 가지고 있는 Ball들을 섞는다
    public Ball[] getBalls(); // 6개의 Ball을 반환한다
}

 

LottoMachineImpl.java

package com.example;

// 인터페이스를 구현하게 되면 반드시 인터페이스가 가지고 있는 메소드를 오버라이딩할 필요가 있다
public class LottoMachineImpl implements  LottoMachine{
   private Ball[] balls;

    @Override
    public void setBalls(Ball[] balls) {
        this.balls = balls;
    }

    // Math.radom() ==> 0.0 <= x < 1.0
    //                  0.0 <= x < 45.0
    //                int 0 <= x < 45   0~ 44
    @Override
    public void mix() {
        for(int i=0; i<10000; i++){
            int x1 = (int)(Math.random() * LottoMachine.MAX_BALL_COUNT);
            int x2 = (int)(Math.random() * LottoMachine.MAX_BALL_COUNT);
            if(x1 != x2){
                Ball tmp = balls[x1]; // 값을 치환할 때는 같은 type의 임시변수가 필요하다.
                balls[x1] = balls[x2];
                balls[x2] = tmp;
            } // if
        } // for
    }

    @Override
    public Ball[] getBalls() {
        Ball[] result = new Ball[LottoMachine.RETURN_BALL_COUNT]; // Ball 6개를 참조할 수 있는 배열
        for(int i=0; i<LottoMachine.RETURN_BALL_COUNT; i++){
            result[i] = balls[i];
        }
        return result;
    }
}

 

ball.java

package com.example;

// 불변 객체
public class Ball {
    private int number;
    public Ball(int number){
        this.number = number;
    }

    public int getNumber() {
        return number;
    }

}

 

728x90