フルスタックプロシージャ18 Java


2022.4.1.(金)


集合フレーム
ファイルI/O

1.集合フレーム


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<저장할 데이터의 클래스이름>( );
      


<ArrayList例>


<Peopleクラスを使用したArrayListの例>

2.ファイルI/O


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.jpg");

< Java.ioパッケージ>
2-2. 配線
- 운영체제간의 호환성 유지를 위한 "/" 의 사용

	-> 경로 문자열을 설정할 때 윈도우 기반에서 역슬래시(\)를 사용하지만
	   가급적 다른 운영체제와의 호환성을 위해 슬래시(/)를 사용하는 것이 좋다.

- 절대 경로

	-> 작업 디렉토리와 관계없이 절대적인 위치를 의미하는 경로

	-> Linux 기준 : httpd.conf
	   /etc/httpd/conf/httpd.conf

	-> 윈도우 예시 : hosts
	   C:/Windows/System32/drivers/etc/hosts

- 상대 경로

	-> 작업 디렉토리를 기준으로 상대적인 위치를 의미하는 경로

	-> Linux 기준 : httpd.conf
	   ./conf/httpd.conf

	-> 윈도우 예시 : hosts
	   ../drivers/etc/hosts

<ファイルが存在するかどうか>

<ファイルの作成と削除>
2-3. 文字コードとは?
- 문자나 기호들의 집합을 컴퓨터에서 저장하거나 통신에 사용할 목적으로 부호화하는 방법

-> UTF-8 : 8비트 이진수로 표현하는 방법
2-4. Streamとは?
- 입출력에서 stream이란 디바이스의 입출력 방식이 character 단위이든
  block 단위이든 관계 없이 "1바이트"씩 "연속"적으로 전달되는 형태로
  추상화된 상태를 의미한다. 

- 입출력 장치는 개별적인 특성이 있으므로 읽고, 쓰는 단위가 각각 다르지만
  스트림은 이러한 일련의 과정을 추상화하여 모든 디바이스를 character 단위로만
  사용하도록 한다.

- 즉, 입출력 디바이스의 특성을 무시하고 하나의 단일한 입출력 인터페이스를
  다룰 수 있도록 하는 것이 stream이다.
2-5. Javaにおけるストリームに関連するクラス
- 스트림 관련 클래스들은 각각 InputStream(입력/읽기), OutputStream(출력/저장)과
  관련된 인터페이스를 상속받기 때문에 모두 동일한 메서드를 가지고 있다.

- 프로그래머는 상황에 따라 적절한 클래스를 사용하기만 하면 동일한 방법으로
  Stream을 사용할 수 있다.
2-6. ファイル・ストレージ・プロシージャ
- 저장을 위한 빈 파일을 생성하기

	-> OutputStream의 객체를 생성한다.

- 파일에 내용 쓰기

	-> 저장할 내용을 byte 배열로 변환한다.

	-> 변환된 배열을 OutputStreamwrite( ) 메서드에게 파라미터로 전달

- 파일 닫기

	-> OutputStream 객체로 close( ) 메서드를 호출하여 스트림을 닫는다.

- 파일 저장시의 유의사항

	-> OutputStream은 각각의 단계마다 예외처리를 강제적으로 요구한다.

	-> try ~ catch 블록이 형성되는 과정에서 변수의 유효성 범위에 대한
	    처리에 유의해야 한다.


<ファイルの保存プロセスと保存に成功しました!>
2-7. ファイル読み込みプロセス
- 파일을 읽기 위한 InputStream 객체 생성하기

- 읽은 내용을 담기 위한 빈 byte 배열 생성하기

	-> 파일의 용량 크기만큼 배열의 사이즈를 지정해야 한다.

- 파일의 내용 읽기

	-> 읽은 내용을 담기 위한 byte배열을 InputStream 객체의 
	    read( ) 메서드에게 파라미터로 전달한다.

- 사용이 완료된 스트림 닫기

	-> InputStream 객체의 close( ) 메서드를 호출하여 스트림을 닫는다.

- 읽은 내용을 문자열로 변환하기

	-> byte 배열을 String 클래스의 생성자에게 전달하여 문자열로 변환한다.

	-> 이 과정에서 어떤 인코딩을 사용할지를 함께 설정해야 한다.

<ファイルのインポート>