자바 학습 환경 준비

  Java를 이용한 프로그래밍을 시작하기 전에 갖추어야할 조건들이 몇가지 있는데 그 중 하나가 PC 내에 개발환경을 구성하기 위해서 필요로 하는 JAVA JDK 이다. 개발환경이란 자바로 프로그램을 만들 수 있는 컴퓨터 환경을 말한다. 즉 프로그램 소스를 작성하는 툴, 작성한 소스를 컴파일 하는 프로그램 등을 설치해야 하는 것이다.  

1. www.oracle.com 에서 JDK 설치 파일을 다운 받습니다. Java SE 다운로드 페이지에서 Oracle Binary Code License Agreement for Java SE 에 동의한 후 자신의 플랫폼에 맞는 설치 파일을 다운로드 합니다. 여기서는 윈도우즈에 설치할 것이기 때문에 32ibt 또는 64bit 중에서 선택을 합니다. ( jdk-8u111-windows-x64.exe ) 참고로 64bit 컴퓨터에는 32bit JDK도 설치할 수 있습니다. 과거에 개발된 프로그램을 유지보수할 경우 구버전의 JDK 가 필요할 경우가 있습니다. 이런 경우 필요한 버전의 JDK를 여러 종류 설치해 두고 사용할 수 있습니다. 다른 방법으로는 상위버전의 JDK 를 설치하고 컴파일시에 생성되는 class 파일을 특정 VM version 으로 지정하여 컴파일 하는 방법도 사용할 수 있습니다. 

2. 설치할 곳을 결정합니다. 기본 설치 위치는 C:\Program Files\Java  이지만, 여기서는 C:\util\java 에 설치 하겠습니다. 예전에는 설치시 "Program Files" 처럼 폴더명에 스페이스가 있거나, 한글이 있을 경우 응용프로그램이 문제를 일으키는 경우가 있었습니다. 요즘은 문제가 되는 경우가 잘 없는 것 같습니다. 설치 위치는 자신이 마음에드는 곳에 설치하거나 C 드라이브의 용량등으로 결정되는것 같습니다. 설치 프로그램을 더블클릭하여 실행합니다. 환영화면에서 Next>버튼을 누릅니다.

 

 3. 설치위치를 지정하는 곳입니다. Change... 버튼을 눌러 위치를 지정합니다. 설치될 항목을 선택할 수 있습니다. JDK, 소스파일, JRE 가 설치되는데 기본으로 모두 설치합니다. 소스파일이 설치가 되면 이클립스와 같은 개발툴에서 개발 도중 소스를 볼 수가 있습니다. 다음에 Next> 버튼을 누릅니다.

 

 4. Change... 버튼을 눌렀을때 설치위치를 고르는 화면 입니다. 위치를 선택한 후 OK 를 누릅니다.

 

 5. 진행 막대가 보입니다.

 

 6. 설치중 새로운 창이 뜨면서 jre 를 설치하라고 합니다. 여기서 jre의 위치를 변경 버튼을 눌러서 바꿔줍니다. 그리고나서 다음 버튼을 누릅니다.

 

 7. jre 설치 진행중입니다. 인터넷이 연결되어 있지 않을 경우 JRE 설치에 문제가 발생하는 경우가 있었습니다. 설치가 더이상 진행되지 않고 현재 상태로 멈춰 버리는 경우인데, 윈도우 작업관리자에서 강제로 종료하면 jre는 설치가 안되고  JDK 는 설치가 되어 있는 상태가 됩니다. jre가 필요 없다면 이후 JDK는 제대로 동작을 하였습니다.

 

 8. 설치가 모두 완료 되었습니다. Close 버튼을 눌러서 마칩니다.

 

 9. 설치 확인을 해봅니다. Window +R 버튼을 눌러  cmd 를 입력해서 명령창을 띄웁니다. 프롬프트에서 java -version 을 입력해서 출력 내용을 확인합니다. 아래와 같이 나오면 제대로 설치가 된것 입니다.

출력된 내용을 보면 Java(TM) SE Runtime Environment 라고 표시된 것이 보입니다. JRE 의 java 프로그램이 실행된 것입니다. JRE의 실행파일이 있는 폴더가 자동으로 PATH에 등록이 된 것입니다. 필요하다면 JDK 가 설치된 곳 아래의 bin 디렉토리도 PATH 에 등록을 해두면 되겠습니다. JDK 가 설치된 폴더를 JAVA_HOME 환경 변수에 등록해 두어도 됩니다. JAVA_HOME 환경변수를 필요로 하는 응용프로그램들이 종종 있습니다. 물론 필요할 때 등록해도 됩니다.

