이안의 평일코딩

JAVA의 정석 30일차 - java.util, calendar, collection 본문

Back-end/Java

JAVA의 정석 30일차 - java.util, calendar, collection

이안92 2020. 7. 24. 09:09
반응형

2020.07.24(금)

 

1. java.util : 프로그램에서 많이 사용하는 클래스의 집합

   => 반드시 import를 사용한다

 

Random() => 난수(임의수를 컴퓨터가 결정)

  => 정수 => nextInt() => 0~21억 4천 (int 범위)

                  nextInt(int n) ==> 오버로딩 => 지정된 범위 사이의 수가 나옴

                                                            n번은 제외

                  nextInt(100) => 0~99 => 0~100 nextInt(101)

                  ============================== static이 아니다

                  인스턴스

 

                  static 컴파일과 동시에 저장됨 => Random.nextInt()

                  instance 저장이 아직 안된 상태 => 저장 new생성자 Random r = new Random()

                                                           => r.nextInt()

                  instance(따로작동, 윈도우) / static은 동일하게 작동(같은 데이터 공유)

package com.sist.util;

import java.util.Random;

public class MainClass {

	public void random() {
		Random r = new Random();
		int a = r.nextInt(101); // int a = (int)(Math.random()*101)
		// 0~100 r.nextInt(100) 0~99
		System.out.println(a);
	}
	public static void main(String[] args) {
		MainClass m = new MainClass();// m=>random()
		m.random();
		MainClass m1 = new MainClass();// m1=>random()
		m1.random();
		
		//MainClass.random();
		//사용자 정의 메소드는 자동 호출이 없다
	}
}

 

StringTokenizer

===단어별로 분리

 = hasMoreTokens() : 자른 갯수가 몇개

 = nextToken()

 

String msg = "Red, Green, Blue, Black, Yellow";

=> StringTokenizer st = new StringTokenizer(msg, ",");

     String color1 = st.nextToken();

     String color2 = st.nextToken();

     String color3 = st.nextToken();

     String color4 = st.nextToken();

     String color5 = st.nextToken();

 

     StringTokenizer st = new StringTokenizer(msg, ",");

     while(st.hasMoreTokens()) {

          String color = st.nextToken();

     }

 

     StringTokenizer st = new StringTokenizer(msg); //구분문자 없으면 공백으로 자름

      StringTokenizer st = new StringTokenizer(msg, " ");

 

package com.sist.util;

import java.util.StringTokenizer;

public class MainClass1 {

	public static void main(String[] args) {
		String msg = "Red,Blue,Green,Yellow,Black";
		StringTokenizer st = new StringTokenizer(msg, ",");
		// , 별로 => 단어를 추출한다
		String color1=st.nextToken();
		String color2=st.nextToken();
		String color3=st.nextToken();
		String color4=st.nextToken();
		String color5=st.nextToken();
		//String color6=st.nextToken(); // 단어갯수 5개인데 6개로 초과되서 오류
		
		System.out.println(color1);
		System.out.println(color2);
		System.out.println(color3);
		System.out.println(color4);
		System.out.println(color5);
		//System.out.println(color6);
		
		st = new StringTokenizer(msg,",");
		while(st.hasMoreTokens()) { //갖고있는 갯수만큼만
			System.out.println(st.nextToken());
		}
		//Red Blue Green Yellow Black
	}
}
package com.sist.util;

import java.util.StringTokenizer;

public class MainClass2 {

	public static void main(String[] args) {
		String[] data= {
				"1|2|3|4|5",
				"6|7|8",
				"10|11",
				"10|11|12|13|14|15",
				"20|21|22|23|24|25|26|27"
		};
		for(int i=0; i<data.length; i++) {
			StringTokenizer st = new StringTokenizer(data[i], "|");
			System.out.println(data[i]);
			System.out.println("===========");
			while(st.hasMoreTokens()) {
				System.out.println(st.nextToken());
			}
			System.out.println();
		}
	}
}
package com.sist.util;
import java.util.*;
public class MainClass3 {

