2020.11.05 일지

0후·2020년 11월 5일
0

비트캠프

목록 보기
14/112

오늘의 요약

1. 내부 클래스 ( Inner Class <-> Outer Class )
    클래스 안의 클래스
	
	(1) 객체 생성 방법 (외클 = 외부클래스, 내클 = 내부클래스
		1) 외클.내클 변수 = new 외클().new 내클(); // static 사용하지 않을 때
		2) 외클.내클 변수 = new 외클.내클(); // static 사용할 때

	(2) main 위치
		1)3클래스나 외부클래스에 있을 때는 동일하게 사용 가능
		2) static 내부클래스에서만 main을 정의할 수 있으나 호출은 어려움, 하지만 일반 메소드는 사용 가능
		( 이유 : static 내부클래스에서만 static 자원(멤버/메소드)을 정의할 수 있기 때문 )
		3) static 내부클래스에서는 외부클래스의 static 자원만 접근 가능 (B.java 예제 참조)

	(3) 쓰는 이유 (*****)
		외부 클래스의 자원(심지어 private 자원도 포함)'자기 것'처럼 사용하기 위해서

2. 쓰레드 ( Thread )
	프로세스를 구성하는 '제어의 흐름'
	
	(1) ProcessThread 
		1) Process: 프로그램의 '실행 단위'
		2) Thread: Process 를 구성하는 '작업 단위'

	(2) 장점
		쓰레드 '경량 프로세스'라고 불림
		이유는 프로세스의 공통 Resource 를 공유하기 때문임

	(3) 생성법 
		1) java.lang.Thread 상속법 // 클래스
		2) java.lang.Runnable 상속법 // 인터페이스

	(4) 시작
		쓰레드객체.start();

	(5) 비유: '피고용인 Employee' 

	(6) LifeCycle
		1) 5가지 상태
		2) 각 상태는 '메소드''스케줄러''시간'에 의해 이동함
		3) 한 번 죽으면 다시는 살아나지 못함
		* Scheduler 로 직접 핸들링을 할 순 없으나, 스케쥴러가 뽑아갈 수 있도록 우선순위를 부여할 수는 있다

	(7) Priority 
		1) Ready 상태의 쓰레드 중에서
		   우선적으로 CPU를 점유할 수 있는 쓰레드를 판별하기 위한 LEVEL 값
		2) 범위
			1 ~ 10
		3) 상수
			MAX_PRIORITY : 10
			MIN_PRIORITY : 1
			NORM_PRIORITY : 5

	(8) 동기화
		1) 비유: 화장실의 문고리
		* static을 많이 사용할 수록 데이터의 무결성이 해쳐질 수 있음 (무결성 : 데이터의 결함이 없는 성질)
		2) 하나 이상의 쓰레드가 어떤 연산 or 로직에 동시 접근했을 때,
		   그 연산에 대한 값의 무결성을 보장하기 위해서 수행 영역에 대한 lock을 걸어주는 것
		3)int i = 0;
		   i++; 

		   # CPU의 연산 단계 #
		   <1> 현재 i값을 읽음           i==0    i==0
		   <2> i값을 증가               i==0    i==0
		   <3> 증가된 i값을 i에 저장      i==1    i==1

		4) 방법
			1> synchronized void m(){
				   동기화가 필요한 로직;
			   }
			2> synchronized(this){
				   동기화가 필요한 로직;
			   }

3. I/O ( Input/Output ) 
	* 어디서부터 시작해서 어디서부터 끝날지 항상 생각해야 함
	
	(1) 스트림( Stream ): '데이터의 흐름'
		Data Source (근원지) ===> Data Destination (목적지) 
		* 방향이란 것은 바뀌지 않는다., 한 번 굳어진 객체는 방향을 바꿀 수 없다.

	(2) 스트림 특징
		* 마셜링( 데이터를 자르는 행위 )
		* 언마셜링( 데이터를 조립하는 행위 )
		1) FIFO ( First In First Out )
		2) 지연성 
		* 데이터를 입력하고 난 뒤 커서가 깜빡이는 것을 보면 데이터가 지연되고 있음을 알 수 있음
		3) 단방향성
		4) 유연성

	(3) 표준입력/표준출력
		키보드( System.in ) -----> 모니터( System.out )

	(4) 구분
		1) 전송단위
			<1> 바이트 스트림 ( 1 byte stream )
				ex: XXXStream
			<2> 문자 스트림 ( 2 byte stream )
				ex: XXXReader, XXXWriter
		
		2) 특성
			<1> 근본 스트림 ( node stream )
				
			<2> 다리 스트림 ( bridge stream ) // 1byte를 2byte로 바꿔줌
				InputStreamReader (인풋스트림을 Reader로 바꾸겠다는 스트림)
				OutputStreamWriter (아웃풋스트림을 Writer로 바꾸겠다는 스트림)

			<3> 목적 스트림 ( filter stream ) (==응용 스트림)
			
		3) 입출력
			<1> 입력 스트림
				ex: XXXInputStream, XXXReader
				
			<2> 출력 스트림
				ex: XXXOutputStream, XXXWriter
profile
휘발방지

0개의 댓글