[JAVA] 타자연습 프로그램 -2
어려웠던 & 이해가 안갔던 부분
12월 2일까지-
벡터의 개념
가장 쉽게 말하면 가변길이의 배열이다
그냥 배열을 쓰면 배열의 할당된 길이를 초과할 수 있고, 얼마나 쓸지 예상이 안되는 경우도 있으니까
이럴때 동적으로 배열의사이즈를 자유롭게 조절할 수 있는 벡터를 쓰는것이다!
Q 왜 벡터를 이용해서 프로그램을 만들었을까
A 처음에 객체배열을 사용했을때 100개까지 단어를 넣을 수 있도록 정하고 프로그램을 짰다
이럴경우 이미 100개라고 갯수가 한정적으로 주어져있기 때문에 배열을 쓴것 하지만 ver2에서는
최대 단어를 100개까지 넣을 수 있다고 제한하지 않았다 내가 배열을 100까지 만들었다가
단어를 1000개 넣는 경우가 생길 수 있으니까 "벡터"를 이용한 것
++ 벡터클래스는 객체에 대한 참조값을 저장한는 배열이라서 다양한 객체들이 하나의 벡터에
저장될 수 있다
그래서 VisibleWord라는 객체를 담는 wordPool벡터를 만든 것이다!!
에러가 났음
벡터의 생성자 초기화

프로그램을 실행시켰을 때 오류가 생겼다.
에러가 난 부분은 벡터 클래스 생성자의 초기화부분이었다.
에러의 원인은
java.lang.NullPointerException:
생성자를 이용해 생성을 하지 않고 객체를 사용하려고 했기 때문에 발생하는 에러
사용할 객체를 생성수 인스턴스를 생성하지 않고 null오브젝트를 사용하려고 할 경우 발생
한마디로 나는 private Vector<VisibleWord> wordPool; 라고
wordPool을 선언을 했지만 생성을 하지 않고 단어를 삽입할때 wordPool.add()
이렇게 냅다 썼기 때문이다
그리고 null을 파라미터로 넘겼다 그래서 this.wordPool is null 이라는 문구가 떴다
++ 구글링을 했을때 대부분의 사람들은 초기화시 null을 사용하지 않는 것을 추천한다
나는 null을 썼고,,, 선언만 하고 생성을 안했기에 ,... 당연히 에러가 났다
해결 방법 : 벡터 클래스의 생성자 초기화 부분를 수정했다
기존 나의 코드
public WordManager() {
this.wordPool = null;
}
// constructor, size indicates the initial size of vector
public WordManager(int size) {
this.wordPool = null;
}
수정한 나의 코드
public WordManager() {
wordPool = new Vector<VisibleWord>();
}
// constructor, size indicates the initial size of vector
public WordManager(int size) {
wordPool = new Vector<VisibleWord>(size);
}
Vector <VisibleWord> wordPool = new Vector<VisibleWord>
이렇게 되야하니까 바꿔줬다! 단지 생성자를 이용해 초기화한것임
Vector클래스의 생성자는 3가지가 있다는것을 이 에러를 해결하면서 알게 되었다
1. Vector() : 10개의 데이터를 저장할 수 있는 길이의객체를 생성 저장 공간 부족시 10개씩 증가
2. Vetor(int size) : size개의 데이터를 저장할 수 있는 길이의 객체를 생성 저장 공간 부족시 size개씩 증가
3. Vector(int size, int incr) : size개의 데이터를 저장할 수 있는 길이의 객체 생성 저장 공간 부족시 incr개씩 증가