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
'개발&etc > JAVA' 카테고리의 다른 글
[JAVA] 팩토리 메소드 패턴과 Java Reflection (0) | 2023.04.05 |
---|---|
[JAVA] 인스터스페이스 2편 - default 메소드가 필요한 이유 (0) | 2023.04.05 |
[java] final 클래스, 불변객체 String (0) | 2023.03.30 |
[java] 템플릿 메소드 패턴으로 배우는 추상클래스 (0) | 2023.03.30 |
[java] 추상 클래스 (0) | 2023.03.30 |