JDK 를 설치하였는데, 중간에 jre 도 설치가 되었습니다. 두 가지를 간단히 설명을 하겠습니다. JDK 는 Java Development Kit 의 약자이고, jre는 Java Runtime Environment 의 약자 입니다. 말 그대로  JDK 는 개발용입니다. Java 소스코드를 컴파일 하는 기능이 있습니다. jre 실행환경이라고 불리는데, 컴파일된  class 파일을 실행하는 기능을 가집니다. 자바 관련 프로그램들이 JDK 가 필요한 것도 있고,  jre 만 있어도 되는 것도 있습니다. 보통 설치시 뭐가 필요합니다. 하는 메세지가 나오게 됩니다.

개발시에는 에러메세지와 친숙해질 필요가 있습니다. 에러메세지가 나오면 창을 닫는데 급급한 사람들이 많은데, 에러메세지를 잘 읽고 대처법을 찾아보는게 중요합니다. 개발을 하면 당연히 에러를 찾아서 수정하는 디버깅을 하게 됩니다. 디버깅을 도와주는 많은 툴과 기법들이 있지만, 경험만큼 중요한게 없는것 같습니다. 많은 에러메세지를 만나고 디버깅을 하다보면 감이라는게 생기는것 같습니다. 애매한 에러메세지들, 같은 메세지이지만 서로 원인이 다른 경우 등 디버깅이 어려운 경우더라도, 이러한 상황에서 이러한 에러는 이러한 경우에 주로 발생하더라 라는 경험이 더욱 빠른 디버깅을 도와 주게 됩니다.

Programming 의 P

  대부분의 집 현관에 있는 디지털 도어락에도 프로그램이 있다. 문을 열기 위해 비밀번호를 입력한다. 그러면 도어락에 있는 프로그램이 저장되어 있는 비밀번호와 동일한지를 확인해 본다. 만약 저장되어 있는 값과 입력한 비밀번호가 동일하면 문이 열린다.

프로그램을 작성하는 것은 이 디지털 도어락과 전혀 다르지 않다.

1. 미리 만들어 놓은 어떤 프로그램에 비밀번호를 전달하여 결과를 기다릴 수도 있고
2. 비밀번호가 맞는지 확인하는 것을 직접 작성할 수도 있다.

프로그래밍을 한다는 것은 모두 이러한 작업을 반복적으로 수행하면서 어떤 기능들을 만들어 내는 것이다.

  이렇게 어떤 값을 입력하고, 결과를 제공해 주는 프로그램을 만들려면 언어가 필요하다. 사람과 컴퓨터 사이에도 언어가 필요하다. 이러한 언어를 프로그램밍 언어라고 한다. Java라는 것도 프로그래밍 언어의 일종이다.

  인터넷을 통해서 매일 접하는 웹 페이지를 구성하는 것은 HTML이며, 이 페이지가 살아서 움직이도록 하려면 자바스크립트라는 것을 사용한다. (이름은 비슷하지만, 자바와 자바스크립트는 전혀 다르다) 이 웹 페이지에서 어떤 정보를 요청하기 위해서 클릭을 하면 서버에 데이터를 요청한다. 그러면 서버는 필요한 데이터를 가공해서 화면에 보여준다. 여기서 서버의 프로그램에 해당하는 부분에서 데이터를 가공하여 화면에 보여 줄 수 있도록 한다. 이 때 사용하는 것이 바로 자바, C, 파이선, PHP 등등의 프로그래밍 언어들이다.

 

자바 프로그램의 메소드 구성

  위에서 얘기했던 도어락의 비밀번호를 확인하는 것을 자바 프로그램으로 작성해 보도록 하자.

첫번째 입력한 비밀번호가 필요할 것이며, 두번째는 입력한 비밀번호가 저장된 비밀번호와 일치여부를 체크하는 부분이 있을 것이며, 마지막으로 결과값이 있을 것이다.

즉, password라는 비밀번호가 넘어가고, 중간에 계산을 하는 부분이 checkPassword()라는 것이다. 그리고, 그 결과로 boolean이라는 것이 나온다.

  이렇게 어떤 값을 주고 결과를 넘겨주는 것을 자바에서는 메소드라고 한다. 즉, checkPassword()라는 것은 메소드 이름이 된다. 여기서 password 라는 것은 매개 변수라고 부른다. 이 매개변수는 필수는 아니다. 마지막으로 boolean이라는 것을 리턴 타입이라고 부른다. 지금까지의 내용을 자바로 바꾸어보면 다음처럼 될것이다.

