본문 바로가기
Spring-Java/Java

Day08_ArrayList<>, DateTimeFormatter

by 현대타운301 2023. 8. 24.

2023.08.23

 

Day08 요약

- 배열을 사용할 때 ArrayList<>를 사용하면 길이 상관 없이 사용가능

- 현재 날짜, 시간을 받을 때는 DateTimeFormatter 사용

 


 

List<> - ArrayList<>

 

List<객체명> 변수명 = new ArrayList<객체명>();

배열에서는 길이를 정의해야 하지만, ArrayList에서는 자동으로 index 배정 (0, 1, 2, ...)

// 아래 두 문장은 같은 의미, 다만 배열의 경우 length값이 필요
Student[] list = new Student[10];
ArrayList<Student> list = new ArrayList<Student>();

 

(변수이름).size()

해당 Array의 길이, 저장되는 만큼 늘어남

 

 

(변수이름).add(객체이름) 

해당 객체를 변수에 저장

 

 

(변수이름).get(index) 

해당 index에 저장된 객체를 호출

          - class에 정의된 다양한 메소드를 함께 호출 가능

 

// 객체배열 list의 i번째 객체에 setName 메소드를 호출, 이때 매개변수는 inpunName
list.get(i).setName(inputName);

 


 

DateTimeFormatter

 

날짜, 시간 출력

yyyy : year
MM : month
dd : day
hh : hour
mm : minute
ss : second

import java.time.LocalDateTime;			// import 필요

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy년MM월dd일 hh:mm:ss");
date = dtf.format(LocalDateTime.now());	// '.now'로 현재날짜 및 시간 받아옴

 


 

Java 기초

 

단축키

Ctrl + PageUp / Down : 현재 띄워진 편집창 이동

Ctrl + e : 현재 띄워진 편집창 선택 이동

 

 

다양한 괄호들

1)  ( ) : parentheses

2)  { } : braces
3)  [ ] : square brackets
4)  < > : angle brackets

 


 

예제

 

source code

// Student class (필드, 생성자, 메소드)
package day08;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class Student {
	
	// 필드
	private String no;
	private String name;
	private String dept;
	private int year;
	static int num = 100;
	String date;
	
	// 생성자
	public Student() {
		DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy년MM월dd일 hh:mm:ss");
		date = dtf.format(LocalDateTime.now());
		no = "S" + num;
		num++;
	}
	
	public Student(String no, String name, String dept,int year) {
		this.no = no;
		this.name = name;
		this.dept = dept;
		this.year = year;
	}
	
	// 메소드
	public void setNo(String no) {
		this.no = no;		
	}
	public String getNo() {
		return no;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getName() {
		return name;
	}
	public void setDept(String dept) {
		this.dept = dept;
	}
	public String getDept() {
		return dept;
	}
	public void setYear(int year) {
		this.year = year;
	}
	public int getYear() {
		return year;
	}
	public void setDate() {
		DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy년MM월dd일 hh:mm:ss");
		date = dtf.format(LocalDateTime.now());
	}
	
	public void print() {
		System.out.printf("%s\t%s\t%s\t%d\t%s\n", no, name, dept, year, date);
	}
}


// Student main class
package day08;

import java.util.ArrayList;
import java.util.Scanner;

public class StudentMain {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Scanner sc = new Scanner(System.in);
		// Student[] list = new Student[10]; 와 같은 기능이고 다만 index 지정 필요없음
		ArrayList<Student> list = new ArrayList<Student>();
		
		
		
		
		
		while (true) {
			System.out.println("==================라즈베리파이학교==================");
			System.out.println("1.학생등록 2.학생리스트 3.학생검색 4.학생수정 5.학생삭제 0.종료");
			System.out.print("메뉴선택 > ");
			int menu = sc.nextInt();
			
			if (menu == 1) {
				Student s = new Student();
				System.out.print("이름 > ");
				s.setName(sc.next());
				System.out.print("학과 > ");
				s.setDept(sc.next());
				System.out.print("학년 > ");
				s.setYear(sc.nextInt());
				System.out.println(s.getName()+"님 등록 완료");
				// list[i] = s; 와 같은 의미
				list.add(s);
				
			} else if (menu == 2) {
				System.out.println("학번\t이름\t학과\t학년\t등록(수정)일자");
				System.out.println("============================================");
				for (int i = 0; i < list.size(); i++) {
					// list[i].print()
					list.get(i).print();
				}
			} else if (menu == 3) {
				boolean find = false;
				System.out.println("검색할 학번 (S100~) > ");
				String search = sc.next();
				for (int i = 0; i < list.size(); i++) {
					if (search.equals(list.get(i).getNo())) {
						list.get(i).print();
						find = true;
					}
				} if (!find) {
					System.out.println("조회할 수 없는 학번입니다...");
				}
			} else if (menu == 4) {
				boolean find = false;
				System.out.print("조회할 학번 > ");
				String search = sc.next();
				for (int i = 0; i < list.size(); i++) {
					if (search.equals(list.get(i).getNo())) {
						find = true;
						System.out.println(list.get(i).getName()+"님 정보수정");
						System.out.println("1.이름수정 2.학과수정 3.학년수정");
						System.out.print("메뉴선택 > ");
						int newMenu = sc.nextInt();
						if (newMenu == 1) {
							System.out.print("새로운 이름 > ");
							String inputName = sc.next();
							list.get(i).setName(inputName);
							System.out.println("이름 수정 완료!");
							list.get(i).setDate();
						} else if (newMenu == 2) {
							System.out.print("새로운 학과 > ");
							String inputDept = sc.next();
							list.get(i).setDept(inputDept);
							System.out.println("학과 수정 완료!");
							list.get(i).setDate();
						} else if (newMenu == 3) {
							System.out.print("새로운 학년 > ");
							int inputYear = sc.nextInt();
							list.get(i).setYear(inputYear);
							System.out.println("학년 수정 완료!");
							list.get(i).setDate();
						}
						
					}
				} if (!find) {
					System.out.println("조회할 수 없는 학번입니다...");
				}
			} else if (menu == 5) {
				boolean find = false;
//				for (int i = 0; i < list.size(); i++) {
//					list.get(i).print();
//				}
				System.out.println("----------학생정보----------");
                // list 배열 안의 객체를 전부 출력
				list.forEach(a -> a.print());
				System.out.print("삭제할 학생의 학번 입력 > ");
				String search = sc.next();
				for (int i = 0; i < list.size(); i++) {
					if (search.equals(list.get(i).getNo())) {
						list.remove(i);
						find = true;
						System.out.println("삭제 완료!\n");
						System.out.println("----------학생정보(rev)----------");
						list.forEach(a -> a.print());
						break;
					}
				} if (!find) {
					System.out.println("조회할 수 없는 학번입니다...");
				}
			} else if (menu == 0) {
				System.out.println("프로그램 종료...");
				break;
			}
			System.out.println();
		}
		
	}

}

 

 

