JDBC 사용중에 ResultSet의 결과 값을 List에 담는 과정에서 질문이 있습니다

조회수 3159회

ResultSet의 결과값을 allEmployee라는 리스트에 VO형태로 담고 싶습니다.

리스트 인덱스의 값들이 달라야해서 인스턴스를 계속해서 생성해주고 있는데요.

이 방법이라면 데이터의 양이 많아질 경우 성능에 무리가 가지 않을까요?

preparedStatement = connection.prepareStatement(sql.toString().toUpperCase());
resultSet = preparedStatement.executeQuery();

while (resultSet.next()){
    employee = new Employee();
    employee.setEmpid(resultSet.getInt("empid"));
    employee.setName(resultSet.getString("name"));
    allEmployee.add(employee);
}            

목표는 VO가 담긴 리스트를 리턴하는 것입니다. 더 좋은 방법이 있으면 알려주시면 감사하겠습니다~

1 답변

  • 좋아요

    1

    싫어요
    채택 취소하기

    테이블에 담긴 모든(혹은 매우 많은) 데이터를 가져오는 경우에 한해서, 데이터가 많아지면 실제로 문제가 발생할 수 있습니다.

    위의 내용이 싱글유저라면 크게 문제가 없을수도 있습니다. (수백만건을 처리해도 속도가 느려지는 현상외에는 문제가 발생하지 않을 수 있읍니다.)

    하지만, 웹과 같이 다수의 사용자에 대해서 서비스하는 형태라면, 위 로직에 동시에 접근하는 양에 따라서 문제가 될 수 있습니다.

    기본적으로 자바 객체를 생성할 때마다, 자바가 사용할 수 있는 힙메모리를 소모하게되는데, 메모리 확보를 위해서 잦은 가비지 컬렉션을 일으켜 성능을 저하시킬수 있습니다.

    실제 서비스를 목표로 하는 것이라면, 한번 가져와서 VO로 바꿔야만 하는 양을 최대한 줄이는 방향으로 설계하는 것이 좋습니다.

    주. 위의 방식이 틀린 것이 아니라 많이 사용하는 방법입니다. SQL 쿼리문을 어떻게 작성하느냐에 따라, 성능에 영향을 많이 미치는 경우가 많습니다.

    • 감사합니다. 그리고 답변 중에 궁금한점이 있습니다. 싱글 유저가 어떤 내용을 의미하는 건가요?? 특정 유저에 대한 처리를 말씀하시는 건가요?? 김선우 2016.6.24 09:31
    • 데스크톱 애플리케이션을 생각하시면 될것 같습니다. 동시에 여러명이 사용하는 것이 아니라, 한번에 혼자만 사용하는 경우를 의미한 것입니다. 허대영(소프트웨어융합대학) 2016.6.25 00:00

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)