public boolean checkPassword(String password){

// 비밀번호 검증

}

public을 접근 제어자라고 한다는 것까지 기억해두고 다음으로 넘어가자

boolean : 리턴타입
checkPassword : 메소드
String password : 매개변수

 

자바의 가장 작은 단위 클래스 

  checkPassword() 라는 메소드는 소속이 필요하다. 자바 프로그램의 메소드는 홀로 존재 할 수는 없고, 반드시 클래스라는 것 안에 포함되어야 한다.

public class DoorLockManager {

}

  여기서 DoorLockManager라고 적혀있는 것이 바로 클래스 이며, 클래스 이름 앞에는 반드시 class 라는 단어가 있어야 한다. 여기에도 메소드 앞에서 보았던 접근제어자 public 이 있는 점만 확인하도록 하자. 클래스를 선언하려면 "접근제어자 class 클래스 이름" 순서라는 것을 기억하자.

  그러면 지금까지 내용을 모아보면 다음과 같을 것이다.

public class DoorLockManager {

public boolean checkPassword(String password){

}

}

이렇게 클래스 안에 메소드를 위치시키면 된다. 하나의 클래스 안에는 여러개의 메소드가 존재할 수 있다. 도어락을 생각해보면 비밀번호를 변경할 수도 있고, 잊어버렸을 경우 초기화 하는 기능도 있다. 바로 이 비밀번호 변경과 초기화 기능이 각각의 메소드 형태로 존재하게 되는 것이다.

public class DoorLockManager {

public boolean checkPassword(String password){

}

public void setPassword(String password){

}

public void resetPassword(){

}

}

새롭게 추가된 비밀번호 변경(setPassword)과 초기화(resetPassword) 메소드의 리턴 타입으로 void 라고 정의되어 있는 것을 볼 수 있다. void 라는 리턴 타입은 이 메소드가 수행되어도 아무것도 돌려주는 것이 없다는 뜻이다.

 

클래스는 상태를 갖고 있어야 한다. 

  지금까지 얘기해온 클래스라는 것은 다음의 조건을 만족해야만 한다.

  클래스는 상태(state)와 행동(behavior)이 있어야만 한다.

그리 어려운 내용은 아니고, 지금까지 알아본 메소드가 바로 "행동"이다. 그렇다면 상태는? 상태라는 것은 클래스의 특성을 결정짓는 것을 말한다. 이 상태는 클래스 안에, 메소드 밖에 정의한다.

  앞에서 살펴본 클래스에는 다음과 같이 currentPassword라는 값이 존재할 수 있다.

public class DoorLockManager {

String currentPassword;

public boolean checkPassword(String password){

}

}

  이와 같이 어떤 값을 포함할 currentPassword와 같은 것을 변수라고 한다. 이 변수가 클래스의 특성을 결정짓는 "상태"에 해당한다.

  객체지향을 이야기할 때 앞서 정의한 것처럼,

클래스는 상태(state)와 행동(behavior)이 있어야만 한다.

라고 보통 이야기 하지만, 꼭 "상태"와 "행동"이 있어야 하는 것은 아니다. 클래스를 만들었는데  변수나 메소드가 없다고 클래스가 아니라고 할수는 없기 때문이다.

 

프로그램 기본 =를 이해하자. 

  일반적으로 산수를 할 때,

  1+2=3

  과 같이 계산을 왼쪽에, 결과를 우측에 지정한다. 하지만 프로그램을 할 때는 반대다. 프로그램에서는 아래와 같이 왼쪽에 대입을 할 변수를, 오른쪽에 계산식을 적어 주어야만 한다.

  int a;
  a=1+2;

  이렇게 적어주면 a라는 변수에 3이라는 값이 들어가게 된다. 여기서 int a 라고 적어준것은 a라는 정수형 변수를 선언한 것이다. 변수를 선언할 때는

  타입 변수명;

  과 같이 지정해 주면 된다.

public class Calculator {

public int add(int num1, int num2) {

int sum;

sum = num1 + num2;

return sum;

}

}

  위 코드에서 확인 할 수 있는 것처럼 a=1+2; 처럼 프로그램의 연산에서는 숫자만 더할 수 있는 것이 아니라, 숫자를 나타내는 변수도 더할 수가 있다.

  add() 메소드의 가장 마지막 줄에 있는 return이라는 것은 어떤 값을 돌려줄 때 지정한다.

  지금까지 위에 나온 소스들을 보면 줄 끝에 세미콜론(;)을 확인 할 수 있다. 자바에서 줄의 끝에 뜻하는 표시이다.

 

자바에서 사용하는 기본적인 사칙연산