	public static void main(String[] args) {
		Random r = new Random();
		int[] resDay = new int[r.nextInt(10)+5]; //5~14
		
		String day="";
		for(int i=0; i<resDay.length; i++) {
			resDay[i] = r.nextInt(31)+1;
			day+=resDay[i]+"|";
		}
		day=day.substring(0, day.lastIndexOf("|")); //마지막 | 지움
		
		System.out.println(day);
		//22|9|29|21|26
		
		//날짜별 분리
		String[] resdays = day.split("\\|"); //정규식 들어가야함
		/*
		 * 정규식
		 * ^ => 시작 문자 ^A => ^[가-힣] ^[A-Za-z] ^[0-9]
		 *                 [^가-힣] =>제외 []안에 들어가있으면 한글을 제외한 나머지
		 *            지니뮤직 => 3상승 => [^가-힣] ==> 3
		 *                    1하강 => [^0-9] ==> 하강
		 * $ => 끝문자     A$
		 * . => 임의의 한글자 (모든 글자) ==> \\.
		 * | => 선택
		 * ? => 있으면 출력, 없으면 미출력
		 */
		for(String s:resdays) {
			System.out.println(s);
		}
		//229292126
		System.out.println("=====StringTokenizer=====");
		StringTokenizer st = new StringTokenizer(day, "|"); //일반기호
		while(st.hasMoreTokens()) {
			System.out.println(st.nextToken());
		}
		//229292126
	}

}

 

Date, Calendar

package com.sist.util;

import java.util.*;
import java.util.Calendar;
import java.util.Scanner;

// Calendar ==> 요일, 마지막 날짜
// 날짜 관련
public class MainClass4 {
	
	public static void main(String[] args) {
		// 클래스 생성
		Calendar cal = Calendar.getInstance(); // 싱클턴 패턴 => 메모리를 한개만 생성
		// 시스템의 실제 날짜를 읽어 온다
		System.out.println(cal.get(Calendar.YEAR));
		System.out.println(cal.get(Calendar.MONTH)+1);
		System.out.println(cal.get(Calendar.DATE));
		System.out.println(cal.get(Calendar.DAY_OF_WEEK));
		int week = cal.get(Calendar.DAY_OF_WEEK)-1;
		String[] strWeek = {"일","월","화","수","목","금","토"};
		System.out.println(strWeek[week]+"요일");
		System.out.println(cal.getActualMaximum(Calendar.DATE)); //마지막날짜
		
		Scanner scan = new Scanner(System.in);
		System.out.print("년도 입력>");
		int year = scan.nextInt();
		
		System.out.print("월 입력>");
		int month = scan.nextInt();

		//System.out.print("일 입력>");
		//int day = scan.nextInt();
		
		cal.set(Calendar.YEAR,year);
		cal.set(Calendar.MONTH,month-1); //0이 1월
		cal.set(Calendar.DATE,1);
		
		System.out.println(cal.get(Calendar.YEAR));
		System.out.println(cal.get(Calendar.MONTH)+1);
		System.out.println(cal.get(Calendar.DATE));
		System.out.println(cal.get(Calendar.DAY_OF_WEEK)-1);
		week=cal.get(Calendar.DAY_OF_WEEK)-1;
		
		System.out.println(strWeek[week]+"요일");
	}
}

package com.sist.util;
import java.util.*;
public class MainClass5 {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		System.out.print("년도 입력:");
		int year = scan.nextInt();
		
		System.out.println("월 입력:");
		int month = scan.nextInt();
		
		String[] strWeek={"일","월","화","수","목","금","토"};
		
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.YEAR, year);
		cal.set(Calendar.MONTH, month-1);
		cal.set(Calendar.DATE, 1);
		
		// 요일 구하기
		int week = cal.get(Calendar.DAY_OF_WEEK)-1;
		int lastday = cal.getActualMaximum(Calendar.DATE);
		
		// 출력
		//System.out.println("요일:"+strWeek[week]);
		//System.out.println("마지막날짜:"+lastday);
		System.out.println(year+"년도"+month+"월");
		
		for(int i=0; i<7; i++) {
			System.out.print(strWeek[i]+"\t");
		}
		System.out.println();
		for(int i=1; i<=lastday; i++) {
			if(i==1) {
				for(int j=0; j<week; j++) {
					System.out.print("\t"); //1일전 공백주기
				}
			}
			System.out.printf("%2d\t",i);
			week++;
			
			if(week>6) {
				week=0;
				System.out.println();
			}
		}
	}
}

