이론/자바 풀스택 국비수업

220401 컬렉션 프레임워크, 파일 입출력

달거북씨 2022. 4. 4. 04:47

오늘 국비 수업 자바 과정 마지막 날

수업이 조금 아쉬운 면이 있다.

다음주(포스팅 하는 오늘)부터는 데이터베이스 나갈 예정

 


 

1. 컬렉션 프레임워크(Collection Framework)

1-1. Collection Framework

다수의 데이터를 쉽게 처리할 수 잇는 표준화 된 방법을 제공하는 클래스들로, 기존 배열 형태의 자료 저장에서 좀 더 다양한 데이터들을 저장하기 위한 필수 클래스이다.

 

1-2. HashMap 클래스

  • 데이터에 이름표를 적용하여 저장하기
  • HashMap 클래스는 Map 인터페이스르 상속받는 '자료보관소'이기 때문에, 암묵적 객체 형변환의 규칙에 따라 Map형태로 선언하고 HashMap 형태로 할당한다.
  • 선언과 할당 시에 HashMap의 이름표로 사용할 데이터 형(String)과 HashMap에 저장할 데이터 형의 클래스의 이름으로 명시해야 하는데, 이를 '제너릭스'라고 한다.
  • 제너릭스에 명시할 수 있는 데이터 형은 반드시 클래스 이름이어야 하기 때문에 기본 자료형을 보관할 경우 Wrapper 클래스의 이름을 사용한다.
    Map<String, 저장할 데이터의 클래스 이름> data = new HashMap<String, 저장할 데이터의 클래스 이름>();

  • 기존에 저장된 데이터와 중복되는 이름이 저장될 경우, 기존에 저장된 데이터를 덮어씌우게 된다.

 

 

1-3. ArrayList

  • ArrayList는 List 인터페이스를 상속받는 클래스로, 데이터를 이름표 없이 무제한으로 보관할 수 있다.
  • ArrayList에 추가되는 데이터는 순차적으로 배열과 같은 인덱스 번호를 부여받는다.
  • 상위 인터페이스 형으로 선언하고 ArrayList 클래스로 객체를 하라당하며, 선언과 할당 시에는 보관하고자 하는 자료형에 대한 제너릭스를 명시한다.
    List<저장할 데이터의 클래스 이름> list = new ArrayList<저장할 데이터의 클래스 이름>

 


 

People 클래스에서 변수 생성
People class로 ArrayList 생성 및 데이터 추가
데이터 출력

 


▶ 역시 단과 수업 컬렉션프레임워크, HashMap 관련 링크를 첨부해둔다.

▶ 이쪽이 좀 더 내용이 자세한 편

2022.03.19 - [이론/자바 기초] - JAVA 그게 뭐야? 16. 컬렉션프레임워크, ArrayList, <>Generic제네릭

 

JAVA 그게 뭐야? 16. 컬렉션프레임워크, ArrayList, <>Generic제네릭

1. 컬렉션 프레임 워크(Collection FrameWork) 많은 데이터(객체)들을 효과적으로 관리할 수 있는 표준화된 프로그래밍 방식 다수의 데이터(객체)를 편리하게 다룰 수 있는 클래스 및 인터페이스의 집

turtlemoon.tistory.com

2022.03.20 - [이론/자바 기초] - java 그게 뭐야? 17.HashSet, Iterator, HashMap, 빠른 for문

 

java 그게 뭐야? 17.HashSet, Iterator, HashMap, 빠른 for문

총 10일짜리 자바수업 중 9일차에 해당하는 내용 거의 끝부분인데 다 이해했냐고 묻는다면 비밀!!! 확실한 건 국비수업 들을 때 이해에 도움은 된다 하핳 16. 컬렉션 내용에서 이어진다. 2022.03.19 -

turtlemoon.tistory.com


 

2. 파일 입출력

2-1. java.io.File

  • File 클래스는 파일 또는 폴더에 대한 정보를 제공하는 클래스이다.
  • File 클래스의 객체는 정보를 조회하고자 하는 파일이나 폴더의 경로에 대한 문자열을 생성자 파라미터로 전달하는 형태로 만들 수 있다. 이때 파라미터로 전달되는 경로가 실제로 존재하지 않더라도 File 객체의 셍성이 가능해진다.
  • C:/photo/food.jpg 파일에 대한 객체 생성 예시