더하기 +  , 빼기 -  , 곱하기 *  , 나누기 /

 

모든 프로그래밍 언어에는 예약어라는 것이 있다. 

public class Calculator {

public int add(int num1, int num2) {

int sum;

sum = num1 + num2;

return sum;

}

}

여기에 있는 예약어에는 public, class, int, return 이다. 예약어라는 것은 "예약되어 있으니까 다른 용도로 쓰지 못하는 단어"라고 이해하면 된다. 식당에서 예약석에 먼저온 다른 손님을 앉히지 않는 것 처럼 말이다. 일단 여기서는,

  예약어라는 것이 있고,

  예약어는 클래스, 메소드, 변수의 이름으로 사용할 수 없다.

는 정도만 기억하도록 하자.

 

연습문제

1. Calculator 라는 이름을 갖는 클래스를 텍스트 파일에 만들어 보자.

2. 다음과 같은 메소드를 만들어 보자(단, 그 결과를 리턴해 주도록 만들자)

   빼기 : public int subtract(int num1, int num2)
   곱하기 : public int multiply(int num1, int num2)
   나누기 : public int divide(int num1, int num2)

 

정리

1. 클래스란?

2. 메소드란?

3. 메소드의 매개 변수는 어디에 적어주지?

4. 메소드 이름 앞에 꼭 적어 줘야 하는 건?

5. 클래스가 갖고 있어야 하는 두 가지는?

6. 메소드에서 결과를 돌려주기 위해 사용하는 예약어는?

여기서는 오라클에 간단히 데이터를 입력/수정/삭제 테스트를 위한 샘플 소스를 보여준다. 귀찮더라고 입력해보고 실제로 되는지 꼭 확인 하시요!


1. 입력 테스트 소스

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.SQLException;

 

public class InsertTest {

    public static void main(String[] args) {

        //1. 4가지 정보

        String driver ="oracle.jdbc.driver.OracleDriver";    // ojdbc6_g.jar 파일내의 핵심 클래스

        String url = "jdbc:oracle:thin:@localhost:1521:xe"; //DB가 설치된 정보 

        String userid = "user01";

        String passwd = "1234";

          

        //2. 드라이버 로딩(OracleDriver 메모리에 올리는 작업)

        //문자열 형태의 클래스를 메모리에 올리는 방법. (new 사용안함)

        try {

            Class.forName(driver);

        } catch (ClassNotFoundException e) {

            e.printStackTrace();

        }

        

        //3. Connection 맺기(DB 연결)

        Connection con = null;

        PreparedStatement pstmt = null;

        try {

            con = DriverManager.getConnection(url,userid,passwd);

            

            //4. SQL문 작성 *주의* Java코드는 ; 안함 

            String sql = "insert into person ( per_no, name,age,address) values( ?, ?, ?, ?) "; //?는 값을 나중에 입력한다는 뜻

            

            //5. sql문 전송하는 객체인 PreparedStatement 생성

            pstmt = con.prepareStatement(sql);

            

            //6. ?에 값설정

            pstmt.setInt(1, 1); //1부터 시작

            pstmt.setString(2, "유재석"); //1부터 시작

            pstmt.setInt(3, 44);

            pstmt.setString(4, "서울");

            

            //7. sql 전송

            /* 전송메소드는 2가지가 있다.

             * 

             *  (1) ResultSet rs = pstmt.executeQuery()

             *  -select 문에서 사용

             *  -ResultSet는 select문의 실행된 결과를 참조하는 객체.

             *  

             *  

             *  (2) int n = pstmt.executeUpdate()

             *  - insert , delete, update 문에서 사용

             *  - n 값은 실행된 레코드 갯수 ex) n개의 행에 적용되었습니다.

             */

            

            int n = pstmt.executeUpdate();

            if(n==1){

                System.out.println("성공");

            }else{

                System.out.println("실패");

            }            

            

        } catch (SQLException e) {

            e.printStackTrace();

        }finally {

            // Connection, PreparedStatment 자원을 반납

            // 실행 역순으로 반납

            

            try {

                if(pstmt != null) pstmt.close();

                if(pstmt != null) con.close();

            } catch (SQLException e) {

                e.printStackTrace();

            }

        }

    }

}


2. 수정 테스트 소스

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.SQLException;

 

public class UpdateTest {

 

