AI교육과정 - Java.9

단비·2022년 10월 6일
0

AI교육과정

목록 보기
9/69
  • exists() : 파일이 실제로 존재하는지 여부
  • isDirectory() : 해당 경로가 디렉토리(폴더)인지 여부
  • length() : 파일 데이터 길이를 반환(Byte), 한글은 3byte, 영어/특수문자/공백은 1byte
  • mkdir() : 디렉토리를 생성
  • createNewFile() : 파일을 생성

😣 FileInputStream/FileOutputStream은 InputStream/OutputStream을 상속받고 있으며, FileReader/FileWriter는 Reader와 Writer를 상속받고 있다.

따라서 FileInputStream / FileOutputStream 은 byte 단위의 입출력을 처리하고 FileReader / FileWriter는 바이트를 문자(Char)로 변환하여 입출력을 처리한다.

FileInputStream / FileOutputStream은 1바이트 이상의 문자인 한글 등을 처리하기 위해 버퍼를 사용해서 처리해야 하지만, FileReader / FileWriter에서는 한글도 처리가 가능하다.


😁 9회차와 연결

  • Map 인터페이스
    • 키와 값을 한 쌍으로 이루어지는 데이터의 집합으로 순서가 없고, 키는 중복으로 허용하지 않지만 값은 중복을 허용
    1. HashMap
      • Map 인터페이스를 구현한 대표적인 클래스
      • 키와 값으로 구성된 요소객체를 저장하는 구조를 가지고 있는 자료구조
      • 키는 중복될 수 없고, 값은 중복될 수 있음
      • 기존의 저장된 키와 동일한 키로 값을 저장하면 기존의 값은 없어지고 새로운 값으로 대체
      • 헤싱(Hashing)을 사용하기 때문에 많은 양의 데이터를 검색하는데 뛰어난 성능
      • 비동기식
    2. TreeMap
      • 이진트리를 기반으로 한 Map 컬렉션
      • TreeSet과의 차이점은 TreeSet은 값만 저장하는 구조라면 TreeMap은 키와 값이 저장된 key, value를 저장함
      • 키는 오름차순으로 정렬됨(숫자: 값, 문자열: 유니코드)
      • HashMap보다 성능이 떨어짐(데이터를 저장할 때, 삭제할 때)
      • 검색이 필요한 경우 효율성면이 좋음
    3. HashTable
      • 키와 값을 1:1형태로 저장
      • 키는 값을 식별하기 위한 고유한 키, 값은 키가 가진 값
      • 동기화
      • HashMap에서는 값을 null이 입력이 가능하지만 HashTable 에서는 null 입력이 불가능

  • 중첩 클래스

    • 내부 클래스(Inner Class)
      • 클래스 또는 메소드 안에 또 다른 클래스를 생성하는 것
      • 내부 클래스는 외부 클래스의 모든 멤버를 자신의 멤버처럼 사용
      • static 내부 클래스를 제외한 내부 클래스는 항상 외부 클래스 객체를 통해서 생성
    • 로컬 클래스(Local Class)
      • 메소드 안에서 정의된 클래스(메소드 안에서만 사용할 수 있음)
      • 외부로 클래스의 모든 멤버에 접근 가능(private 멤버도 접근 가능)
    • 정적 중첩 클래스(Static Class)
      • 내부 클래스가 static으로 정의
      • 외부 클래스에 관계없이 객체를 생성할 수 있음
    • 익명 클래스(Anonymous Class)
      • 클래스를 정의하지 않고 객체를 정의할 때 사용
      • 1회용 클래스이므로 재활용이 불가능
  • 오류(Error)

    • 자바 컴파일러에 의해 문법 오류를 발생
  • 예외(Exception)

    • 문법이 맞게 작성되었다 하더라도 프로그램을 실행하면서 예상하지 못한 오류가 발생
    • 프로그램 실행 중 비정상적으로 종료
    • 예측할 수 있는 예외, 예측 못하는 예외
    • 예외가 발생하는 원인
      1. 사용자가 잘못된 데이터를 입력하는 경우
      2. 개발자가 로직이나 계산을 잘못 작성한 경우
      3. 하드웨어나 네트워크가 제대로 동작하지 못하는 경우
      4. 악의적으로 잘못된 연산을 요구하거나 시스템을 공격
    • 예외의 종류
      1. 컴파일시에 예외 발생

      2. 런타임시에 예외 발생

        [exception]
        [IOException] [FileNotFoundException]...[RuntimeExcepion]
    • 예외처리 코드
      try{
      		실제 코드가 들어가는 곳으로 예외 상황이 발생할 경우 
      예외발생!
      ... <- 예외 발생시 이곳으로 오지않음
      } catch(예외객체타입1, 참조변수1){
      			try 블록에서 예외객체타입1의 Exception이 발생하면 여기로 오게됨. 해당 코드 실행 후 에러없이 벗어남
      } finally {
      			try 블록에서 Exception 발생과 관계없이 무조건 실행되는 코드(옵션) }
    • e.printStackTrace();
      • 해당 오류코드를 출력해줌 (실제 오류가 발생한 건 아님)
    • Throw
      • 강제로 예외를 발생시키는 방법

      • 현재 메소드의 예외를 처리한 후 상위 메소드에 예외 정보를 전달함

        Exception 참조변수 = new Exception("예외가 발생하면 출력될 문자열");
        ...
        throw 참조변수; // 예외발생
    • Throws
      • 현재 메소드에서 자신을 호출한 상위 메소드로 예외를 발생시킴
      • 사용하는 메소드를 호출한 상위 메소드에서 예외처리에 대한 책임을 맡김
    • 전체 Exception처리
      • 맨마지막에 쓰지않으면 오류 발생

         catch(Exception 참조변수){} // 모든 예외를 처리
  • 파일(File)

    • File 클래스
      • 파일 또는 디렉토리를 다루는 클래스

      • 입출력 관한 작업

        File 참조변수 = new File(파일 경로 또는 파일이름);
    • FileInputStream 클래스
      • java.io 의 가장 기본이 되는 입력 클래스
      • 입력 스트림을 생성
      • read()
        • 스트림을 통해 byte 단위로 데이터를 읽어옴
    • FileOutputStream 클래스
      • java.io 의 가장 기본이 되는 출력 클래스
      • 출력 스트림을 생성
      • write()
        • 스트림을 통해 byte 단위로 데이터를 씀
    • FileReader 클래스
      • FileInputStream 과 유사
      • 문자 스트림으로서 문자 단위의 바이트 변환 기능을 가지고 있음
      • 바이트 단위가 아닌 문자 단위로 입출력을 실행
    • FileWriter 클래스 (실행할때마다 지워진 후 다시 생성됨)
      • FileOutputStream 과 유사
      • 문자 스트림으로서 문자 단위의 바이트 변환 기능을 가지고 있음
      • 바이트 단위가 아닌 문자 단위로 입출력을 실행
    • PrintWriter 클래스
      • 문자열을 출력하는 스트림 Writer 속성을 가진 클래스
      • OutputStream 의 자식 클래스이며 byte 단위 출력 클래스인 PrintStream의 print 메소드를 모두 구현하여 사용할 수 있음
      • pw.close()
        • 닫지 않으면 저장이 되지 않음
    1. 절대 경로
      • 물리적인 경로 예) D:\Kim_Danbi\Java
    2. 상대 경로
      • 현재 동작하고 있는 파일을 중심으로 상대적인 경로 예) Day9.txt, ../Day9.txt(현재 폴더에서 앞의 폴더일 때), 디렉토리명/Day9.txt(현재 폴더에서 뒤의 폴더일 때)
  • 스트림(Stream)

    • 자바는 파일이나 콘솔의 입출력을 직접 다루지 않고 스트림이라는 흐름을 통해 다룸
    • 운영체제에 의해 생성되는 가상의 연결고리를 의미하고 중간 매개자 역할을 함
  • StringBuilder 클래스

    • String 클래스와 동일하게 문자열을 다루는 클래스

    • String 클래스는 문자열을 인스턴스로 생성하고 나면 인스턴스가 가진 문자열을 변경하지 못하는 불변 객체라는 단점이 있음

    • StringBuilder → 같은 인스턴스 안의 문자열 필드값을 추가하거나 변경할 수 있도록 함

      StringBuilder 참조변수 = new StringBuilder("문자열");
      참조변수.append(문자열).append(문자열)...
      ```
profile
tistory로 이전! https://sweet-rain-kim.tistory.com/

0개의 댓글