JAVA2 BASIC6

으누·2024년 8월 31일
0

JSON

데이터를 표현하는 방법(단순 텍스트)
데이터를 저장, 전송할 때 많이 사용되는 형식(Format)이다.
기존에는 XML, csv를 많이 사용했지만 이제는 이해하기도 쉽고
용량도 작은 JSON형식을 많이 사용한다.
어떤 언어를 사용하더라도 JSON 형식의 데이터로 전송할 수
있다. Map과 유사하다.

프로그램(일반적으로 '소프트웨어'라고 부른다.)

-특정 작업을 수행하는 명령어(소스코드)들의 모임
-메모리를 할당받지 않은 상태 -> 꺼져있다.(실행 안 된거)

프로세스

- 실행 중인 프로그램
- 프로세스는 프로그램을 실행시키기 위한 메모리 등의 자원과
쓰레드로 구성된다.
- 즉, 하나의 프로세스는 하나 이상의 쓰레드를 가지고 있다.

쓰레드

하나의 프로세스 내에서 처리하는 흐름의 단위
작업을 처리하는 것

싱글 쓰레드(단일 쓰레드)

하나의 쓰레드가 작업을 마치면 프로그램이 종료된다.
쓰레드를 하나만 가지고 있기 때문에 작업을 순차적으로 처리하므로
상대적으로 비효율적이다.
쓰레드는 자원을 사용하는데 싱글 쓰레드는 혼자서 자원을 사용하므로
동기화를 걱정할 필요가 없다.
따라서 안정성이 높고 설계가 쉽다.

멀티 쓰레드

메인 쓰레드가 작업을 마치더라도 다른 쓰레드의 작업이 모두 끝나야
프로그램이 종료된다.
하나의 프로세스에서 여러 작업을 동시에 처리하는 것 처럼 느껴지지만
사실은 각각의 쓰레드를 매우 빠른 속도로 번갈아가며 실행시켜서 조금씩
처리한다.
쓰레드간 공유하는 자원이 있다면 충돌이 생겨서 문제가 발생할 수 있으며
이런 문제를 동기화(Synchronized)를 통해 해결한다.
안정성이 떨어지고 설계가 어렵다.

멀티 쓰레드의 구현 방법

1. Thread 클래스 상속

2. Runnable 인터페이스 지정 받아 구현

- run() 메소드에 쓰레드가 처리할 작업을 재정의 한다.
- start() 메소드로 쓰레드를 실행시킨다.

동기화(Synchronized)

A쓰레드 B쓰레드가 작업을 진행할 때 A가 사용 중인 자원을 B가 사용하여 변경한다면
A의 작업 의도와는 다르게 결과가 나타날 수 있다.
이러한 것을 방지하기 위해 하나의 자원을 여러 쓰레드가 동시에 접근하지 못하게
막는 것을 동기화라고 한다.

동기화 영역 만들기

- 동기화 블럭
	일부 소스코드만 동기화를 걸어준다.
	synchronized(mutex){....}
		- mutex :  동기화를 걸어줄 객체(= 쓰레드 객체)
- 동기화 메소드
	해당 메소드 전체에 동기화를 걸어준다.
	public synchronized void add()
		- synchronized 키워드를 통해서 메소드 전체 동기화	

Thread 종료 방법

interrupted()
- sleep(), join()을 사용하여 쓰레드가 멈췄을 때 inturrupted를 사용하면 예외를 
발생시킬 수 있다.

	- sleep() : 주어진 시간 동안 쓰레드를 정지시킴
		sleep(500) -> 0.5초 정지
	- join() : 사용한 객체릐 쓰레드가 종료되어야지만 다른 쓰레드가 실행된다.


- InterrunptedException은 쓰레드를 멈출 때 사용하는 일종의 신호라고 생각하면 된다.

- interrupted() 메소드는 쓰레드 종료에 사용된다.
  1. 쓰레드 객체의 interrupted()를 사용하여 InterrunptedException을 발생시켜 try~catch문으로 이동시킨다.
    여기서 InterrunptedException은 쓰레드를 대기 상태로 만드는 sleep(), join()등의 메소드를 사용한
    곳에서 발생된다. 위의 메소드들에 예외처리를 하고 interrupt()를 통해 예외를 발생시키면 쓰레드 흐름이
    해당 메소드의 catch문으로 이동된다.
    예외 처리를 했다고 강제종료가 되는 것이 아니므로 catch문에 쓰레드가 종료될 수 있는 코드를 작성하여
    처리해줘야 한다.

  2. System.exit(0)을 사용하면 전체 쓰레드가 종료된다.(프로그램 종료)

  3. 쓰레드 객체를 대기상태로 만드는 메소드를 사용하지 않았을 경우 Thread.interrupted()를 사용하면
    interrupted()의 사용여부를 boolean타입으로 반환한다.
    이 점을 이용하여 쓰레드의 흐름을 제어할 수 있다.
    단, interrupted()를 한 번 사용하거나 예외처리로 catch문으로 이동하면 interrupted()는 다시
    false를 반환한다.


파일입출력

- 스트림(stream)
데이터를 주고받는 통로
데이터는 바이트 형태로 전송된다.

- 버퍼(buffer)
데이터를 전송할 때 데이터를 임시로 저장하는 공간(임시 저장공간)

- 스트림과 버퍼
데이터를 바이트 단위로 바로 전송하지 않고 버퍼라는 임시 저장공간에 저장을 하여
일정 데이터가 쌓였을 때 한 번에 전송하면 전송 속도가 빠르다.

File 클래스

파일을 자바 객체로 다룰 수 있게 해주는 클래스
외부에 파일을 만들거나 외부 파일을 가져올 떄 그 파일을 File타입 객체로
만들어서 사용한다.

파일 입출력

- Writer(출력)

	- BufferedWriter : 버퍼를 사용한 출력 클래스
	- FileWriter : 전달한 경로의 파일을 출력하기 위한 목적으로 열어준다.
		전달한 경로에 파일이 없다면 새롭게 만든 후 열어준다.
	- File

- Reader(입력)

	- BufferedReader : 버퍼를 사용한 입력 클래스
	- FileReader : 전달한 경로에 파일을 입력하기 위한 목적으로 열어준다.
		전달한 경로에 파일이 없다면 FlieNotfoundException 예외가 발생한다.
	- File 
profile
코딩 일기장

0개의 댓글