Java #10

황현근·2023년 5월 14일
0

Acorn-Academy

목록 보기
20/28
post-thumbnail

Thread (스레드)

스레드(thread)란, 프로세스(process) 내에서 실제로 작업을 수행하는 주체를 의미한다.

  • 모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행한다.
  • 두 개 이상의 스레드를 가지는 프로세스를 멀티스레드 프로세스(multi-threaded process)라고 한다.
프로세스(process)란 단순히 실행 중인 프로그램(program)이라고 할 수 있다.
프로세스는 프로그램에 사용되는 데이터와 메모리 등의 자원 그리고 스레드로 구성된다.


사용 예시

public class Sample extends Thread {
    public void run() {  // Thread 를 상속하면 run 메서드를 구현해야 한다.
        System.out.println("thread run.");
    }
  
    public static void main(String[] args) {
        Sample sample = new Sample();
        sample.start();  // start()로 쓰레드를 실행한다.
    }
}
  • 스레드는 stack을 가짐으로써 스레드는 독립적인 실행 흐름을 가질 수 있게 된다.

스레드 생성하기

  • 스레드를 생성하는 방법은 2가지다.
    • Thread 클래스 상속받아서 생성
    • Runnable 인터페이스 구현하여 생성

  • 방법이 2가지인 이유는 자바가 단일상속만 허용하기 때문이다. 만약 상속받아야 하는 클래스가 있다면 Thread 클래스를 상속받는 방법 대신 Runnable 인터페이스를 구현하는 방법을 사용할 수 있다.

I/O Stream

  • 단방향 통신을 지원하는 기능
  • 서로 통신을 위한 Input Stream / Ouput Stream 2개의 Stream이 필요
  • 일반적으로 2개의 Stream을 I/O Stream이라고 통칭
  • 출발지에서 도착지로 데이터를 운반하는 연결 통로

Input & Output

[ 입력, 출력 (Input, Output) ]

  • 어떤 대상으로 부터 데이터를 메모리로 읽어 들이는 것을 입력이라고 한다.
  • 프로그래밍 언어의 관점에서 메모리라는 것은 변수 or 필드 or 객체로 생각하면 편하다
  • 데이터는 2진수로 이루어져 있지만 2진수 8개의 묶음인 1byte 단위로 생각하면 편하다
  • 1byte 는 총 256 가지의 값을 표현할 수 있다.
  • 1 byte 를 10진수로 환산하면 0~255 사이의 숫자 중에 하나이다.
  • 입력과 출력을 통해서 이동하는 데이터는 byte(byte알갱이) 하나 하나가 이동한다고 생각하면 된다.

바이트 입출력 스트림

문자열 입출력 스트림


JDBC

JDBC ( Java DataBase Connectivity )

  • 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API이다. JDBC는 데이터베이스에서 자료를 쿼리하거나 업데이트하는 방법을 제공한다.
  • DataBase 에 연결해서 SELECT, INSERT, UPDATE, DELETE 작업하기
  • Oracle 에 연결하기 위해서는 드라이버 클래스가 들어있는 ojdbc6.jar 파일을 사용할 수 있도록 설정해야 한다.
Eclipse 에서 설정 방법
프로젝트에 마우스 우클릭 => Build Path => 
Configure Build Path => Librarys 탭 선택 => 
classpath 선택 => 우측 Add External jar 
버튼을 누른 후 => ojdbc6.jar 파일을 찾은 다음 =>
Apply

사용 예시

public class MainClass01 {
    public static void main(String[] args) {
        //DB 연결객체를 담을 지역 변수 만들기
        Connection conn=null;

        try {
            //오라클 드라이버 로딩
           Class.forName("oracle.jdbc.driver.OracleDriver");
            //접속할 DB 의 정보 @아이피주소:port번호:db이름
            String url="jdbc:oracle:thin:@localhost:1521:xe";
            //계정 비밀번호를 이용해서 Connection 객체의 참조값 얻어오기
            conn= DriverManager.getConnection(url, "scott", "tiger");
            //예외가 발생하지 않고 여기까지 실행순서가 내려오면 접속 성공이다.
            System.out.println("Oracle DB 접속 성공");
        } catch (Exception e) {
            e.printStackTrace();
        }

        //SELECT 작업을 위해서 필요한 객체의 참조값을 담을 지역 변수 미리 만들기
        PreparedStatement pstmt=null;
        ResultSet rs=null;
        try {
            //실행할 sql 문
            String sql="SELECT num, name, addr"
                    + " FROM member "
                    + " ORDER BY num DESC";
            //PreparedStatement 객체의 참조값 얻어오기
            pstmt=conn.prepareStatement(sql);
            //PreparedStatement 객체를 이용해서 query 문 수행하고 결과를
            //ResultSet 객체로 받아오기
            //SELECT 문 실행하고 결과 값을 ResultSet 으로 얻어내기
            rs=pstmt.executeQuery();
            /*
             *  ResultSet 객체의 .next() 메소드는 cursor 밑에 row 가 존재하는지 확인해서
             *  만일 존재하면 true 를 리턴하고 cursor 가 한칸 밑으로 이동한다.
             *  만일 존재하지 않으면 false 를 리턴한다.
             */
            while(rs.next()) {
                //현재 cursor 가 위치한 곳에서 num 이라는 칼럼의 정수 얻어내기
                int num=rs.getInt("num");
                //현재 cursor 가 위치한 곳에서 name 이라는 칼럼의 문자열 얻어내기
                String name=rs.getString("name");
                //현재 cursor 가 위치한 곳에서 addr 이라는 칼럼의 문자열 얻어내기
                String addr=rs.getString("addr");
                //콘솔창에 출력해보기
                System.out.println(num+" | "+name+" | "+addr);
            }
        }catch(Exception e) {
            e.printStackTrace();
        }
    }
}

0개의 댓글