객지프 프로젝트

1

Java

목록 보기
1/4
post-thumbnail

문제점 및 해결

1) csv 파일로부터 객체 생성 createTable

books.csv 파일에 데이터가 없는 인덱스가 존재.
-> String.split(",") 에서 두 번째 인자를 -1로 줌으로써 문제 해결
-> String.split("," -1)


2) Table.show() 호출 시 null 출력 안 됨.

처음에 Database에서 csv 데이터를 저장할 때 애초에 String.split으로 문자열 배열을 만들고 각각의 원소들을 ColumnImpl에 넣어버렸기 때문에 발생하는 문제.
-> Database에서 createTable(File csv) 실행 시에 문자열 if(values[i].equals("")) 이면 values[i] = null로 저장.
values는 Object 배열이므로 null이 들어간다.


3) sort() 메소드 안에 내부 클래스 및 comparotor 인터페이스를 implements 하는 클래스 제거

해당 부분에서 정렬을 내가 직접 구현하는 것은 에바인 것 같아 sort 함수 사용을 위해 comparotor 클래스를 작성해야 하는데,
문제는 null 처리라든가 바뀌기 전 인덱스 번호가 정렬된 후 어디로 갔는지 추적하기 위해 pair 쌍이 필요해서 클래스를 작성해서 사용해서 구현했었다.

2023.06.05. - 프로젝트 완성 후 명세서에 다른 외부 클래스 및 인터페이스 사용 금지 조항 때문에 이 sort 함수가 아무래도 찝찝해서 교수님께 사용 가능 여부를 여쭤봤더니 아무래도 사용하지 않는 것이 맞다는 답변. sort 메소드를 싹 다 갈아엎어야 됐다.

퀵 정렬 알고리즘을 직접 구현하여 정렬 후 selectRowsAt() 메소드를 이용해 new Table 객체를 리턴하니 Test 항목에서는 새로운 정렬된 테이블을 리턴하는 것이 아닌 원본이 바뀌어야 하기 때문에 문제 발생.

해결 과정 1 ) seleectRowsAt() 메소드로 새로운 테이블 생성 후 그 테이블의 값을 enhanced-for 로 원본 column에 할당

Table sortedTable = selectRowsAt(intArray);
        for (Column column : columns)
            column = sortedTable.getColumn(columns.indexOf(column));
        return this;
    }

문제 발생 : 확실히 원본 테이블을 변경한 것이기 때문에 테스트 파일에서 Pass 가 떴으나, sort가 되지 않았음.
문제 원인 : column 변수는 for 루프에서 사용되는 임시 변수기 때문에 column에 새로운 값을 할당하더라도 원본 'columns' 리스트의 요소를 변경하는 것이 아니라, 임시 변수 'column'의 값만 변경된다. 따라서, columns 리스트에는 영향을 주지 않아 원본이 변경되지 않는다.

해결 과정 2 ) enhanced-for를 for로 바꿔서 값을 하나 하나 setter로 변경

Table sortedTable = selectRowsAt(intArray);
for (int i = 0; i < columns.size(); i++) {
    columns.set(i, sortedTable.getColumn(i));
}
return this;

원본 테이블을 리턴했기 때문에 테스트 파일에서 Pass도 뜨고, sorting도 잘 된다.


4) String 타입의 객체를 compareTo 할 때 리턴되는 값

이전 sort 함수에서 사용했던 Comparator를 직접 작성할 때 리턴되는 값을 1, 0, -1로 주었기 때문에 당연히 String 객체의 compareTo도 1 or -1로 리턴될 것이라고 착각함.
compareTo는 양수 or 음수 or 0 임을 기억하자. 단순히 str1.compareTo(str2) == 1 이런 특정한 값 하나로 귀결되는 것을 늘 조심하자.
특히, 부동형 float / double 사용할 땐 더욱 주의하자.


5) sort 함수 작성시 list.addAll() 메소드 실행시 런타임 에러 발생.

그 이전 문장에서 list = Arrays.asList(intArr) 문장을 사용해서 배열을 리스트로 바꿨었는데, Arrays.asList()는 리스트의 크기를 해당 배열의 크기로 고정시켜버리기 때문에 add 실행시 문제가 발생.
-> list = new ArrayList<>(list) 문장을 그 다음 문장에서 실행함으로써 고정 리스트를 유연 리스트로 바꾸자.


6) 자바에선 int[] 배열을 매개변수로 받는 놈에게 Integer[] 배열을 건내줄 수 없다.
단순 프리미티브 타입은 오토 박싱/언박싱을 해주지만 배열은 안 해주는 것 같다. 때문에 일일히 값을 바꿔주는 코드 작성으로 해결.


7) Ctrl + / 기능 작동 X
-> 언어 입력 중에 MS 입력기가 아닌 한컴 입력기로 변환되어 있었다. 필요없고 충돌만 일으키니 바로 삭제.

8)

0개의 댓글

관련 채용 정보