실행결과

==================라즈베리파이학교==================
1.학생등록 2.학생리스트 3.학생검색 4.학생수정 5.학생삭제 0.종료
메뉴선택 > 1
이름 > 홍길동
학과 > 전자
학년 > 1
홍길동님 등록 완료

==================라즈베리파이학교==================
1.학생등록 2.학생리스트 3.학생검색 4.학생수정 5.학생삭제 0.종료
메뉴선택 > 1
이름 > 이순신
학과 > 전자
학년 > 2
이순신님 등록 완료

==================라즈베리파이학교==================
1.학생등록 2.학생리스트 3.학생검색 4.학생수정 5.학생삭제 0.종료
메뉴선택 > 1
이름 > 아이유
학과 > 간호
학년 > 3
아이유님 등록 완료

==================라즈베리파이학교==================
1.학생등록 2.학생리스트 3.학생검색 4.학생수정 5.학생삭제 0.종료
메뉴선택 > 2
학번	이름	학과	학년	등록(수정)일자
============================================
S100	홍길동	전자	1	2023년08월25일 08:54:45
S101	이순신	전자	2	2023년08월25일 08:54:51
S102	아이유	간호	3	2023년08월25일 08:54:56

==================라즈베리파이학교==================
1.학생등록 2.학생리스트 3.학생검색 4.학생수정 5.학생삭제 0.종료
메뉴선택 > 3
검색할 학번 (S100~) > 
S102
S102	아이유	간호	3	2023년08월25일 08:54:56

==================라즈베리파이학교==================
1.학생등록 2.학생리스트 3.학생검색 4.학생수정 5.학생삭제 0.종료
메뉴선택 > 3
검색할 학번 (S100~) > 
S103
조회할 수 없는 학번입니다...

==================라즈베리파이학교==================
1.학생등록 2.학생리스트 3.학생검색 4.학생수정 5.학생삭제 0.종료
메뉴선택 > 4
조회할 학번 > S101
이순신님 정보수정
1.이름수정 2.학과수정 3.학년수정
메뉴선택 > 3
새로운 학년 > 4
학년 수정 완료!

==================라즈베리파이학교==================
1.학생등록 2.학생리스트 3.학생검색 4.학생수정 5.학생삭제 0.종료
메뉴선택 > 5
----------학생정보----------
S100	홍길동	전자	1	2023년08월25일 08:54:45
S101	이순신	전자	4	2023년08월25일 08:55:20
S102	아이유	간호	3	2023년08월25일 08:54:56
삭제할 학생의 학번 입력 > S99
조회할 수 없는 학번입니다...

==================라즈베리파이학교==================
1.학생등록 2.학생리스트 3.학생검색 4.학생수정 5.학생삭제 0.종료
메뉴선택 > 5
----------학생정보----------
S100	홍길동	전자	1	2023년08월25일 08:54:45
S101	이순신	전자	4	2023년08월25일 08:55:20
S102	아이유	간호	3	2023년08월25일 08:54:56
삭제할 학생의 학번 입력 > S100
삭제 완료!

----------학생정보(rev)----------
S101	이순신	전자	4	2023년08월25일 08:55:20
S102	아이유	간호	3	2023년08월25일 08:54:56

==================라즈베리파이학교==================
1.학생등록 2.학생리스트 3.학생검색 4.학생수정 5.학생삭제 0.종료
메뉴선택 > 2
학번	이름	학과	학년	등록(수정)일자
============================================
S101	이순신	전자	4	2023년08월25일 08:55:20
S102	아이유	간호	3	2023년08월25일 08:54:56

==================라즈베리파이학교==================
1.학생등록 2.학생리스트 3.학생검색 4.학생수정 5.학생삭제 0.종료
메뉴선택 > 0
프로그램 종료...

'Spring-Java > Java' 카테고리의 다른 글

Day10_class 예제  (0) 2023.08.28
Day09_Overloading, 정적변수, for/each  (0) 2023.08.28
Day07_접근제한자, class(필드, 생성자, 메소드)  (0) 2023.08.23
Day06_배열예제2  (0) 2023.08.21
Day05_배열예제  (2) 2023.08.20