대학생활/객체지향프로그래밍

[JAVA] 타자연습 프로그램 -2

celinayk 2022. 12. 2. 17:22
반응형

어려웠던 & 이해가 안갔던 부분

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개씩 증가