일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 자바
- 알고리즘
- mybatis
- jdbc
- SQL
- String
- 자바스크립트
- jar
- 개선
- Selector
- jquery
- interface
- JCF
- iBATIS
- controller
- 참조타입
- html
- DB
- 환경설정
- extends
- 형변환
- JavaScript
- 정규화표현식
- scope
- regex
- 자료구조
- java
- jsp
- Set
- for문
- Today
- Total
프로그래밍공부노트
Day 24 - JAVA(야구게임) 본문
랜덤으로 만들어진 숫자 3개와 사용자가 입력한 숫자 3개와 비교하여
같은 위치 같은 숫자이면 Strike
다른 위치 같은 값이라면 Ball
Strike가 3이 되면 게임을 종료한다.
1. Main
2. BaseBallGame class (게임을 실행시켜주는 클래스)
3. 게임관련 상수
4. Compare class
5. Pitcher class
6. Hitter class
7. IUser
8. User_Comm
shallow copy : 객체의 주소만을 복사
deep copy : 객체의 값을 복사하여 새로운 객체를 만들어내고 새로 생성된 객체의 주소를 전달
3. BaseBallConst( 게임관련 상수 )
package com.min.edu;
/**
* 야구게임에서 필요한 기본 상수
* @author SANGJINYU
*
*/
public interface BaseBallConst {
/**
* 야구 게임의 기본 로직은 10회 내로 맞춰야함
*/
public int ITERATION = 10;
/**
* 야구 게임의 기본 로직은 같은 위치 같은 값인 STRIKE이 3이면 종료하겠다.
*/
public int STRIKE = 3;
}
- interface에 멤버필드를 선언하면 자동으로 static final 선언이 되면서 상수처럼 사용할 수 있게 된다.
- 변하지 않는 게임 로직에서 사용되는 10회 반복안에 맞춰야하는 규칙과, 3STRIKE 종료의 규칙의 숫자가 변경되지 않도록 interface에 선언하여 상수로 설정
7. IUser
package com.min.edu;
/**
* 야구게임의 기본 메소드
* @author SANGJINYU
*
*/
public interface IUser {
/**
* 각 필요 객첵 (hitter, pitcher)에서 만들어 줌
*
*/
public void make();
/**
* 생성된 객체의 값을 출력해주는 메소드
*/
public void print();
}
추상메소드 make()와 print() 메소드 선언, 자식 객체에서 구현하여 사용하도록
8. User_Comm(공통 모듈)
package com.min.edu;
import java.util.Arrays;
/**
* 공통 기능인 make()와 print()를 가지고 있고
* abstract로 class가 되어 있으며
* 공통으로 필요한 출력(print)만을 구현해 놓은 클래스 /
* @author SANGJINYU
*
*/
public abstract class User_Comm implements IUser {
protected int[] ball;
public User_Comm(int n) {
ball = new int[n];
}
/**
* user_comm 을 extends한 hitter 와 pitcher 클래스에서 고유 기능을 구현함
*/
@Override
public abstract void make();
/**
* 각 클래스 hitter pitcher에서 완료된 배열을 출력하는 기능
*/
@Override
public void print() {
//Arrays.toString(배열); => 조심해야할 것 // [값, 공백값] 사용할때 의도하지 않은 공백이 포함되어 있음
// => String 문자열 반환함
System.out.print("[");
for (int i = 0; i < ball.length-1; i++) { //ball[] index 번호로 사용할 것이기 때문에 길이-1
System.out.printf("%d,",ball[i]);
}
System.out.printf("%d]\n",ball[ball.length-1]); // 마지막 index 값은 길이 -1
}
/**
* 멤버필드의 배열을 String 문자열로 표현하여 반환하는 메소드
*/
//java.lang.Object.toString() 오버라이드
//객체를 직접 출력하면 동작이 됨 => System.out.println(객체);
@Override
public String toString() {
String s ="[";
for (int i = 0; i < ball.length-1; i++) {
s+= String.format("%d,",ball[i]);
}
s += String.format("%d]", ball[ball.length-1]);
return s;
}
/**
* 만들어진 멤버필드를 가져가기 위해서 필요한 getter 메소드
* @return
*/
public int[] getBall() {
return ball.clone();
}
}
IUser를 implements하여 추상메서드 구현해야 하지만 make()는 자식 객체에서 구현하도록 abstact 선언 추상메소드 포함하고 있기 때문에 User_Comm class도 abstract 선언
공의 번호를 3개 맞추는 기본배열은 생성자를 통해 만들어지도록 하고 그 외에 다른 길이를 원한다면 생성자 Overloading을 통하여 만들도록 함.
print()는 구현
getter method를 통해서 멤버필드를 가져갈 수 있도록 함
'JAVA' 카테고리의 다른 글
Day 27 - Java(예외 처리 정리, 마방진) (0) | 2021.03.19 |
---|---|
Day 26 - Java(Cloneable) (0) | 2021.03.18 |
Day 21 - JAVA(JCF, Set, List, Map) (0) | 2021.03.11 |
Day 20 - JAVA( JCF, SET) (0) | 2021.03.10 |
Day 19 - JAVA(Interface, Abstract Class) (0) | 2021.03.09 |