태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

최신버전으로 사용하는 것이 제일 좋을 수 있지만...

경우에 따라서는 이전 버전의 JDK나 JRE가 필요할 때도 있습니다.

이런 경우, 이전 버전의 java를 찾기 어려운데...
아래 링크에 가시면 선택해서 받을 수 있습니다.

http://java.sun.com/products/archive/



Posted by bomsoft
TAG download, java, JDK, jre
요즘은 프로젝트에서 자바 언어를 많이 사용하고 있는 것 같습니다.

자바언어로 개발할 경우의 흔히 사용하는 naming rule은 대문자와 소문자를 혼합하여 사용하는 것이 보통이며,
많이들 선호하는 방식인 것 같습니다. 물론 Java 에서 권장하는 방식이기도 합니다.
이러한 naming 방식은 자바언어에서만 사용되는 것은 아니지만, 대세로 되어 있는 것 같습니다.

필자, 이와 다른 의견은 던지고 싶습니다.
소문자와 "_" 문자를 사용하는 방식, 즉 이전에 C 언어에서 자주 사용하던 방식을 추천합니다.
물론 모든 naming을 이런 식으로 할 것을 주장하는 것은 아닙니다.

자바의 클래스명과 같이 좀더 구별이 필요한 경우는 당연히 앞에 대문자로 시작하는 것이 바람직 하겠습니다.
하지만, 프로그램 중간에 수도 없이 나오는 변수명, 함수명은 되도록이면 소문자로 만들기를 추천합니다.

이렇게 추천하는 이유는 다음과 같습니다.
첫째로, 단순하다고 할 수 있겠지만, 프로그램 개발 할 때, 조금 덜 피로하다는 것입니다. 대문자와 소문자를 변수나 함수를 사용할 때 마다 타이핑한다고 한다면, 대문자를 치기 위해서 쉬프트키를 수도 없이 함께 눌려야 하면, 오타의 확률도 많기 때문에 더 많은 피로감을 준다고 생각합니다.

둘째로, 의외로 가독성에 문제가 없습니다. 도리어 "_" 문자로 연결된 명칭들은 띄워쓰기를 한 것 같아서 가독성에 도움이 될 수도 있습니다.

자바나 객체지향 개념이 나오기 전에는 모두가 대문자 혹은 소문자와 "_" 문자로 변수명/함수명을 사용했습니다.

그 당시에도 가독성은 중요했고, 충분히 만족했다고 생각합니다.

물론 익숙하지 않을 수도 있지만, 몇번만 시도해 보시길 권해 봅니다.
필자도 개발 경력 10년은 가지고 있지만, 두 가지 (자바 스타일의 naming과 고전적(?) naming)을 적절히 혼용해서 사용하고 있습니다. 즉 두가지 모두에 익숙하다는 것입니다.
참고로, 필자가 주로 사용하는 언어도 Java 입니다. 오해 없으시길 바랍니다. 끝.
Posted by bomsoft
TAG java, Naming, RP

Java 언어에서는 예외처리를 위해서 Exception이라는 클래스를 이용해서 throw 및 catch를 하게 됩니다.

많은 Software Engineer (SE) 들은 여러 가지 경우의 예외를 처리하기 위해서, 일반적으로 Exception으로부터 상속된 새로운 Exception을 만들어 사용하거나, Sun에서 배포되는 Java Development Toolkit에 포함되어 있는 다양한 Exception들을 사용하게 됩니다.

하지만, 실제 프로젝트를 수행하다 보면, SE가 의도한 Exception 에 대해서만 catch를 수행하고 가장 기본적인 Exception에 대한 처리는 누락하는 경우가 많습니다. 가장 흔하게 볼 수 있는 경우가 NullPointerException의 경우입니다.

예를 들어보면, DB SQL 관련 처리를 할 경우 아래와 같은 코드가 있다고 가정해 봅니다 (완전한 코드가 아니고 설명을 위한 예시입니다).

// ----------------------------------------------------

try {

            String sql_cnt = "SELECT count(*) FROM table_a ";

            PreparedStatement pstmt = conn.prepareStatement(sql_cnt);
            ResultSet rs = pstmt.executeQuery();
            if(rs.next()) {
                    int cnt = rs.getInt(1);
            } else
            {
                    System.out.println("no data");

            }
            rs.close();
            pstmt.close();
} catch (SQLException sqlex) {

            // sqlexception에 대한 처리....

}

// ----------------------------------------------------

위와 같은 코드에서 별 문제가 없다면, 아주 잘 돌아가는 코드일 것입니다. 하지만, 실제 run-time 에서는 예상하지 못하는 경우가 종종 발생하게 마련입니다. 위의 코드 중에서

(1) conn.prepareStatement(sql_cnt)
(2) rs.next()

(3) pstmt.executeQuery()

와 같은 코드에 대한 처리를 완벽하게 했다고 말하기는 어렵습니다. 그 이유는 conn, rs, pstmt는 언제든지 null이 될 가능성이 있다고 할 수 있기 때문입니다. 물론 너무 비약하는 것이라고 말할 수도 있지만, 예를 드는 것이라는 점을 감안해야 합니다.

