자바의 Thread, 입출력

두부링·2024년 12월 26일

java

목록 보기
10/13

git

git

git fetch origin/master + git merge origin/master
= git pull origin master

<올리는 과정>
수정 -> add -> commit ->pull-> push

pull에서 충돌이 생기면 해결하고 다시 add ->commit -> pull->

래희야 사진을 생각해,,,git은 사진 변경 저장소얌...
만약에 너가 충돌이 났어 그러면 해결하고 add하고 commit해서 사진을 찍어야겠지

자바

1. 검색 누르면 창에 홈페이지 내용 출력

14-frame05

2. 스레드(Thread) = 작업단위

  • 일련의 진행의 흐름
  • 흐름이 넘어가거나 돌아옴

2-1. 스레드 생성의 필요성

시간이 걸리는 작업을 어떻게 처리할까?

  • Gui는 종료되지 않고 계속 진행되서 대기중 그러다가 버튼을 누르면 흐름이try- catch로 가는데 그 때 thread로 잡혀있을 때 아무것도 하지 못함
  • main 스레드는 시간이 많이 걸리거나 불확실한 작업을 하면 안돼

흐름이 하나이기에 생기는 문제점이 아닌가?
맞음, 새로운 작업단위를 만들어서 작업시킴

스레드 생성 방법

<새로운 스레드 만드는 방법> = 상속
1. Thread 클래스를 상속 받은 클래스를 정의한다.
2. run() 메소드를 오버라이드 한다.
3. run() 메소드 안에서 새로운 스레드에서 해야 할 작업을 코딩한다.

  • 시간이 오래 걸리거나 불확실한 작업
  1. 만든 클래스로 객체를 생성하고 해당 객체의 start() 메소드를 호출하면 새로운 스레드가 시작된다.

<상속받은 클래스 정의>

<객체 생성 및 메소드 호출하기>

새로운 작업단위를 객체로 생성하고 그 객체의start()메소드 호출

<새로운 스레드 만드는 방법2> = 인터페이스
1. Runnable 인터페이스를 구현할 클래스를 정의한다.
2. run() 메소드를 강제 오버라이드 한다.
3. Thread 클래스로 객체를 생성하면서 해당클래스로 만든 객체를 생성자의 인자로 전달한다.
4. Thread 클래스로 만든 객체의 start() 메소드를 호출해서 스레드를 시작 시킨다.

<Runnalble 인터페이스 구현 클래스>

<만든 객체의 stati()메소드 호출1>

  • 객체 생성 및 외부에서 오버라이드 정의

    <만든 객체의 stati()메소드 호출2>
  • 객체 생성 및 안에서 override 하기

    <만든 객체의 stati()메소드 호출3>
  • 객체 생성을 변수에 안 담고 안에서 override 하기

    객체와 메서드 연결해서 활용한다.

스레드는 새로운 작업 흐름을 생성하여 추가하는 것

var

  • type 추론이 가능하다면 지역변수의 type 선언 대신에 var 로 선언 할수 있다.
  • 지역변수에만 사용가능, 필드는 안됨
  • 인터페이스 type 추론 불가

    var는 생성된 객체로 타입을 유추하는데 인터페이스는 객체를 직접 생성할 수 없어 불가능

  • null 로 초기화 불가 (null 은 빈공간이므로 어떤 타입이 들어갔는지 모름)

외부 내부 사용

  • 객체 외부에서는 참조값에 . 찍어서 호출할 수 있다.
  • 객체의 참조값을 이용해서 가능

3. Input Output

입력, 출력(Input Output)

  • 어떤 대상으로 부터 데이터를 메모리로 읽어 들이는 것을 입력이라고 한다.
  • 프로그래밍 언어의 관점에서 메모리라는 것은 변수 or 필드 or 객체 로 생각하면 편한다.

byte의 개념

  • 컴퓨터의 모든 데이터는 byte 알갱이로 되어있다.
  • 데이터는 2진수로 이루어져 있지만 2진수 8개의 묶음인 1byte 단위로 생각하면 편하다.
  • 1byte 는 총 256 가지의 값을 표현할 수 있다.
  • 1byte 를 10진수로 환산하면 0~255 사이의 숫자숭에 하나이다.
  • 입력과 출력을 통해서 이동하는 데이터는 byte(byte 알갱이) 하나 하나가 이동한다고 생각하면 된다.
  • 영어 이외에는 2byte가 필요함

    1byte에 256가지의 값이 들어갈 수 있는 가능성이 있으니 영여, 숫자, 특수기호 모두가 들어갈 수 있다.

여러가지 input output

  • 문자를 읽어들일 때는 1byte 처리가 불편하기에 scanner, bufferreader,InpustStreamreader 사용

    모두 오류 발생 가능성이 있으니 try-catch로 묶어야 함

input

1-1. inpustStream

  • 1byte 단위 처리 스트림(한글불가)
  • 0~255 사이의 숫자 중에 하나이다.
  • 문자열을 읽기에는 불편함

System.in 객체 안에 들어있는 메서드들

System.in은 in이라는 필드에 InputStream type 객체의 참조값이 들어있음.

1-2. inpustStreamreader

  • 한글 처리 가능한 객체
  • 65536가지를 표현할 수 있다.
  • inputStream의 확장 버전
  • 바이트 데이터를 문자 데이터로 변환

곽, 래, 희 등의 글자의 숫자를 알 수 있음

1-3. BufferedReader

  • 한 줄씩 읽어오는 객체

output

output는 방출(flush) 해야만 보인다.

1-4. OutputStream

  • 1byte 처리(한글불가)
  • 부모 type 인 OutputStream type으로 담는다.
  • 문자열을 출력하기에는 불편함

    <PrintStream이 OutPutStream type을 구현 받음>

System.out 객체 안에 들어있는 메서드를 이용

  • print(), println()... 등이 들어있다.

    System.out은 out이라는 필드에 PrintOuter type 객체의 참조값이 들어있음.

1-5. OutputStreamWriter

  • 한글 처리 가능한 객체

1-6. BufferedWriter

  • 줄 단위 출력이 가능한 객체
  • BufferedWriter의 객체.newLine()과 조합하여 줄 단위로 출력할 수 있다.

4.파일로 출력하기

4-1.원하는 파일에 문자열 작성

파일에 저장할 문자열 받기 -> 원하는 경로에 있는 File 객체를 생성 -> try-catch로 흐름 생성하기

파일 만들어지는게 성공하면 true 아니면 false

4-2. 콘솔창에 출력하는 예제

바이트가 존재하지 않으면 -1

4-3. 콘솔창에 출력하되 한 줄씩

더 이상 읽을 줄이 존재하지 않으면 null

4-4. 문자열을 누적시킨 후 한번에 출력

5. 자바 활용하기

5-1. Gui를 통해서 입력한 문자열을 메모장 출력

5-2. Gui의 Load 버튼을 누르면 창에 파일의 내용 출력

<질문>
1. 검색 누르면 창에 홈페이지 내용 출력 14-frame05
2. 한번 사용한 thread 는 재사용이 불가능 : 흐름이 끝난다고 생각할 수 있음

<to do 리스트>

  • 15 frame 인터페이스 구현 3개 다 해보기
profile
하이하잉

0개의 댓글