///

 

ArrayList , Vector

 

HashMap

============

 = regex

 = reflect

============ Web

 

 

2. Collection : 자료구조

  메모리 저장해서 사용시 편리하게 사용이 가능

  => 사용되는 프로그램 : 입출력 => CURD => 단점 (메모리) <=> 파일

                                                        => 모든 데이터 저장이 가능

                                                             10, 10.5, "aaa", 'A'

                                             CURD => 읽기, 저장, 삭제, 수정

                                                           저장 갯수

                                           라이브러리 => 모든 개발자 동일 => 표준화

                                             읽기 : get(0)

                                             갯수 : size()

                                             수정 : set()

                                             삭제 : remove()

                                             저장 : add()

  => 가변형 ==> 배열

  => 종류

  1) 순서가 존재 중복된 데이터 추가

     List(인터페이스) =====> 데이터베이스

      => 구현한 클래스

       ArrayList : 비동기 (속도빠름, 데이터베이스)

       Vector : 동기 (네트워크)

       LinkedList

       Queue

       Stack

package com.sist.collection;

import java.util.ArrayList;

public class MainClass {

	public static void main(String[] args) {
		ArrayList list = new ArrayList();
		//추가
		list.add(10);
		list.add(10.5);
		list.add("홍길동");
		list.add('A');
		
		//값 읽기
		int a = (int)list.get(0);
		double d = (double)list.get(1);
		String s = (String)list.get(2);
		char c = (char)list.get(3);
		
		System.out.println(a);
		System.out.println(d);
		System.out.println(s);
		System.out.println(c);
	}

}
public static void main(String[] args) {
		ArrayList list = new ArrayList();
		
		list.add("홍길동"); //0
		list.add("심청이"); 
		list.add("이순신");
		list.add("박문수");
		list.add("춘향이");
		
		list.remove(2); // 2번 이순신빠지고 자동으로 박문수가 2로 됨
		
		list.add(1, "강감찬"); // 1번이 되고 심청이가 2번이 됨
		
		for(int i=0; i<list.size(); i++) {
			String name = (String)list.get(i);
					System.out.println(name);
					
		}

 제네릭스 타입 : 전체의 데이터형을 변경

 <String> => Object => String으로 변경

 T => 타입 임시 데이터형

class Box<T> {

   T t;

   public void setT(T t) {

      this.t = t;

   }

   public T getT() {

      return t;

   }

}

Box<String> box = new Box<String>()

package com.sist.collection;
import java.util.*;
class Movie{
	private int mno;
	private String title;
	private String director;
	private String actor;
	public int getMno() {
		return mno;
	}
	public void setMno(int mno) {
		this.mno = mno;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getDirector() {
		return director;
	}
	public void setDirector(String director) {
		this.director = director;
	}
	public String getActor() {
		return actor;
	}
	public void setActor(String actor) {
		this.actor = actor;
	}
	
}
public class MainClass2 {

	public static void main(String[] args) {
		ArrayList<Movie> list = new ArrayList<Movie>(); //영화정보만 저장
	}
}

 

2) 순서가 없고 중복이 없는 데이터 추가 ===> 탐색기

     Set

       HashSet

       TreeSet

 

3) 키, 데이터 ==> 두개를 동시에 저장 ==> 클래스 관리 (Spring)

     Map

       Hashtable

       Hashmap

  

4) 응용

 

BoardVO

package com.sist.back;

