웹 백엔드/개념정리

객체의 null상태와 notnull상태

Blue_bull 2025. 1. 22. 20:14

nullnot null 상태는 객체가 초기화되었는지 여부에 따라 달라집니다. 아래는 코드에서 각 객체(ResultSet, PreparedStatement, Connection)가 null 또는 not null 상태가 되는 상황에 대한 설명입니다.


1. 객체가 null인 경우

  • 초기화만 하고, 실제로 객체를 생성하지 않았을 때:

    ResultSet rs = null; // 초기화만 했으므로 rs는 null
  • 객체 생성 중 예외가 발생하여 생성되지 못했을 때:

    try {
        PreparedStatement pstmt = conn.prepareStatement(sql);
        ResultSet rs = pstmt.executeQuery(); // 쿼리 실행 중 예외 발생
    } catch (SQLException e) {
        // rs는 초기화되지 않았으므로 여전히 null
    }
  • 메서드가 값을 반환하지 않거나 실패했을 때:

    • 예를 들어, makeBean() 메서드에서 null을 반환하면, 호출하는 쪽에서는 null 상태를 받게 됩니다.

2. 객체가 not null인 경우

  • 정상적으로 객체가 생성되었을 때:

    ResultSet rs = pstmt.executeQuery(); // 쿼리가 정상 실행되어 rs는 not null
  • 외부 메서드에서 값을 반환받았을 때:

    • 메서드가 유효한 객체를 반환하면, 변수는 not null이 됩니다:

      Connection conn = super.getConnection(); // 연결 성공 시 conn은 not null

코드 내 객체의 null 여부에 따른 동작

1. Connection conn

  • null일 때:
    • 데이터베이스 연결이 생성되지 않았거나, getConnection() 메서드가 실패한 경우.
  • not null일 때:
    • super.getConnection()이 성공적으로 데이터베이스 연결을 반환한 경우.

2. PreparedStatement pstmt

  • null일 때:
    • Connection이 없어서 conn.prepareStatement(sql)을 호출하지 못했거나, 호출 중 예외가 발생한 경우.
  • not null일 때:
    • conn.prepareStatement(sql)이 정상적으로 호출되고, 객체가 생성된 경우.

3. ResultSet rs

  • null일 때:
    • pstmt.executeQuery() 호출 전에 예외가 발생하거나, 쿼리가 실행되지 않은 경우.
  • not null일 때:
    • pstmt.executeQuery()가 성공적으로 실행되어 쿼리 결과가 반환된 경우.

예제 상황

정상적인 경우 (not null)

try {
    Connection conn = super.getConnection(); // 연결 성공 → conn은 not null
    PreparedStatement pstmt = conn.prepareStatement(sql); // 성공 → pstmt는 not null
    ResultSet rs = pstmt.executeQuery(); // 쿼리 실행 성공 → rs는 not null
} catch (Exception e) {
    e.printStackTrace();
}

비정상적인 경우 (null)

try {
    Connection conn = super.getConnection(); // 실패 → conn은 null
    PreparedStatement pstmt = conn.prepareStatement(sql); // conn이 null이므로 pstmt도 생성되지 않음
    ResultSet rs = pstmt.executeQuery(); // pstmt가 null이므로 rs는 생성되지 않음
} catch (Exception e) {
    e.printStackTrace();
}

nullnot null을 결정하는 핵심

  1. 정상적으로 객체가 생성되었는가?
    • 메서드 호출이 성공하면 not null.
    • 실패하거나 예외가 발생하면 null.
  2. 초기화만 되었는가?
    • 객체 선언 시 초기화만 했다면 null 상태를 유지.

결론

  • 객체는 정상적으로 생성되었을 때 not null이 됩니다.
  • 객체가 생성되지 않았거나 예외가 발생하면 null 상태가 됩니다.
  • 코드에서 if (obj != null) 조건을 사용하는 이유는, 객체가 생성되었는지 확인하고 작업을 진행하기 위함입니다.