JAVA-15

유명준·2024년 2월 6일

JAVA

목록 보기
13/15
post-thumbnail

1. File

1-1. 문자 인코딩(character encoding)이란 ?

  • 문자난 기호들의 집합을 컴퓨터에서 저장하거나 통신에 사용할 목적으로 부호화 하는 방법
  • UTF-8 : 8비트 이진수로 표현하는 방법

1-2. 스트림이란?

  • 입출력에서 stream이란 디바이스의 입출력 방식이 character 단위이든 block 단위이든
    관계없이 '1바이트' 씩 '연속'적으로 전달되는 형태로 추상화된 상태를 의미한다
  • 입출력 장치는 개별적인 특성이 있으므로 읽고, 쓰는 단위가 각각 다르지만, 스트림은
    이러한 일련의 과정을 추상화하여 모든 디바이스를 character 단위로만 사용하도록 한다
  • 즉, 입출력 디바이스의 특성을 무시하고 하나의 단일한 입출력 인터페이스로 다를 수 있도록
    하는 것이 stream이다.

1-3. 자바의 스트림 관련 클래스

  • 스트림 관련 클래스들은 각각 inputStream(입력/읽기),
    outputStream(출력/저장)과 관련된 인터페이스를 상속받기 떄문에 모두 동일한 메서드를 가지고 있다.
  • 프로그래머는 상황에 따라 적절한 클래스를 사용하기만 하면 동일한 방법으로 스트림을 사용할 수 있다.

1-4 파일 저장 관련

  • 저장을 위한 빈 파일 생성하기
    -> OutputStream의 객체를 생성한다
  • 파일에 내용 쓰기
    -> 저장할 내용을 byte 배열로 변환
    -> 변환된 배열을 OutputStream의 write()메서드에게 파라미터로 전달한다
  • 파일 닫기
    -> OutputStream 객체로 close() 메서드를 호출하여

1-5. 파일 저장시 유의사항

  • OutputStream은 각각의 단계마다 예외처리를 강제적으로 요구한다.
  • try~catch 블록이 형성되는 과정에서 변수의 유효성 범위에 대한 처리에 유의해야 한다.

1-6. 파일 읽기 과정

  • 파일을 읽기 위한 inputStream 객체 생성하기
  • 읽은 내욜을 담기 위한 빈 bate 배열 생성하기
    ->파일읭 용량 크기 만큼 배열의 사이즈를 지정해야 한다
  • 파일의 내용을 읽기
    ->읽은 내용을 담기 위한 baye배열을 inputStream 객체의 read() 메서드에게 파라미터로 전달한다
  • 사용이 완료된 스트림 닫기
    - InputStream 객체의 close() 메서드를 호출하여 스트림을 닫는다.
  • 읽은 내용을 문자열로 변환하기
    ->byte 배열을 String 클래스의 생성자에 전달하여 문자열로 변환한다.
    ->이 과정에서 어떤 인코딩을 사용할지 함꼐 설정해야 한다

2. Sanner

3. Thread

3-1. 프로세스(Process)

  • 운영체제에서는 실행중인 하나의 애플리케이션을 프로세스라고 한다
  • 사용자가 애플리케이션을 실행하면 운영체제로부터 실행에 필요한 메모리를 할당받아
    애플리케이션의 코드를 실행하는데 이것이 프로세스다.
  • 자원(resources)과 스레드로 구성

3-2. Thread란?

-하나의 프로세스 내부에서 독립적으로 실행되는 하나의 작업단위를 말하며,
세부적으로 운영체제에의해 관리되는 하나의 작업 혹은 데스크를 의마한다.

  • 하나의 실행 흐름,프로세스 내부에 존재

  • main () 실행문은 하나의 스레드

  • 이외의 또 다른 스레드를 만들려면 Thread 클래스를 상속하거나, Runnable 인터페이스를 구현한다.

  • 하나의 스레드는 하나의 코드 실행 흐름이기 떄문에, 한 프로세스내 스레드가 2개라면
    2개의 코드 실행흐름이 생긴다는 의미이다

    	프로세스 : 스레드 = 공장 : 일꾼 
  • 싱글 스레드 프로세스 : 자원 + 일꾼(스레드)

  • 멀티 스레드 프로세스 :자원 + 일꾼(스레드)+ 일꾼(스레드)+ ...

3-3. 멀티프로세스 vs 멀티스레드

  • 하나의 새로운 프로세스를 생성하는 것보다 하나의
    새로운 스레드를 생성하는 것이 더 적은 비용이 든다.

3-4. 멀티스레드의 장단점

  • 장점
    -> 자원을 보다 효율적으로 사용할수 있다.
    -> 사용자에 대한 응답성이 향상이된다.
    -> 작업이 분리되어 코드가 간결해진다.

  • 단점
    -> 동기화에 주의해야한다
    -> 교착상태(dead-look)가 발생하지 않도록 주의해야 한다.
    -> 각 쓰레드가 효율적이고 고르게 실행될 수 있게 해야 한다.

3-5. Thread 생성주기

  • New -> Runnable -> Running -> Dead
    strat() run()
  • New : 스레드가 생성되었지만 스레드가 아직 실행할 준비가 되지 않은 단계
  • Runnable : 스레드가 실행되기 위한 준비단계
  • Running : 선택된 스레드가 실행되는 단계
  • Blocked : 스레드가 작업을 완수하지 못하고 잠시 작업을 멈추는 단계

3-6 Runnable(준비상태)

  • 스레드가 실행되기 위한 준비단계이다
    CPU를 점유하고 있지 않으며 실행 (Running)을 하기 위해 대기하고 있는 상태이다. Ready 준비 상태라고 한다

3-7. Running(실행상테)

  • CPU를 점유하여 실행하고 있는 상태이며, run() 메서드가 호출된 상태이다.
  • Runnable(준비상태)에 있는 여러 스레드 중 우선 순위를 가진 스레드가 결정되면 JVM이 자동으로()

3-8. Thread의 run()과 start()의 차이

  • strat()
    -> Thread가 생성되며, Thread가 시작되면 run()메서드가 실행
    -> 멀티스레드로 동작한다.

  • run()
    ->Thread가 생성되지 않으며, 그냥 run()메서드만 실행
    -> 싱글스레드로 동작한다.

3-9. Thread 종료

  • Thread의 interrupt() 메소드는 스레드가 일시정지 상태에 있을때
    InterruptedException 예외를 발생시키는 역활을 한다.
  • 이것을 이용하면 Thread의 run() 메소드를 정상 종료시킬 수 있다.

3-10. 멀티 스레드 주의사항

  • 멀티스레드가 동시에 수행되면서 공유할 수 있을때, 공유되는 부분은
    상호 베타적으로 사용되야한다

  • DeadLock 문제
    - 멀티 스레드를 사용할 때 주의할 점중의 하나로 프로그램에서 스레드를 잘못 만들면
    프로그램의 수행이 이루어 지지 않고 무한 수행하는 DeadLock 을 만들 수 있다.

  • 임계영역
    -> 공유 자원을 사용하는 코드 영역을 임계영역이라고 한다
    -> 이 부분에서는 공유 자원을 동시에 수정할 수 없도록 상호 배타적으로
    실행될 수 있도록 작성 되어야 한다.

  • 자바에서 상호배제 문제를 해결하는 방법
    ->자바는 한 순간에 하나의 스레드만 실행할 수 있는
    symchronized method제공
    ->공유자원을 사용하는 영역을 symchronized(객체명)의 블록으로 지정

0개의 댓글