교육 (Today I Learned)/SeSAC

SeSAC 18일차 / 자료 구조(트리), 파일 입출력, 스레드 활용

Bay Im 2023. 8. 10. 00:31
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초 뒤에 입력된 문자열이 출력

 

 

 

 

 

오늘의 실습 코드

https://github.com/yubin-im/SeSAC/tree/50e3d75444c1413eab841107e06bd14a4ab462e7/20230809/d230808