File file = new File("C:/photo/food.jpg");
File file = new File("C:/photo", "food.jgp");

 

2-2. 경로 설정하기

  • 운영 체제 간의 호환성 유지를 위한 "/"의 사용
    → 경로 문자열을 설정할 때 윈도우 기반에서 역슬래시(\)를 사용하지만, 가급적 다른 운영체제와의 호환성을 위해 슬래시(/)를 사용하는 것이 좋다.
  • 절대 경로
    → 작업 디렉토리와 관계없이 절대적인 위치를 의미하는 경로
    → 리눅스 예시 : httpd.conf > /etc/httpd/conf/httpd.conf
    → 윈도우 예시 : hosts > C:/Windows/System32/drivers/etc/hosts
  • 상대 경로(나의 위치 중요)
    → 작업 디렉토리를 기준으로 상대적인 위치를 의미하는 경로
    → 리눅스 예시 : httpd.conf > ./conf/httpd.conf
    → 윈도우 예시 : hosts > ../drivers/dtc/hosts

 

2-3. 문자 인코딩(character encoding)이란?

문자나 기호들의 집합을 컴퓨터에서 저장하거나 통신에 사용할 목적으로 부호화 하는 방법

→ UTF-8 : 8 비트 이진수로 표현하는 방법

 

2-4. 스트림이란?

  • 입출력에서 stream이란 디바이스의 입출력 방식이 character 단위이든 block 단위이든 관계없이 "1바이트" 씩 "연속"적으로 전달되는 형태로, 추상화된 상태를 의미한다.
  • 입출력 장치는 개별적인 특성이 있으므로 읽고 쓰는 단위가 각각 다르지만 스트림은 이러한 일련의 과정을 추상화하여 모든 디바이스를 character 단위로만 사용하도록 한다.
  • 즉, 입출력 디바이스의 특성을 무시하고 하나의 단일 입출력 인터페이스를 다룰 수 있도록 하는 것이 strream이다.

 

2-5. 자바의 스트림 관련 클래스

  • 스트림 관련 클래스들은 각각 InputStream(입력/읽기), OutputStream(출력/저장)과 관련도니 인터페이스를 상속받기 때문에 모두 동일한 메서드를 가지고 있다.
  • 프로그래먼는 상황에 따라 적절한 클래스를 사용하기만 하면 동일한 방법으로 스트림을 사용할 수 있다.

 

2-6. 파일 저장 과정

  • 저장을 위한 빈 파일 생성하기 > OutputStream의 객체를 생성한다.
  • 파일에 내용 쓰기
    → 저장할 내용을 byte 배열로 변환한다.
    → 변환된 배열을 OutputStream의 write() 메서드에게 파라미터로 전달
  • 파일 닫기
    → OutputStream 객체로 close()메서드를 호출하여 스트림을 닫는다.
  • 파일 저장 시 유의사항
    → OutputStream은 각각의 단계마다 예외처리를 강제적으로 요구한다.
    → try~catch 블록이 형성되는 과정에서 변수의 유효성 범위에 대한 처리에 유의해야 한다.

 

2-7. 파일 읽기 과정

  • 파일을 읽기 위한 InputStream 객체 생성하기
  • 읽은 내용을 담기 위한 빈 byte 배열 생성하기
    → 파일 용량 크기 만큼 배열의 사이즈를 지정해야 한다.
  • 파일의 내용 읽기
    → 읽은 내용을 담기 위한 byte 배열을 InputStream 객체의 read() 메서드에게 파라미터로 전달한다.
  • 사용이 완료된 스트림 닫기
    → InputStream 객체의 close() 메서드를 호출하여 스트림을 닫는다.
  • 읽은 내용을 문자열로 변환하기
    → byte 배열을 String 클래스읭 생성ㅇ자에게 전달하여 문자열로 변환한다.
    → 이 과정에서 어떤 인코딩을 사용할지를 함께 설정해야 한다.

▶ 예제 1

 

▶ 예제 2

728x90