자바에서 제공하는 기본 API 중 컬렉션 프레임워크는 다양한 데이터를 효율적으로 저장하고 처리할 수 있도록 돕는다.
이번 장에서는 컬렉션 중 Map과 List의 사용법과 예제를 중심으로 정리한다.
Map은 키-값 쌍으로 데이터를 저장한다.put(), 검색할 때는 get()을 사용한다.size()로 확인할 수 있다.HashMap<String, Integer> 타입으로 키-값 쌍을 구성public class Ex01_Map {
public static void main(String[] args) {
Map <String, Integer> map = new HashMap<>();
// map 객체에 데이터 추가
map.put("나이", 21);
map.put("키", 175);
map.put("몸무게", 80);
// 저장된 데이터의 수 -> size()
System.out.printf("저장된 데이터의 수: %d
", map.size());
// 저장된 데이터 꺼내서 사용하기
map.get("나이");
}
}
Member 클래스를 값으로 저장toString() 오버라이딩을 통해 객체 정보를 출력public class Ex02_Map_연락망 {
private static final String Map = null;
public static void main(String[] args) {
Map<String, Member> map = new HashMap<>();
Member mem1 = new Member("010-1234-2345", "membwe1@naver.com");
map.put("철수", mem1);
// 보통 참조변수 없이 추가한다.
map.put("영희", new Member("010-1234-2235", "m323232e1@naver.com"));
System.out.println(map.get("영희")); // 객체는 sysout에서 toString 값을 리턴한다.
}
}
// 직접 생성한 member 클래스
class Member {
private String phoneNo;
private String email;
public Member(String pn, String em){ // 생성자는 리턴이 없는게 당연하므로 void같은거 쓰지 말기
this.phoneNo = pn;
this.email = em;
}
@Override
public String toString() {
return "Member [phoneNo=" + phoneNo + ", email=" + email + "]";
}
}
List는 순서가 있는 데이터 저장소이며 인덱스를 통해 접근 가능ArrayList<Integer>를 이용하여 정수 저장public class Ex03_List {
public static void main(String[] args) {
List <Integer> num_list = new ArrayList<>();
// 리스트에 자료 추가
num_list.add(10);
// 리스트 사이즈, 원소의 추출과 삭제 -> 컬렉션 원소의 추출과 삭제는 이름표(인덱스)를 매개로하여
num_list.size();
num_list.get(0);
num_list.remove(0);
// 전체 삭제
num_list.clear();
}
}
Member 클래스를 리스트에 저장public class Ex04_List_주소록 {
public static void main(String[] args) {
List <Member> list = new ArrayList<>();
list.add(new Member("010-3313-2467", "hyungyugod@naver.com"));
}
}
이 장에서는 Java에서 파일 및 디렉토리(폴더)를 다루는 주요 기능과 메서드에 대해 설명한다. File 클래스를 사용하여 파일 존재 여부, 디렉토리 생성, 경로 추출 등의 작업을 수행할 수 있다.
mkdir
→ 끝 폴더만 만들려고 할 때 사용.
⚠️ 중간 폴더가 없으면 에러가 발생한다.
mkdirs
→ 중간 폴더까지 포함하여 폴더 전체 경로를 차례대로 만든다.
절대 경로
→ 하드디스크 최상위 위치부터 명시한 문자열
상대 경로
→ 현재 폴더(./, 생략 가능)부터 작성한 문자열
boolean exists()
→ File 객체가 담고 있는 경로의 파일이 실제로 존재하지 않으면 false를 리턴한다.
boolean isFile()
→ File 객체가 담고 있는 경로의 파일이 존재하지 않거나, 경로가 폴더일 경우 false를 리턴한다.
boolean isDirectory()
→ File 객체가 담고 있는 경로의 디렉토리가 아니거나 존재하지 않으면 false를 리턴한다.
boolean isHidden()
→ File 객체가 담고 있는 경로가 숨김 파일/폴더인지 검사한다.
String getAbsolutePath()
→ File 객체가 담고 있는 경로의 절대 경로 값을 반환한다.
boolean mkdirs()
→ 폴더를 생성한다. 중간 경로가 없으면 하나씩 만들어가며 생성한다.
boolean delete()
→ 파일 또는 폴더를 삭제한다.
다음 기능들을 수행하는 메서드가 활용된다:
public class Ex05_file {
public static void main(String[] args) {
File f1 = new File("./text.txt");
// 전달된 경로가 파일인지 검사
boolean is_File = f1.isFile();
System.out.println(is_File);
// 전달된 경로가 디렉토리(파일)인지 검사
boolean is_dir = f1.isDirectory();
System.out.println(is_dir);
// 전달된 경로가 숨김형태인지 검사
boolean is_hidden = f1.isHidden();
System.out.println(is_hidden);
// 절대경로 값을 추출
String abs = f1.getAbsolutePath();
System.out.println(abs);
// 생성자에 전달된 파일이나 디렉토리가 물리적으로 존재하는지를 검사
boolean is_exist = f1.exists();
System.out.println("존재여부: " + is_exist);
}
}
File 객체를 통해 중첩된 디렉토리 경로를 생성할 수 있다.mkdirs()를 이용해 중간 경로까지 모두 생성한다.getName()을 통해 경로의 마지막 구성요소 이름을 가져올 수 있다.getParent()를 통해 부모 경로를 추출할 수 있다.public class Ex06_File2 {
public static void main(String[] args) {
//디렉토리 정보 객체 생성
File f2 = new File("a/b/c/target");
// 땅굴파기
f2.mkdirs();
// 마지막 "/" 이후 단어를 리턴
System.out.println(f2.getName());
// 처음부터 마지막 "/" 직전까지 리턴
System.out.println(f2.getParent());
}
}