    public static void main(String[] args) {

 

 

        //1. 4가지 정보

    

        String driver ="oracle.jdbc.driver.OracleDriver";    // ojdbc6_g.jar 파일내의 핵심 클래스

        String url = "jdbc:oracle:thin:@localhost:1521:xe"; //DB가 설치된 정보 

        String userid = "user01";

        String passwd = "1234";

        

        

        //2. 드라이버 로딩(OracleDriver 메모리에 올리는 작업)

        //문자열 형태의 클래스를 메모리에 올리는 방법. (new 사용안함)

        try {

            Class.forName(driver);

        } catch (ClassNotFoundException e) {

            e.printStackTrace();

        }

        

        //3. Connection 맺기(DB 연결)

        Connection con = null;

        PreparedStatement pstmt = null;

        try {

            con = DriverManager.getConnection(url,userid,passwd);

            

            //4. SQL문 작성 *주의* Java코드는 ; 안함 

            String sql = "update person set age = ?, address = ? where name= ?"; //?는 값을 나중에 입력한다는 뜻

            

            //5. sql문 전송하는 객체인 PreparedStatement 생성

            pstmt = con.prepareStatement(sql);

            

            //6. ?에 값설정

            pstmt.setInt(1, 35); //1부터 시작0

            pstmt.setString(2, "경기");

            pstmt.setString(3, "유재석");

            

            //7. sql 전송

            /* 전송메소드는 2가지가 있다.

             * 

             *  (1) ResultSet rs = pstmt.executeQuery()

             *  -select 문에서 사용

             *  -ResultSet는 select문의 실행된 결과를 참조하는 객체.

             *  

             *  

             *  (2) int n = pstmt.executeUpdate()

             *  - insert , delete, update 문에서 사용

             *  - n 값은 실행된 레코드 갯수 ex) n개의 행에 적용되었습니다.

             */

            

            int n = pstmt.executeUpdate();

            if(n==1){

                System.out.println("성공");

            }else{

                System.out.println("실패");

            }            

            

        } catch (SQLException e) {

            e.printStackTrace();

        }finally {

            // Connection, PreparedStatment 자원을 반납

            // 실행 역순으로 반납

            

            try {

                if(pstmt != null) pstmt.close();

                if(pstmt != null) con.close();

            } catch (SQLException e) {

                e.printStackTrace();

            }

 

        }

 

    }

 

}


3. 삭제 테스트 소스

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.SQLException;

 

public class DeleteTest {

 

    public static void main(String[] args) {

 

 

        //1. 4가지 정보

    

        String driver ="oracle.jdbc.driver.OracleDriver";    // ojdbc6_g.jar 파일내의 핵심 클래스

        String url = "jdbc:oracle:thin:@localhost:1521:xe"; //DB가 설치된 정보 

        String userid = "user01";

        String passwd = "1234";

        

        

        //2. 드라이버 로딩(OracleDriver 메모리에 올리는 작업)

        //문자열 형태의 클래스를 메모리에 올리는 방법. (new 사용안함)

        try {

            Class.forName(driver);

        } catch (ClassNotFoundException e) {

            e.printStackTrace();

        }

        

        //3. Connection 맺기(DB 연결)

        Connection con = null;

        PreparedStatement pstmt = null;

        try {

            con = DriverManager.getConnection(url,userid,passwd);

            

            //4. SQL문 작성 *주의* Java코드는 ; 안함 

            String sql = "delete from person where name=?"; //?는 값을 나중에 입력한다는 뜻

            

            //5. sql문 전송하는 객체인 PreparedStatement 생성

            pstmt = con.prepareStatement(sql);

            

            //6. ?에 값설정

            pstmt.setString(1, "유재석"); //1부터 시작

            

            //7. sql 전송

            /* 전송메소드는 2가지가 있다.

             * 

             *  (1) ResultSet rs = pstmt.executeQuery()

             *  -select 문에서 사용

             *  -ResultSet는 select문의 실행된 결과를 참조하는 객체.

             *  

             *  

             *  (2) int n = pstmt.executeUpdate()

             *  - insert , delete, update 문에서 사용

             *  - n 값은 실행된 레코드 갯수 ex) n개의 행에 적용되었습니다.

             */

            

            int n = pstmt.executeUpdate();

            if(n==1){

                System.out.println("성공");

            }else{

                System.out.println("실패");

            }            

            

        } catch (SQLException e) {

            e.printStackTrace();

        }finally {

            // Connection, PreparedStatment 자원을 반납

            // 실행 역순으로 반납

            

            try {

                if(pstmt != null) pstmt.close();

                if(pstmt != null) con.close();

            } catch (SQLException e) {

                e.printStackTrace();

            }

 

        }

 

    }

 

}

'데이터베이스' 카테고리의 다른 글

eclipse + Oracle 연동 및 테스트  (0) 2017.01.05

+ Recent posts