DataScience Lab. 박사과정 김희찬 2017-02-18 (월) Big Data Analytics Short Courses File IO basic DataScience Lab. 박사과정 김희찬 2017-02-18 (월)
파일 읽기 매번 데이터를 코드에 직접 입력하는 건 비효율적 파일에서 불러오자! 그렇다고 매번 키보드 입력도 귀찮잖아? txt 파일로 필요한 정보를 저장해두고 읽어오면 간편하다! 컴퓨터는 0101…의 데이터 나열이 프로그램이 사용하는 메모리 안으로 쏱아져 들어감 흘러들어간다고 하여 이 통로는 스트림(Stream)이라 불림
파일 읽기 파일을 읽어야하니까 File 클래스를 사용하여 “파일”을 선택함 그러면 스트림이란 녀석을 그러면 어떻게 만들지? 다행이도 Stream 클래스는 이미 구현되어 있다! 우리가 사용할 Stream 클래스는 FileReader
Exception 에러 내용은? 예외는 뭐야? 놓친 예외가 있단다 예외란 객체의 함수가 동작 시 발생할 수 있는 에러의 종류를 가리킴 파일 리더로 스트림을 생성하는 것 -> FileNotFoundException 파일이 읽을 준비가 되었는지, 읽을 때 -> IOException (InputOutput) 이 예외도 클래스의 일종이기 때문에 상하 관계가 존재 IOException이 FileNotFoundException보다 상위이므로 상위 예외 하나만 추가하면 됨
파일 읽기 저장한 파일 모양대로 읽어오고 싶다 버퍼를 사용하는 스트림 리더 하나씩 읽어오는 것에서 일정 단위만큼 읽어오면 되지 않을까 단위라 하면 한 줄 일정 단위 만큼 모으려면 그만한 공간이 필요함 이 공간을 버퍼(Buffer)라고 부름 버퍼를 사용하는 스트림 리더 BufferedReader
Exception Handling “놓친 예외”라는 표현은 무엇인가? 예외 처리는 방금한 것 아닌가? 특정 메소드가 발생하는 예외를 적절히 처리하지 못했다는 것 예외 처리는 방금한 것 아닌가? main 메소드가 예외를 발생(throw)한다고 정의한 것 예외 처리는 되지 않음 메소드가 예외를 던질 때 적절히 잡아내면 그것이 예외 처리
Exception Handling Try-catch 구문을 사용하자 예외를 던지는 메소드들은 try구역에서 실행
Exception Handling Try-catch 예 정수를 0으로 나누는 경우 ‘예외 처리 테스트 완료’는 출력되지 않고, 에러를 출력하며 프로그램이 죽음! 어찌되든 프로그램이 죽지 않고 마지막까지 실행되면 좋겠는데..
Exception Handling Try-catch 예 정수를 0으로 나누는 경우 사칙 연산 예외가 발생 ArithmeticException
NumberCount 한 글자씩 읽는 건 앞서 사용하였던 read() 메소드 사용
NumberCount 문자열을 정수로 변경 읽은 글자가 숫자인지 어떻게 확인하는가? 정수로 변경해야 숫자로 관리하기 편함 무슨 글자인지는 모르지만 일단 숫자로 바꿔보자 숫자가 아닌 경우 예외 발생 -> 예외 처리 IOException은? -> 읽는 함수 도중 발생하는 예외 숫자 형태가 아니라서 발생하는 예외는? -> NumberFormatException 예외가 발생하면 그것은 숫자가 아니므로, 다음으로 넘어감 continue
NumberCount 등장 횟수 저장 방법 각 숫자의 등장 횟수를 세는 것이므로 10칸짜리 배열을 이용 0번째 배열의 값을 확인하고, 그 값에다가 1을 더한 다음에 0번째 배열에 다시 저장 숫자 0 1 2 3 4 5 6 7 8 9 등장 횟수 2 3 0 1 2 3 4 5 6 7 8 9 2+1=3 3 2
NumberCount 구조도 파일ready? 한 글자 읽기 결과 출력 숫자? 배열에 1 늘려서 저장 false true 파일/스트림생성 배열 생성 파일ready? false true 한 글자 읽기 결과 출력 false 숫자? true 배열에 1 늘려서 저장
WordCount 문제 정의 영문 테스트 파일에서 알파벳 세기 (대소문자 구분 안함) 우리가 필요한 알파벳은 컴퓨터는 0과 1만으로 모든 것을 이해 알파벳 또한 숫자로 표현되어 있음 아스키 코드(ASCII Code) 우리가 필요한 알파벳은 대문자 A~Z : 65~90 소문자 a~z : 97~122
WordCount 문제 풀이 힌트 등장 횟수를 저장할 배열 26개 생성 읽은 것이 숫자가 아닐 때 대문자? / 소문자? 소문자면 대문자로 변경하여 통일
WordCount 구조도 파일ready? 한 글자 읽기 결과 출력 문자? 대소문자 통일 배열에 1 늘려서 저장 false 파일/스트림생성 배열 생성 파일ready? false true 한 글자 읽기 결과 출력 false 문자? true 대소문자 통일 배열에 1 늘려서 저장
THANKS