이런 가정 하에서의 모든 예외를 극복하기 위해서는 기본 클래스인 Exception에 대한 catch도 반드시 추가하여 최소한의 NullPointerException에 대한 처리를 추가해 주어야 한다고 생각합니다.

....

} catch (SQLException sqlex) {

            // sqlexception에 대한 처리....

} catch (Exception ex) {

           // 예외 처리...

}


필자는 요즘도 너무나 많은 NullPointerException들과 싸우고 있으며, 이런 잔잔한 오류들은 전체 시스템을 알 수 없는 불안정으로 몰아가기도 합니다.

Posted by bomsoft

Java Application을 JVM (Java Virtual Machine)을 통해서 실행된다는 점을 제외하면 다른 언어로 만든 프로그램과 다른 점이 없습니다.


흔히, C/C++ 언어를 이용해서 윈도우즈 환경에서 코딩하여 컴파일 하면 .exe 파일로 생성되는 프로그램과 기능적인 차이는 없습니다.


다만, .exe 파일은 그냥 그대로 실행되지만, java application은 java.exe 와 같은 jvm을 통해서 실행이 됩니다.


java applet은 웹프라우져 안에서 실행되도록 만들어진 것입니다. 인터넷에서 html 과 같은 정적인 화면을 극복하는 용도로 많이 사용되는데, 웹 브라우져 안에서 실행되기 때문에 약간의 제약사항이 있습니다.


즉, java applet은 사용자 컴퓨터의 자원 (파일, 기타 장치 등)에 접근할 수 없고, java applet이 통신하여 원래의 웹서버가 아닌 다른 서버로의 통신 연결도 제한됩니다. 이밖에서 보안 및 안정성을 위한 제약사항이 좀 있습니다.


java servlet은 웹서버에서 실행되기 위해서 제공되는 형식입니다. java applet이 웹브라우져 안에서 실행되는 것과 비슷하게 servlet은 tomcat, resin, iplanet 과 같은 servlet container 라는 서버 안에서 실행되도록 되어 있습니다.


java servlet도 이에 따른 형식이 정해서 있기 때문에 약간의 제약이 있다고 봐야 겠습니다. servlet의 단점과 웹 프로그램의 활성화를 위해서 jsp (java server page) 라는 형식도 있습니다.

Posted by bomsoft
TAG java

Java에 있어서, String 변수가 가지고 있는 값이 유효한 값인지 체크하는 경우는 상당히 많습니다. 많은 개발자들이 비슷하지만 다양한 방법으로 체크를 하는 코드를 작성하고 있습니다.

예를 들면, String의 equals() 함수를 이용해서

    if ( !(str.equals("") ) {
        // OK~~!
    }

와 같이 검사하는 경우가 종종 있습니다.

이렇게 하게 되면, 우선 null 인지 여부를 누락하는 것이고, String 변수에 garbage 값이 들어 있는 경우 오류가 발생할 소지가 있습니다.

따라서, robust programming 에서는 다음과 같이 체크할 것을 권장합니다.
------------------------------------------------------------
String str;

//........<중간생략>........

if (str != null && str.length > 0) {          
    // 유효한 값으로 처리
}
------------------------------------------------------------
여기서, 기본적으로 null 인지 검사하고, 문자열의 길이를 체크함으로써 유효한 값을 가지고 있는 지 검사하는 방법입니다.
이런 방식은 str = "" 의 값을 가질 경우도 유효하지 않은 것으로 가정하는 경우입니다.
str = "" 도 유효하지 않다고 가정하는 이유는, 문자열이 null 은 아니지만 실제로 아무런 값도 가지고 있지 않게 되면 일반적으로, 이와 관련이 있는 다른 코드에서 오류를 유발하는 것을 방지할 수 있기 때문입니다.

또한, 길이 즉 숫자를 체크하는 것이기 때문에, 체크를 위한 속도 측면에서도 권할만 합니다.

Posted by bomsoft
TAG java, RP, String

데이터베이스 유저 아이다와 암호가 "user1", "passwd" 라고 가졍합니다.

String hostname= "host1";  // 오라클 데이테베이스가 운영되고 있는 서버명, 혹은 아이피.
String portnum = "1521";   // 접속 포트 번호, 일반적으로 1521 입니다.
String dbname = "orcl";   // 오라클 데이터베이스 인스턴스 이름.
String dbuser= "user1";
String dbpass= "passwd";

public java.sql.Connection get_connection (String hostname, String portnum, String dbname, String dbuser, String dbpass)
   
throws Exceptions
{      
    String dburl = "jdbc:oracle:thin:@" + hostname + ":" + portnum + ":" + dbname ;
    Class.forName("oracle.jdbc.driver.OracleDriver");
    java.sql.Connection conn = DriverManager.getConnection(dburl, dbuser, dbpass);
    return conn;
}

Posted by bomsoft
TAG java, jdbc, Oracle, RP