SeSAC 18일차(2023-08-09)
자료 구조(트리), 파일 입출력, 스레드 활용
트리
트리 구조
- 특정 노드로 시작하여 자식 노드를 확장하여 밑으로 뻗어가는 자료구조
- 루트 노드(시작점), 리프 노드(종점), 트리 깊이(0부터)
- 배열, 연결 구조 방식으로 구현 가능
- 공간 효율성과 접근 속도 최대화 위해 사용
이진 트리
- 자식 노드를 2개만 가지는 트리 구조
- 노드의 깊이가 하나 증가할 때마다 최대 2배수로 노드가 늘어난다
- n층의 노드 개수: 2의 n승
- 탐색을 위해 재귀 방식을 사용
- Preorder, Postorder, Inorder
트리 탐색
- 재귀식 트리 탐색
- Preorder: 부모노드→ 왼쪽노드→ 오른쪽노드 순으로 탐색
- Postorder: 왼쪽노드→ 오른쪽노드→ 부모노드 순으로 탐색
- Inorder: 왼쪽노드→ 부모노드→ 오른쪽노드 순으로 탐색 (정렬되어 나옴)
파일 입출력
자바 파일 입출력
- 바이트 스트림(Byte Stream)
- binary 데이터를 입출력하는 스트림 객체
- 이미지, 동영상 등을 읽고 쓸때 주로 사용
- InputStream(읽기), OutputStream(쓰기)를 상속받는 객체
- 문자 스트림(Character Stream)
- 문자 기반 데이터를 입출력하는데 사용하는 스트림 객체
- 텍스트 파일, json 파일 등을 읽고 쓸 때 주로 사용
- Reader(읽기), Writer(쓰기)를 상속받는 객체
바이트 스트림
- FileInputStream과 FileOutputStream
- 생성자 인자에 경로를 넣어 인스턴스 생성
- try-catch를 통해 IOException 처리
- FileOutputStream 인스턴스의 write() 메소드로 쓰기
- FileInputStream 인스턴스의 read() 메소드로 읽기 (반복문 사용)
문자 스트림
- FileReader와 FileWriter
- 생성자 인자에 경로를 넣어 인스턴스 생성
- try-catch를 통해 IOException 처리
- FileReader 인스턴스의 write() 메소드로 쓰기
- FileWriter 인스턴스의 read() 메소드로 읽기
- 문자 스트림의 read()는 문자 하나에 대한 유니코드의 정수값을 읽는다.
- (char) 형변환을 반복하여 출력
버퍼 사용
- BufferedInputStream과 BufferedOutputStream
- 하나의 바이트가 아닌 더 큰 용량으로 데이터를 묶어서 읽고 쓴다
- 바이트 스트림 인스턴스를 받아 초기화
- 버퍼스트림 인스턴스에서 write(), read() 사용
- BufferedReader와 BufferedWriter
- 하나의 문자가 아닌 여러 문자를 묶어 읽고 쓴다
- 문자 스트림 인스턴스를 받아 초기화
- 버퍼스트림에서 readLine(), newLIne() 메소드를 통해 한줄씩 읽고 쓰기 가능
스레드 활용
스레드
- 자바는 기본적으로 메인 메소드로 시작하는 단일 직렬처리로 진행
- 상황에 따라 병렬적 처리를 하기위해 프로세스 안에서 또 다른 실행처리자인 스레드를 생성
- 멀티 프로세스: 독립적인 메모리 공간을 사용하여 데이터 공유 불가
- 멀티 스레드: 프로세스 안에서 실행자만 분리하여 같은 메모리 공간을 사용
- Thread 인스턴스를 생성하여 새로운 스레드 생성
- 생성자의 인자로 Runnable 인터페이스의 인스턴스를 입력
- Runnable의 run 메소드를 오버라이드하여 스레드의 실행코드 작성
- Thread 인스턴스의 start() 메소드로 스레드 실행
- Thread 인스턴스의 interrupt() 메소드로 스레드 중지
스레드 생성
- 스레드 생성
- Thread의 생성자 인자로 Runnable 인스턴스의 상속 클래스를 입력하여 스레드 생성
- run 메소드를 오버라이드 하여 실행 코드 정의
- start() 메소드로 스레드 실행
- interrupt() 메소드로 종료
- 스캐너 입력시 3초 뒤에 입력된 문자열이 출력
- Thread의 생성자 인자로 Runnable 인스턴스의 상속 클래스를 입력하여 스레드 생성
오늘의 실습 코드
https://github.com/yubin-im/SeSAC/tree/50e3d75444c1413eab841107e06bd14a4ab462e7/20230809/d230808
'교육 (Today I Learned) > SeSAC' 카테고리의 다른 글
SeSAC 20일차 / 실습 (0) | 2023.08.13 |
---|---|
SeSAC 19일차 / 스레드 활용 (0) | 2023.08.11 |
SeSAC 17일차 / 자료 구조(집합, 맵) (0) | 2023.08.10 |
SeSAC 16일차 / 자료 구조(집합, 맵) (0) | 2023.08.08 |
SeSAC 15일차 / 자료 구조(리스트) (0) | 2023.08.08 |