import java.util.Date;
// 캡슐화 => 데이터 보호 목적
public class BoardVO {
	private int no;
	private String name;
	private String subject;
	private String content;
	private String pwd;
	private Date regdate;
	private int hit;
	public int getNo() {
		return no;
	}
	public void setNo(int no) {
		this.no = no;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSubject() {
		return subject;
	}
	public void setSubject(String subject) {
		this.subject = subject;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	public Date getRegdate() {
		return regdate;
	}
	public void setRegdate(Date regdate) {
		this.regdate = regdate;
	}
	public int getHit() {
		return hit;
	}
	public void setHit(int hit) {
		this.hit = hit;
	}
	
}

 

BoardManager

package com.sist.back;
import java.util.*;
public class BoardManager {
	private static ArrayList<BoardVO> list= //제네릭스타입 BoardVO타입만 저장
			new ArrayList<BoardVO>();
	public int sequence() { // 자동 증가 번호 제작 
		int max = 0;
		for(BoardVO vo : list) {
			if(max<vo.getNo())
				max=vo.getNo();
		}
		return max+1; // private int no 사용자가 입력해주는 번호가 아니라 자동증가해야되기 떄문에
	}
	
	// 추가
	public void insert(BoardVO vo) {
		vo.setRegdate(new Date()); //new Date 오늘 날짜
		vo.setNo(sequence());
		list.add(vo);
	}
	// 목록 출력
	public ArrayList<BoardVO> select(){
		return list;
	}
}

 

BoardMainFrame

package com.sist.front;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import com.sist.back.*;
import java.util.*;
// 날짜
import java.text.*; //SimpleDateFormat

public class BoardMainFrame extends JFrame implements ActionListener{
	BoardListPanel bp = new BoardListPanel();
	BoardInsertPanel bi = new BoardInsertPanel();
	JTabbedPane tp = new JTabbedPane();
	// 프로그램 연결 => ArrayList => BoardManager
	BoardManager bm = new BoardManager();
	
	public BoardMainFrame() {
		tp.addTab("게시판목록", bp);
		tp.addTab("글쓰기", bi);
		tp.setTabPlacement(tp.BOTTOM);
		//tp.setSelectedIndex(1); //첫화면 탭
		add("Center",tp);
		setSize(640, 480);
		setVisible(true);
		
		bp.b.addActionListener(this); //새글
		bi.b1.addActionListener(this); //글쓰기
		bi.b2.addActionListener(this); //취소
	}
	public static void main(String[] args) {
		new BoardMainFrame();
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		if(e.getSource()==bp.b) { //새글 버튼을 눌렸을 때
			//글쓰기 화면으로 이동
			tp.setSelectedIndex(1);
		}
		else if(e.getSource()==bi.b1) { //글쓰기 버튼 눌렸을 때
			//ArrayList에 저장
			// 입력한 데이터 읽기
			String name = bi.tf1.getText();
			String subject = bi.tf2.getText();
			String content = bi.ta.getText();
			String pwd = String.valueOf(bi.pf.getPassword()); //char=>String변환
			// password는 char[]로
			BoardVO vo = new BoardVO();
			vo.setName(name);
			vo.setSubject(subject);
			vo.setContent(content);
			vo.setPwd(pwd);
			bm.insert(vo); // ArrayList에 추가
			// 목록 추가 => 메소드
			listPrint(); //호출
			// 목록 이동
			tp.setSelectedIndex(0);
		}
		else if(e.getSource()==bi.b2) { //취소 버튼 눌렸을 때
			//목록으로 이동
			tp.setSelectedIndex(0);
		}
	}
	public void listPrint() { //메소드추가
		// ArrayList받기
		ArrayList<BoardVO> list = bm.select();
		// 테이블에 출력
		// 테이블 지우기
		for(int i=bp.model.getRowCount()-1; i>=0; i--) {
			bp.model.removeRow(i);
		}
		// 출력
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		// MM(월) mm(분)
		for(BoardVO vo : list) {
			String[] data = {
				String.valueOf(vo.getNo()),
				vo.getSubject(),
				vo.getName(),
				sdf.format(vo.getRegdate()),
				String.valueOf(vo.getHit())
			};
			
			bp.model.addRow(data);
			
		}
	}
}

 

BoardListPanel

package com.sist.front;
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
public class BoardListPanel extends JPanel{
	JButton b;
	TableColumn column;
	JTable table; // 모양관리 => View
	DefaultTableModel model; // 데이터관리 => 수정, 추가, 출력 => Model
	public BoardListPanel() {
		b = new JButton("새글");
		String[] col = {"번호", "제목", "이름", "작성일", "조회수"};
		String[][] row = new String[0][5];
		// 상속이 없이 재정의가 가능한 클래스 ==> 익명의 클래스
		model = new DefaultTableModel(row,col) {
			public boolean isCellEditable(int r, int c) {
				return false;
			}
		};
		
		table = new JTable(model);
		table.getTableHeader().setBackground(Color.cyan);
		//table.setShowVerticalLines(false);
		table.setShowGrid(false);
		table.setRowHeight(35);
		table.setSelectionForeground(Color.white);
		table.setSelectionBackground(Color.pink);
		table.getTableHeader().setReorderingAllowed(false); //이동불가능
		
		JScrollPane js = new JScrollPane(table);
		js.getViewport().setBackground(Color.white);
		//배치
		setLayout(null);
		b.setBounds(10, 15, 100, 30);
		js.setBounds(10, 50, 610, 380);
		
		add(b);
		add(js);
		
		for(int i=0; i<5; i++) {
			column = table.getColumnModel().getColumn(i);
			DefaultTableCellRenderer render = new DefaultTableCellRenderer();
			if(i==0) {
				column.setPreferredWidth(30);
				render.setHorizontalAlignment(JLabel.CENTER);
			}
			else if(i==1) {
				column.setPreferredWidth(385);
				render.setHorizontalAlignment(JLabel.LEFT);
			}
			else if(i==2) {
				column.setPreferredWidth(60);
				render.setHorizontalAlignment(JLabel.CENTER);
			}
			else if(i==3) {
				column.setPreferredWidth(80);
				render.setHorizontalAlignment(JLabel.CENTER);
			}
			else if(i==4) {
				column.setPreferredWidth(45);
				render.setHorizontalAlignment(JLabel.CENTER);
			}
			column.setCellRenderer(render);
		}
			//출력
			//String[] data = {"1", "ArrayList 연습중입니다", "홍길동", "2020-07-24", "0"};
			//model.addRow(data);
	}
}

 

BoardInsertPanel

package com.sist.front;
import java.awt.*;
import javax.swing.*;
public class BoardInsertPanel extends JPanel {
	JLabel title = new JLabel("글쓰기",JLabel.CENTER); //가운데정렬
	JLabel la1,la2,la3,la4;
	JTextField tf1,tf2;
	JTextArea ta;
	JPasswordField pf;
	JButton b1,b2;
	
	public BoardInsertPanel() {
		title.setFont(new Font("굴림체", Font.BOLD, 40));
		la1 = new JLabel("이름", JLabel.RIGHT);
		la2 = new JLabel("제목", JLabel.RIGHT);
		la3 = new JLabel("내용", JLabel.RIGHT);
		la4 = new JLabel("비밀번호", JLabel.RIGHT);
		
		tf1 = new JTextField();
		tf2 = new JTextField();
		
		ta = new JTextArea();
		JScrollPane js = new JScrollPane(ta);
		
		pf = new JPasswordField();
		
		b1 = new JButton("글쓰기");
		b2 = new JButton("취소");
		
		setLayout(null);
		title.setBounds(10, 15, 600, 45); //글쓰기탭
		add(title);
		
		la1.setBounds(50, 70, 100, 30);
		tf1.setBounds(155, 70, 200, 30);
		add(la1);add(tf1);
		
		la2.setBounds(50, 105, 100, 30);
		tf2.setBounds(155, 105, 350, 30);
		add(la2);add(tf2);
		
		la3.setBounds(50, 140, 100, 30);
		js.setBounds(155, 140, 350, 150);
		add(la3);add(js);
		
		la4.setBounds(50, 295, 100, 30);
		pf.setBounds(155, 295, 100, 30);
		add(la4);add(pf);
		
		JPanel p = new JPanel();
		p.add(b1);
		p.add(b2);
		
		p.setBounds(10, 330, 600, 35);
		add(p);
	}
}

 

반응형
Comments