2025-04-02 java

성현규·2025년 4월 2일
post-thumbnail

1. 자바 기본 API(2)

자바에서 제공하는 기본 API 중 컬렉션 프레임워크는 다양한 데이터를 효율적으로 저장하고 처리할 수 있도록 돕는다.
이번 장에서는 컬렉션 중 Map과 List의 사용법과 예제를 중심으로 정리한다.


1-1. 컬렉션

  • 인덱스에 국한되지 않고 이름표를 붙임. 리스트는 인덱스가 있지만 이름표라고 생각하면 편하다.

1-1-1. Map

  • 기본자료형은 wrapper class로 선언해야 한다.
  • 사용할 타입을 선언 시에 정하는 것을 제네릭(Generic)이라고 한다.

📌 핵심 요약:

  • Map은 키-값 쌍으로 데이터를 저장한다.
  • 키는 중복될 수 없으며, 각 키에 대응하는 하나의 값만 저장된다.
  • 데이터를 추가할 때는 put(), 검색할 때는 get()을 사용한다.
  • 저장된 항목의 수는 size()로 확인할 수 있다.
  • 사용자가 정의한 클래스도 값으로 저장할 수 있다.

✅ 예시 설명: map 기본
  • HashMap<String, Integer> 타입으로 키-값 쌍을 구성
  • 데이터를 put()으로 저장하고 get()으로 검색
  • size()로 전체 데이터 수 확인
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("나이");
    }
}

✅ 예시 설명: map에 직접 생성한 class넣기
  • 사용자가 정의한 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 + "]";
    }
}

1-1-2. List

  • 무제한의 데이터 저장 가능
  • 중요한 것은 인덱스가 있고 중간에 하나를 추출하면 그 빈자를 채우기 위해 다른 원소들이 땡겨져 자리를 채운다는 것이다.

📌 핵심 요약:

  • List는 순서가 있는 데이터 저장소이며 인덱스를 통해 접근 가능
  • 삽입, 삭제, 조회 등의 기능을 제공
  • 사용자 정의 클래스도 요소로 저장할 수 있다

✅ 예시 설명: 리스트의 기본 사용
  • ArrayList<Integer>를 이용하여 정수 저장
  • add(), size(), get(), remove(), clear() 메서드 활용
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"));
    }
}

1-2 파일 및 폴더 기능

이 장에서는 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()
    → 파일 또는 폴더를 삭제한다.


✅ 1-2-1. 파일 처리 기본 메서드

다음 기능들을 수행하는 메서드가 활용된다:

  • 경로가 파일인지 검사
  • 경로가 디렉토리인지 검사
  • 경로가 숨김 형태인지 검사
  • 절대 경로 추출
  • 파일/디렉토리의 존재 여부 검사
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);
    }
}

✅ 1-2-2. 파일 처리 활용

  • 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());
    }
}
profile
학생

0개의 댓글