[Java 스터디] 자동차 경주 게임 만들기 (1단계) - 참가자 소개
개요
Java 스터디를 하면서 과제로 자동차 경주 게임을 만들 예정이다.
오늘은 그 중 첫번째 시간으로, 자동차 클래스를 만들고 참가자 소개를 하는 기능을 구현해보자.
cf) 이 글은 2023년 4월 4일에 진행됐던 sscc 자바 스터디 3주차 스터디 내용을 정리한 글입니다.
문제
참가자 소개 기능을 만들어라.
1. 참가자 수 입력 받기 : 참가자 수는 N명이며 (N >= 2, N은 정수) 잘못된 입력이 들어오는 경우는 없다고 가정한다.
2. 참가자 정보 입력받기 : 1번째 참가자의 스피드를 입력받고, 다음 줄에는 1번째 참가자의 이름을 입력받는다. 이 과정을 N번 반복하여 참가자들의 정보를 저장한다. 이때, 현재 입력해야 하는 정보가 무엇인지 출력해줄 것.
ex) 1번째 참가자의 스피드를 입력하세요.
3. 모든 참가자의 정보가 입력되었으면, “—참가자 소개—“를 출력한 뒤, 모든 참가자의 번호와 스피드와 이름을 번호 순서대로 출력한다.
예시
- 자동차 갯수 입력
- 자동차 갯수만큼 이름과 스피드 입력
- 입력이 끝나면 전체 참가자 출력
- 힌트 : 객체 배열
코드
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
32
33
34
35
36
37
38
39
40
41
42
import java.util.ArrayList;
import java.util.Scanner;
class Car{
int speed;
String name;
Car(int speed, String name){
this.speed = speed;
this.name = name;
}
void printInfo() {
System.out.println("스피드는"+speed+"이고, 이름은 "+name+"입니다.");
}
}
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n;
System.out.println("자동차의 갯수를 입력하세요.");
n = scanner.nextInt();
ArrayList<Car> cars = new ArrayList<>();
for(int i=0; i<n; i++){
System.out.println(i+1+"번 째 자동차의 스피드를 입력하세요.");
int speed = scanner.nextInt();
System.out.println(i+1+"번 째 자동차의 이름을 입력하세요.");
String name = scanner.next();
Car car = new Car(speed, name);
cars.add(i, car);
}
System.out.println("\n-----경기 참가자 소개-----");
for(Car participant : cars) {
participant.printInfo();
}
}
}
후기
클래스의 개념은 이제 어느정도 잡혀있는 것 같아 요정도 난이도의 과제는 할만해보였다.
일단 Car 클래스를 빠르게 만들고나서, 메인을 작성하려는데,
문제는 동적할당.
객체 배열을 생성하는 방법을 잘 몰라서 이 부분의 사용방법을 검색해서 거의 복붙하듯이 사용한 것 같다.
또한 향상된 for문도 이번 과제를 통해서 처음으로 사용해보았는데, 아직은 낯설어서 능숙하게 다루지는 못하겠다.
python의 for문과 비슷하다는데, 이 기회에 미리 익혀두면 좋을 것 같다.
동적할당을 위해서는 리스트를 사용하는 것이 좋다. 왜냐하면 리스트는 배열과는 다르게 크기가 정해져있지 않기 때문이다.
ArrayList
이번 과제의 주요 역할을 하고 있는 ArrayList.
List의 자료형 중 가장 간단한 형태의 자료형이다.
add, get, size, contains, remove 등의 메소드를 제공한다.
ArrayList에 대한 자세한 사용 방법은 1. [Java 스터디] Java 소스코드의 골격 & 자료형 을 참고해주세요.
위 코드는 ArrayList의 add() 메소드를 사용하였다.
다른 예시 코드와 자료는 찾아보진 않았고, 클래스와 몇몇 메소드 사용법만 조금 검색한 다음에
피드백 받을 각오로 처음으로 PR한 코드였는데…
바로 합격 받아버렸다.
심지어 스터디장님께서 정말 잘 짰다고 칭찬까지 해주시다니 q(≧▽≦q)
이번 과제를 하기 위해서는 3주차 스터디 내용이었던 클래스와 생성자를 작성하는 방법, 객체 호출 방법 등을 확실히 알아야만 했다.
하지만, 나는 사실 스터디 시간에 생성자에 대한 이해를 하지 못했었다.
스터디 시간이 워낙 짧고, 개념을 한 번만 빠르게 설명하고 넘어가시기 때문에 어찌보면 당연했다.
그래서 나 혼자 생성자에 대한 개념을 찾아보다가 너무 잘 작성해놓은 글이 있어서 이해에 정말 정말 큰 도움이 되었다. (블로그에 스터디 내용을 정리하면서 해당 글의 링크를 달아놓았다.)
아직 생성자는 학교 강의 시간에 배우지도 않았는데 말이다.
과제와 그 글 덕분에 생성자와 객체 관련 개념을 정립한 뒤에 학교에서 강의를 들으니까 더 이해가 잘 되었다.
아마, 내가 미리 이해를 하지 못하고 강의실에 들어갔다면 똑같이 이해를 못했을 것 같다.
왜 사람들이 대학교에서는 강의를 통해서만 학습해서 얻어가려고 하지 말고, 이해가 안 되는 부분은 스스로 공부하라고 하는 건지 알게 되었다.
별 건 없는 과제였지만, 중요한 깨달음도 얻은 것 같고, 과제도 성공적으로 수행했으니 뿌듯하다.
요즘 들어 학교 강의도 어렵고, 나만 뒤쳐지는 것 같고, 동기들이 공모전을 나가려고 프로젝트를 준비한다는둥 나는 알아들을 수 없는 대화를 주고 받는 걸 엿들으면서 열등감을 많이 느꼈었는데, 이번 과제를 통해, 그럴수록 내가 더 열심히 달려나가야겠다는 다짐을 하게 된 것 같다.
오늘 하루도 힘내보자!! 아자아자 (๑•̀ㅂ•́)و✧
댓글남기기