ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [20회차-①] JAVA(기타 클래스와 제네릭)
    JAVA 2021. 4. 20. 09:13

    강의명 : 오픈프레임워크 활용 디지털융합 SW엔지니어 양성 과정

    강의 날짜 : 21.04.19

     

     

    1. Arrays 클래스

     

    import java.util.Arrays; 
    
    public class Exam {
    
    	public static void main(String[] args) {
        
    		int[] a = {0,1,2,3,4,5,6,7,8,9};
    		arrayPrint("초기배열: ",a);
    		Arrays.fill(a, 3,5,33);
    		arrayPrint("fill() 수행문: ",a);
    		Arrays.sort(a);
    		arrayPrint("sort() 수행후: ",a);
    		System.out.println("33은 배열의 "+Arrays.binarySearch(a, 33)+"번 요소");
    		System.out.println("-3은 배열의 "+Arrays.binarySearch(a, -3)+"번 요소");
    		System.out.println("53은 배열의 "+Arrays.binarySearch(a, 53)+"번 요소");
    		int[] b= {0,1,2,3,4,5,6,7,8,9};
    		System.out.println("배열 a와 배열 b가 같은가 : " +Arrays.equals(a, b));
    	}	
        
    	static void arrayPrint(String s,int[] a) {
    		System.out.print(s);
    		for(int i=0;i<a.length;i++) {
    			System.out.print(a[i]+" ");
    		}
    	System.out.println();
    	}
    }

     

    Arrays 클래스는 기본 패키지가 아니므로 import가 필요하다.

    또한 기본 자료형급 이외에는 Arrays 클래스를 사용할 수가 없다. 

     

    * Arrays.fill(배열, start index, end index, value) 

    시작 인덱스부터 마지막 인덱스-1 까지 파라미터로 넘긴 value로 값을 덮어씌어주는 메소드

     

    * Arrays. sort(배열) 

     오름차순 정렬

     

    * Arrays.binarySearch(배열, 키 값)

     이진 탐색을 진행

     

    [자료구조]CH10. 검색

    참조 : C로 배우는 쉬운 자료구조(이지영 저) 공부 날짜 : 21.04.04 검색의 이해 자료를 만들고 저장하고 정렬하는 것은 자료를 사용하기 위함이고, 사용하려면 자료 중에서도 원하는 항목을 찾아야

    crystal93.tistory.com

    이진 검색은 오름차순 정렬을 전제로 진행이 된다.

    내가 찾으려는 키 값이 [0]번 인덱스의 원소값보다 작으면 바로 대표적인 오류값 -1을 반환한다.

    반면 모든 원소와 비교를 마쳤는데도 불구하고 키 값과 일치하는 원소를 찾지 못했다면 -(원소의 개수+1)을 반환한다.

     

    * Arrays.equals(배열, 배열) 

     배열의 데이터 값을 비교하여 일치하면 true, 일치하지 않으면 false를 반환한다.

     

     

     

    2. Calendar

     

    import java.util.Calendar;
    
    public class Exam2 {
    
    	public static void main(String[] args) {
    		
    		String months[] = {"1월","2월","3월","4월","5월","6월",
            				"7월","8월","9월","10월","11월","12월"};
    		String week[]= {"","일요일","월요일","화요일","수요일","목요일","금요일","토요일"};
    		
    		Calendar calendar = Calendar.getInstance(); //추상 클래스여서 메소드로 객체를 생성
    		System.out.print("날짜");
    		System.out.print(calendar.get(Calendar.YEAR)+"년");
    		System.out.print(months[calendar.get(Calendar.MONTH)]);
    		System.out.print(" "+calendar.get(Calendar.DATE)+"일");
    		System.out.println(week[calendar.get(Calendar.DAY_OF_WEEK)]);
    		System.out.print("시간: ");
    		if(calendar.get(Calendar.AM_PM)==0) System.out.print("오전");
    		else System.out.print("오후");
    		System.out.print(calendar.get(Calendar.HOUR)+"시");
    		System.out.print(calendar.get(Calendar.MINUTE)+"분");
    		System.out.print(calendar.get(Calendar.SECOND)+"초");
    		}
    	}

     

    Calendar는 추상 클래스로 객체를 생성할 수 없다.

    하지만 JAVA가 Calendar 클래스 안에 객체를 생성하는 static 메소드를 사용하여 객체를 만들어 두었다.

    Calendar.getInstance(); 로 클래스 안에서 생성된 객체를 가져올 수 있다.

     

    * calendar.get()

    객체 calendar가 객체 메소드 get을 사용하여 객체가 가지고 있는 것을 가지고 오는 기능을 한다.

     

    Calendar클래스 상수 설명
    Calendar.YEAR 현재 연도를 반환.
    연도는 무조건 네 자리 수로 가지고 온다.
    Calendar. MONTH 현재 월을 반환
    1월 = 0, 2월 = 1, ......12월 = 11
    Calendar. DATE 현재 일을 반환
    Calendar. DAY_OF_WEEK 현재 요일을 반환
    일요일 = 1, 월요일 = 2, ...., 토요일 = 7
    0번에는 빈 문자열(Empty String)이 들어있다.
    Calendar. AM_PM 오전, 오후를 반환
    오전 = 0, 오후 = 1
    Calendar. HOUR 현재 시간을 반환
    12시간제

     

     

    3. SimpleDateFormat

     

    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;
    
    public class Exam3 {
    
    	public static void main(String[] args) {
    
    		Calendar cal = Calendar.getInstance();
    		cal.set(cal.get(Calendar.YEAR),cal.get(Calendar.MONTH),cal.get(Calendar.DATE));
    		
    		Date day = cal.getTime();
    		SimpleDateFormat sdf1,sdf2,sdf3;
    		sdf1=new SimpleDateFormat("yyyy년 MM월 dd일 E요일");
    		sdf2=new SimpleDateFormat("yyyy-MM-dd HH:mm");
    		sdf3=new SimpleDateFormat("yyyy-MM-dd hh:mm a");
    		System.out.println(sdf1.format(day));
    		System.out.println(sdf2.format(day));
    		System.out.println(sdf3.format(day));
    	}
    }

     

    예약 문자 설명
    y 연도. yyyy로 표현
    M 월. MM으로 표현
    d 일. dd로 표현
    E 요일
    h 시간 (12시간제)
    H 시간 (24시간제)
    m
    p or a 오전, 오후 구분

     

    날짜 포맷 클래스이며 Calendar와 Date클래스와는 달리 text 패키지 안에 들어있다.

     

     

    4. StringTokenizer

     

    import java.util.StringTokenizer;
    
    public class Exam4 {
    	static String s = "국적,대한민국,성명,김수정,성별,여,주소,서울시";
    	
    	public static void main(String[] args) {
    		
    	StringTokenizer st1 = new StringTokenizer(s,",");
    	while(st1.hasMoreTokens()) {
    		String first = st1.nextToken();
    		String second = st1.nextToken();
    		System.out.println(first+"\t"+second);
    	}	
    	}
    }

     

    * 생성자

    StringTokenizer(문자열, 구분자)

    StringTokenizer의 생성자가 문자열의 객체와 구분자(delimiter)를 파라미터로 받는다.

    즉, 문자열을 구분자를 기준으로 분해되는 것이다.

     

    StringTokenizer(문자열, 구분자, boolean)

    StringTokenizer의 생성자가 문자열의 객체와 구분자(delimiter), 그리고 true나 false값을 파라미터로 받는다.

    만약 boolean의 값을 false로 하면 구분자로 제외하고, 그 기준으로 분해하는 것이지만

    true라면 구분자를 모두 포함하여 문자열을 분해(토큰화)한다.

     

    문자열에서 델리미터를 제거하고 구분된 하나하나의 원소를 토큰이라고 한다.

    그래서 StringTokenizer의 기능은 토큰화이며, 이 클래스를 토큰 생성기, 문자열 분해기라고 한다.

     

    * .hasMoreTokens()

     객체가 토큰을 가지고 있는지 여부를 물음

     

    * .nextToken()

     옆에 있는 토큰을 가져오는 기능을 함

     

     

    5. Scanner

     

    * Scanner를 이용한 문자열 분해

    import java.util.Scanner;
    
    public class Exam6 {
    
    	public static void main(String[] args) {
    		
    		String s = "생각하는 자바, 재미있는 자바, 즐거운 자바, 신나는 자바";
    		Scanner scanner = new Scanner(s).useDelimiter("자바, "); //객체 생성과 문자열 분해
    		while (scanner.hasNext()) //있으면
    			System.out.println(scanner.next()); //가져옴
    	
    		scanner.close();		
    	}
    }

    Scanner 는 파라미터로 객체만 받을 수 있다.

     

    * UseDelimiter(구분자) 

     델리미터를 설정하는 메소드이다.

     

    * new (생성자).(메소드).(메소드) .... :  체이닝 방식

     

     

    * Scanner의 입력 기능

    import java.util.Scanner;
    
    public class Exam7 {
    
    	public static void main(String[] args) {
    		
    		Scanner scan =new Scanner(System.in); //키보드로 입력한 값을 받아옴
    		String input=""; //Empty String
    		do {
    			System.out.print("입력(입력 종료는Q) : ");
    			input = scan.nextLine(); //줄 단위로 복사해서 input에 대입
    			System.out.println("입력 값은 "+input); //출력
    		}while (!input.equalsIgnoreCase("Q"));// 데이터가 같은지 비교하는 메소드(대소문자 무시)
    		System.out.println("프로그램을 종료");
    	}
    }

     

    System.out : 출력

    System.in : 입력. 키보드로 입력을 받으며, Enter로 끝을 확인한다. String만 처리한다.

     

     

    6. ArrayList와 Iterator

     

    * ArrayList

    ArrayList는 배열처럼 인덱스를 가지며 세로로 관리된다.

    제네릭 괄호 안의 자료형만큼 메모리를 할당받고 그 후 그걸 세로 형식으로 관리하는 것이다.

     

    <(자료형)> 이와 같은 제네릭 자료형을 가지는데, 클래스급의 자료형만 관리하며 기본자료형은 올 수 없다.

    제네릭 자료형을 주지 않으면 경고가 나는데, 대용량 데이터를 처리시 데이터 손실의 위험이 있으니 주의해야 한다.

    기본 자료형을 쓸 때는 Wrapper클래스를 이용할 수 있다.

     

    이러한 클래스급의 메모리 형태를 가지고 데이터를 관리하는 메모리 구조를 가진 것을 Collection Framework라고 한다.

     

    이러한 메모리 구조는 사이즈가 정해져 있지 않은 동적 메모리를 가지고 있다.

    그래서 대용량 데이터를 가진 DB에는 ArrayList를 사용한다.

     

    메소드 설명
    .add(인덱스, 데이터) [인덱스] 번에 데이터 추가
    .set(인덱스, 데이터) [인덱스]번의 데이터를 파라미터로 받은 데이터로 덮어씌움
    .remove(인덱스) / .remove(데이터) 해당 데이터 삭제
    .get(인덱스) [인덱스]번에 있는 데이터를 반환한다.

     

     

    * Iterator

    낱개를 처리해주는 기능을 가지고 있는 인터페이스이다.

    하지만 인터페이스는 객체를 생성할 수 없다.

     

    그래서 ArrayList 클래스의 객체 메소드인 literator()로 객체를 얻어서 온다.

    즉, ArrayList 객체와 데이터를 공유하게 되는 것이다.

     

    import java.util.ArrayList;
    import java.util.Iterator;
    
    public class Exam8 {
    
    	public static void main(String[] args) {
    		
    		ArrayList<String> list = new ArrayList<String>();
    		list.add("사과");
    		list.add("바나나");
    		list.add("귤");
    		list.add("오렌지");
    		list.add("바나나");
    		System.out.println("요소의 개수 -> "+list.size());
    		System.out.println(">> Iterator 객체로 요소 얻기 <<");
    		
    		Iterator elements = list.iterator();
    		while(elements.hasNext()) //있으면
    			System.out.print(elements.next()+"\t"); //가져와
    		System.out.println("\n");
    		System.out.println(">>get 메소드로 요소 얻기<<");
    		for(int i=0;i<list.size();i++) {
    			System.out.print(list.get(i)+"\t"); //인덱스를 파라미터로 받음(배열처럼)
    		}
    		System.out.println();
    	}
    }

     

    크기를 구하는 명령어 설명
    .size() ArrayList의 크기 반환
    .length 배열의 크기 반환
    .length() String의 크기 반환

     

     

    7. for enhanced Loop  

     

    import java.util.ArrayList;
    
    public class Ex11 {
    
    	public static void main(String[] args) {
    
    		ArrayList<String> list = new ArrayList<String>();
    		list.add("사과");
    		list.add("바나나");
    		list.add("귤");
    		list.add("오렌지");
    		list.add("바나나");
    		
    		for (String element : list)
    			System.out.print(element + "\t");
    		System.out.println();
    	}
    }

     

    ArrayList도 배열처럼 관리되므로 for each 구문이 사용 가능하다.

    : 안에 iterator 라는 인터페이스가 포함되어있다고 보면 된다.

     

    * 반복문으로 원소를 뽑아내는 방법

    ① Iterator 인터페이스를 사용

    ② ArrayList 본인이 for반복문과 get(인덱스) 메소드 사용

    ③ for enhanced Loop 사용

     

     

    8. Hash Map

     

    HashMap은 제네릭 타입이 두 개 필요하다.

    <Key 자료형, Value 자료형> 이며, Key의 경우는 기본 String형이다.

     

    이렇게 key와 value가 쌍으로 구성된 자료구조를 map이라고 한다.

     

    import java.util.HashMap;
    import java.util.Scanner;
    
    public class Ex12 {
    
    	public static void main(String[] args) {
    	
    		HashMap<String,String> map = new HashMap<String,String>();
    		map.put("castello","1234"); //삽입
    		map.put("asdf","1111"); //삽입
    		map.put("lang","1234"); //삽입
            
    		Scanner s = new Scanner(System.in);
    		while(true) {
    			System.out.println("id와 패스워드를 입력해주세요.");
    			System.out.print("id : ");
    			String id = s.nextLine().trim();
    			System.out.print("password : ");
    			String password = s.nextLine().trim();
    			System.out.println();
    			if(!map.containsKey(id)) {
    				System.out.println("입력하신 id는 존재하지 않습니다. 다시 입력해주세요.\n");
    			}else {
    				if(!(map.get(id)).equals(password)) {
    					System.out.println("비밀번호가 일치하지 않습니다. 다시 입력해주세요.\n");
    				}else {
    					System.out.println("id와 비밀번호가 일치합니다.");
    					break;
    				}
    			}
    		}	
    	}
    }

    Key Value
    castello 1234
    asdf 1111
    lang 1234

     

    다음과 같이 Key값과 Value값을 put메소드를 이용해 넣어준다.

    그리고 containsKey()나 equals()메소드를 이용하여 입력받은 값과 테이블의 데이터와 비교하는 것이다.

    그러므로 애초에 테이블에 데이터가 없으면 의미가 없는 것이다.

     

    Value에는 중복값이 올 수 있지만, Key 값에는 유일 식별이 가능한 값이 와야 하므로 중복이 불가능하다.

     

    'JAVA' 카테고리의 다른 글

    [20회차-③] JAVA (Stream)  (0) 2021.04.20
    [20회차-②] JAVA (예외처리)  (0) 2021.04.20
    [19회차] JAVA (상속)  (0) 2021.04.17
    [18회차] JAVA (String 클래스와 Wrapper 클래스)  (0) 2021.04.15
    [17회차-③] JAVA (클래스)  (0) 2021.04.14
Designed by Tistory.