라이브러리(API)

패키지 단위로 제공한다.

내장(부) API

접근 : (모듈 ->) 패키지 -> 클래스
java.lang. -import를 시키지 않는다. / 반대로 이외의 것들은 import 해줌
java.lang 패키지에서는 Object가 제일 중요하다.
toString(), equals()

  • String / StringBuffer / StringBuilder (중요)
    String - 불변성
    다뤄야할 데이터의 80퍼가 문자열이기때문에 외울 정도로 해봐야 한다.

  • Math 클래스

  • Wrapper 류
    기본 자료형을 클래스화 시킨 것

  1. 최대 최소값 알 수 있다.
  2. 형변환 가능하다
    기본적으로 숙지 해둘것
    Integer.parseInt
    Float.parseFloat
  • 외부 API

주민등록 검사 코드


public class JuminCheckEx01 {

	public static void main(String[] args) {
		// 입력
		// 처리 - 비즈니스 로직
		// 출력
		
		if (args.length != 1) {
			System.out.println("java 클래스명 xxxxxx-xxxxxxx 형식으로 입력");
		} else {
//			System.out.println("정상 입력");
			
			// replaceAll("-", "");로 문자열 "-" 을 "공백("")" 으로 치환
			String strJumin = args[0].replaceAll("-","");
			System.out.println(strJumin);
			
			int num01 = Integer.parseInt(strJumin.substring(0,1)) * 2;
			int num02 = Integer.parseInt(strJumin.substring(1,2)) * 3;
			int num03 = Integer.parseInt(strJumin.substring(2,3)) * 4;
			int num04 = Integer.parseInt(strJumin.substring(3,4)) * 5;
			int num05 = Integer.parseInt(strJumin.substring(4,5)) * 6;
			int num06 = Integer.parseInt(strJumin.substring(5,6)) * 7;
			int num07 = Integer.parseInt(strJumin.substring(6,7)) * 8;
			int num08 = Integer.parseInt(strJumin.substring(7,8)) * 9;
			int num09 = Integer.parseInt(strJumin.substring(8,9)) * 2;
			int num10 = Integer.parseInt(strJumin.substring(9,10)) * 3;
			int num11 = Integer.parseInt(strJumin.substring(10,11)) * 4;
			int num12 = Integer.parseInt(strJumin.substring(11,12)) * 5;
			
			
			int lastNum = Integer.parseInt(strJumin.substring(12,13));
			
			int sum = num01 + num02 + num03 + num04 + num05 + num06 
            		+ num07 + num08 + num09 + num10 + num11 + num12;
			
			int resultNum = (11 - (sum%11) ) % 10;
			
			if( lastNum == resultNum ) {
				System.out.println("주민등록번호 형식이 맞음");
			} else {
				System.out.println("주민등록번호 형식이 틀림");
			}
		}

	}

}

코드를 더 짧고 간단하게


public class JuminCheck02 {

	public static void main(String[] args) {
		if (args.length != 1) {
			System.out.println("java 클래스명 xxxxxx-xxxxxxx 형식으로 입력");
		} else {
			String strJumin = args[0].replaceAll("-", "");

			int[] bits = { 2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5 };
			int sum = 0;
			for (int i = 0; i < bits.length; i++) {
				sum += Integer.parseInt(strJumin.substring(i, i + 1)) * bits[i];
			}
			int lastNum = Integer.parseInt(strJumin.substring(12, 13));

			int resultNum = (11 - (sum % 11)) % 10;

			if (lastNum == resultNum) {
				System.out.println("주민등록번호 형식이 맞음");
			} else {
				System.out.println("주민등록번호 형식이 틀림");
			}
		}
	}
}

실제 주민번호 입력하면 "주민등록번호 형식이 맞음" 출력



System 클래스

System 클래스는 JVM이 실행되고 있는 운영체제(OS)와 소통을 위한 클래스로 다양한 정적(static) 메서드를 제공.

System.out.println - System안에 out, out 안에 println
System.in

System 메서드

System.exit(0) 강제 종료


public class SystemEx01 {

	public static void main(String[] args) {
		System.out.println("시작");
		
		if(args.length !=1) {
			System.out.println("비정상");
			
			// 프로그램 종료 / break처럼 그냥 종료시켜버림
			System.exit(0);
		}
		System.out.println("정상");
		
		System.out.println("끝");
	}

}

System.exit()로 종료 시키고 그 뒤에 값 출력 안하게 함


System.currentTimeMillis() - 밀리세컨드 / System.nanoTime() - 나노초 단위

System.out.println(System.currentTimeMillis()) - 밀리세컨드
1970년 1월 1일부터 경과한 시간을 long값으로 리턴, 1/1000초 값을 리턴한다.

System.out.println(System.nanoTime()) - 나노초 단위
현재 시간(시스템 시간)과 관계가 없음, 작동중인 JVM의 정밀한 시간 소스의 현재 값을 long타입으로 나노세턴드 초로 반환


public class SystemEx02 {

	public static void main(String[] args) {
		// timestamp 밀리세컨드
		System.out.println(System.currentTimeMillis());
		
		// 나노초 단위로 만듦
		System.out.println(System.nanoTime());	
	}

}




프로그램에 대한 실행시간 출력


public class SystemEx02 {

	public static void main(String[] args) {
		
		// 어떤 프로그램에 대한 실행시간 출력하기
		long time1 = System.currentTimeMillis();
		int sum = 0;
		for(int i=1; i<1_000_000; i++) {
			sum += i;
		}
		long time2 = System.currentTimeMillis();
		System.out.println("실행시간 : " + (time2 - time1));
	}

}




System.Property() - 시스템 정보 가져오기


public class SystemEx03 {

	public static void main(String[] args) {
		System.out.println(System.getProperty("os.name"));
		System.out.println(System.getProperty("user.name"));
		System.out.println(System.getProperty("user.home"));
	}

}




System.out.println(System.lineSeparator());줄바꿈


public class SystemEx04 {

	public static void main(String[] args) {
		System.out.print("Hello");
		
		// 줄바꿈(Enter) 해준다
		//System.out.print("\n");
		
		// 라인 구분자
		System.out.print(System.lineSeparator());
		
		System.out.print("World");
	}

}




System.arraycopy() 주소값이 아닌 데이터값을 복사

System.arraycopy(src, srcPos, dest, destPos, length)

Object src : 복사하고자 하는 소스 (원본)

int srcPos : 위의 원본 소스에서 어느 부분부터 읽어올지 위치 정해준다 ( 처음부터 데이터 읽으려면 0 넣음)

Object dest : 복사할 소스 (복사하려는 대상)

int destPos : 위의 복사본에서 자료를 받을 떄, 어느 부분부터 쓸 것인지 시작 위치 정함 ( 처음부터 데이터 쓸거면 0 넣음 )

int length : 원본에서 복사본으로 데이터를 읽어서 쓸 데이터 길이 ( 원본에서 복사본까지 얼만큼 읽어 올지 입력하는 것)


public class SystemEx05 {

	public static void main(String[] args) {
		int[] src = {1, 2, 3, 4, 5};
		
		// shadow copy - 참조값 복사 
		int[] dest1 = src;
		
		System.out.println(src[0]);
		System.out.println(dest1[0]);
		
		// for
		// System.arraycopy();
		int[] dest2 = {0, 0, 0, 0 ,0};
		
		// deep copy : 참조값이 아닌 데이터 값을 복사하는 것
		System.arraycopy(src, 0, dest2, 0, src.length);
		
		for(int i=0; i<dest2.length; i++) {
			System.out.println(dest2[i]);
		}

	}

}




cmd에서 브라우저 실행시키기

위치를 알아야 한다
""를 하는 이유는 공백이 있으면 안되기때문에 한번에 처리하기 위함

다음 페이지 열기




프로그램에서 실행시켜 edge브라우저 열기

'\'는 두 개 있어야 한다

import java.io.IOException;

public class ProcessBuilderEx01 {

	public static void main(String[] args) throws IOException {
		
		// '\' 두 개로 해줘야 함
		ProcessBuilder processBuilder
		= new ProcessBuilder("C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe");
		processBuilder.start();
	}

}

뒤에 "www.daum.net" 추가하여 실행시 다음 페이지 열리게 하기

import java.io.IOException;

public class ProcessBuilderEx01 {

	public static void main(String[] args) throws IOException {
		
		// '\' 두 개로 해줘야 함
		ProcessBuilder processBuilder
		= new ProcessBuilder("C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe", "www.daum.net");
		processBuilder.start();
	}

}



날짜 및 시간의 처리

현재 날짜 및 시간 출력

toLocaleString(); : 현재 날짜와 시간을 출력하는 메서드

import java.util.Date;

public class DateEx01 {

	public static void main(String[] args) {
		// Date 클래스 접근
		java.util.Date d1 = new java.util.Date();
		Date d2 = new Date();
		
		// 참조값이 나오지않고 내용이 나온다 / toString이 오버라이딩 돼있다
		System.out.println(d1);
		System.out.println(d2);
		System.out.println(d2.toString());
		
		// deprecated / 나중엔 쓰지 않을거니까 가능하면 쓰지 말라는 의미로 줄이 그어져 있다.
		System.out.println(d2.toLocaleString());
		
		
		
	}

}




연, 월, 일, 요일 출력하기 / 요일을 한글로 출력

import java.util.Date;

public class DateEx01 {

	public static void main(String[] args) {
		// Date 클래스 접근
		java.util.Date d1 = new java.util.Date();
		Date d2 = new Date();
		
		// 연, 월, 일 분리해서 출력
		String strDate = d2.toLocaleString();
		
		// 연 출력
		System.out.println(strDate.substring(0,4));
		
		// 연 출력 / 1900을 빼고 나와서 + 1900 해줘야 한다.
		System.out.println(d2.getYear() + 1900);
		
		// 월 출력
		System.out.println(d2.getMonth() + 1);
		
		// 일 출력
		System.out.println(d2.getDate());
		
		// 요일 출력 / 0부터 시작 ( 일요일이 0 )
		System.out.println(d2.getDay());
		
		// getDay -> 한글출력
		// switch / if
		String[] weekname = {"일", "월", "화", "수", "목", "금", "토"};
		System.out.println(weekname[d2.getDay()]);
	}

}




특정 날 지정해서 뽑기

import java.util.Date;

public class DateEx02 {

	public static void main(String[] args) {
		Date d1 = new Date(2023-1900, 3-1, 1);
		System.out.println(d1.toLocaleString());

	}

}




책 452P 예제 해보기

import java.util.*;

public class DateTest {

	public static void main(String[] args) {
		Date d1 = new Date();
		System.out.println(d1);
		
		Date d2 = new Date(1500000000000L);
		System.out.println(d2);
		
		long gap = d1.getTime() - d2.getTime();
		System.out.println("두 날짜의 차는 " + (gap/1000/60/60/24) + "일이다");
	}

}




java.util.Calendar 사용

Date 클래스와 마찬가지로 날짜와 시간을 다루는 클래스이다.
추상클래스여서 new 객체생성이 불가능.
Calendar.getInstance()메소드를 이용하여 객체 생성 가능

사용 예제

import java.util.Calendar;

public class CalendarEx01 {

	public static void main(String[] args) {
		// 보통처럼 이렇게 선언하지 않는다.
		// Calendar calendar = new Calendar()
		
		// Calendar 선언방법
		Calendar calendar = Calendar.getInstance();
		
		// 여러 가지 내용을 함축적으로 보게 출력
		// System.out.println(calendar.toString());
		
		// 가지고 오는 방법은 이런식을 정해져있다.
		// 연 출력
		System.out.println(calendar.get(Calendar.YEAR));
		
		// 월 출력 0으로 시작이여서 +1 해줘야한다.
		System.out.println(calendar.get(Calendar.MONTH) + 1);
		
		// 일 출력
		System.out.println(calendar.get(Calendar.DATE));
		
		// 요일 출력 / 일요일 : 1
		System.out.println(calendar.get(Calendar.DAY_OF_WEEK));

	}
}




특정날짜 설정 set() / 출력

import java.util.Calendar;
import java.util.Date;

public class CalendarEx02 {

	public static void main(String[] args) {
		// 현재값
		Calendar c = Calendar.getInstance();

		// 특정날짜 설정
		c.set(2023, 3 - 1, 1);

		// 특정날짜 설정한 값 출력
		System.out.println(c.getTime());

		// 특정 기간이 지난 후를 계산 / Calendar.DATE 에 대한 3일 후
		c.add(Calendar.DATE, 3);
		System.out.println(c.getTime().toLocaleString());
		Date date = c.getTime();
		System.out.println(date);
		
        // 6달 전 출력
		c.add(Calendar.MONTH, -6);
		System.out.println(c.getTime().toLocaleString());
	}
}




달력 만들기 - 숙지

import java.util.Calendar;

public class CalendarEx03 {

	public static void main(String[] args) {
		int year = 2023;
		int month = 3;

		// 시작 일 과 끝 일을 알아야 한다.
		Calendar startCalendar = Calendar.getInstance();
		Calendar endCalendar = Calendar.getInstance();

		startCalendar.set(year, month - 1, 1);
		endCalendar.set(year, month, 1 - 1);

		int startDayOfWeek = startCalendar.get(Calendar.DAY_OF_WEEK);
		int endDate = endCalendar.get(Calendar.DATE);

		System.out.println(" SU MO TU WE TH FR SA");
		
		for (int i = 1; i < startDayOfWeek; i++) {
			System.out.print("   "); // 공백 3칸 넣음
		}

		for (int i = 1, n = startDayOfWeek; i <= endDate; i++, n++) {
			System.out.print( (i < 10) ? "  " + i : " " + i );
			if (n % 7 == 0) {
				System.out.println();
			}
		}
	}

}



문자열

StringTokenizer - 문자열 분리

StringTokenizer 클래스는 문자열을 지정한 구분자로 문자열을 쪼개주는 클래스.
그렇게 쪼개어진 문자열을 토큰(token)이라고 한다.
공백중심으로 나눠지는게 기본이고, 구분자를 정해서 하는것도 가능.

import java.util.StringTokenizer;

public class StringTokenizerE01 {

	public static void main(String[] args) {
		String strData1 = "사과 참외 수박 딸기";
		
		// 공백 단위로 나누기 / 자동적으로 분리시켜줌
		StringTokenizer st1 = new StringTokenizer(strData1);
		
		// 몇개로 분리됐는지 출력 / 소모하지 않고 남아있는 토근의 개수를 리턴
        // 여기서 소모의 개념은 nextToken()을 호출한 것을 말함.
		System.out.println(st1.countTokens());
		
		// 하나씩 인덱스 건너가면서 출력해준다 / 아무것도 없으면 에러 출력 / 다음 토큰을 문자열로 리턴.
		System.out.println(st1.nextToken());
		System.out.println(st1.nextToken());
		System.out.println(st1.nextToken());
		System.out.println(st1.nextToken());
		
        // while문으로 가져올 것이 있는 경우(true) 없을때까지 출력
		// 전체 가져오기 / 무한루프형식 사용한다.
		// hasMoreTokends()는 남아있는 토근이 있는지 여부를 리턴한다.
		while(st1.hasMoreTokens()) {
			System.out.println(st1.nextToken());
		}
		
        // 값 구별을 위해 줄바꿈 해준거임
        System.out.println();
        
		String strData2 = "사과&참외&수박&딸기";
		StringTokenizer st2 = new StringTokenizer(strData2,"&");
		
		while(st2.hasMoreTokens()) {
			System.out.println(st2.nextToken());
		}
		
         // 값 구별을 위해 줄바꿈 해준거임
        System.out.println();
        
		String strData3 = "x=100*(200+300)/2";
		StringTokenizer st3 = new StringTokenizer(strData3,"+-*/=()");
		
		while(st3.hasMoreTokens()) {
			System.out.println(st3.nextToken());
		}
	}
}



StringTokenizer 과 split의 차이

StringTokenizer는 공백을 무시하고 출력
split은 구분자 사이에 데이터가 없으면 공백 데이터를 반환.

import java.util.StringTokenizer;

public class StringTokenizerEx02 {

	public static void main(String[] args) {
		String strData = "사과&참외&&수박&&딸기";
		
		StringTokenizer st = new StringTokenizer(strData, "&");
		while(st.hasMoreTokens()) {
			System.out.println(st.nextElement());
		}
		// 결과값 띄어서 확인하기위해 줄바꿈 넣은거임 그냥
		System.out.println();
		
		String[] arrData = strData.split("&");
		for(String data : arrData) {
			System.out.println(data);
		}
	}
}




StringJoiner 합치기(연결) / StringTokenizer과 반대

import java.util.StringJoiner;

public class StringJoinerEx01 {

	public static void main(String[] args) {
		// 문자열 연결
		String str1 = "사과" + ",수박" + ",딸기" + ",수박";
		System.out.println(str1);
		
		// 문자열 연결 메서드로 써보자
		String str2 = "사과".concat(",수박").concat(",딸기").concat(",참외");
		System.out.println(str2);
		
		// 이거도 문자열 연결
		String str3 = String.format("%s,%s,%s,%s", "사과", "수박", "딸기", "참외");
		System.out.println(str3);
		
		// 배열화시켜서 해보자
		String[] arrStr = {"사과", "수박", "딸기", "참외"};
		String str4 = String.join(",", arrStr);
		System.out.println(str4);
		
		
		StringJoiner sj = new StringJoiner(",");
		sj.add("사과");
		sj.add("수박");
		sj.add("딸기");
		sj.add("참외");
		
		System.out.println(sj.toString());
	}

}




Random값

Random

import java.util.Random;

public class RandomEx01 {

	public static void main(String[] args) {
		// 랜덤값을 얻어내는 Random클래스
		//System.currentTimeMillis() <- seeding 값,  임의의 수를 가져올 바구니
		Random r1 = new Random(System.currentTimeMillis());
		
		// 범위 내에서 랜덤값 출력 / 타입은 여러개
		System.out.println(r1.nextInt());
		System.out.println(r1.nextInt());

		// 10까지 랜덤값 출력
		System.out.println(r1.nextInt(10));
		
		// 로또번호 / 45까지 랜덤숫자
		System.out.println(r1.nextInt(45)+1);
	}

}




Random으로 로또번호 생성 (중복허용)

import java.util.Random;

public class RandomEx02 {

	public static void main(String[] args) {
		// 6개씩 5줄을 출력하는 로또번호 추출기
		
		Random r1 = new Random(System.currentTimeMillis());
		
		for(int i=0; i<5; i++) {
			for(int j=0; j<6; j++) {
				System.out.printf("%2d ",r1.nextInt(45)+1);
			}
			System.out.println();
		}

	}

}




값 입력하기

Scanner - 값 입력하기

키보드에서 입력되는 데이터를 처리.
java.util 패키지에 속해 있다.

공백까지만 출력됨 - next()

import java.util.Scanner;

public class ScannerEx01 {

	public static void main(String[] args) {
		// Scanner(System.in) : 시스템입력 , 나 키보드를통해서 입력을 받을래 
		Scanner sc = new Scanner(System.in);
		System.out.print("입력 : " );
		
		String msg = sc.next();
		
		System.out.println("msg : " + msg);
		
		// 닫기
		sc.close();
	}
}

공백부터 출력이 안됨

엔터키까지 입력 받기 - nextLine();

import java.util.Scanner;

public class ScannerEx01 {

	public static void main(String[] args) {
		// Scanner(System.in) : 시스템입력 ,  키보드를통해서 입력 받기
		Scanner sc = new Scanner(System.in);
		System.out.print("입력 : " );
		
		// 공백까지만 입력 받음
//		String msg = sc.next();
		
		// 엔터키까지 입력 받기
		String msg = sc.nextLine();
		
		System.out.println("msg : " + msg);
		
		// 닫기
		sc.close();

	}
}




아이디 비밀번호 입/출력

import java.util.Scanner;

public class ScannerEx02 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("아이디 : ");
		String msg1 = sc.nextLine();
		System.out.print("비밀번호 : ");
		String msg2 = sc.nextLine();
		
		System.out.println("msg1 : " + msg1);
		System.out.println("msg2 : " + msg2);
		
		sc.close();
	}

}




81P 예제

import java.util.Scanner;

public class ScannerTest {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.println("문자열을 입력하세요");
		
		String line = scanner.nextLine();
		System.out.printf("입력한 문자열 : %s %n",line);
		
		System.out.println("정수를 입력하세요.");
		int num1 = scanner.nextInt();
		System.out.printf("입력한 정수 : %s %n", num1);
		
		System.out.println("실수를 입력하세요.");
		double num2 = scanner.nextDouble();
		System.out.printf("입력한 실수 %f %n", num2);
		
		System.out.println("불리언을 입력하세요.");
		boolean bool = scanner.nextBoolean();
		System.out.printf("입력한 불리언 : %b %n", bool);
		
		scanner.close();
	}
}




무한반복 중 exit 입력하면 종료하게 만들기

while문으로 무한반복을 만들어 계속 입력받아 출력하게 만든 후 exit를 입력시 종료되게 함

import java.util.Scanner;

public class ScannerEx03 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		String msg = "";
		while(true) {
			System.out.print("입력> ");
			msg = sc.nextLine();
			if(!msg.equals("exit")) {
				System.out.println("msg : " + msg);
			} else {
				System.out.println("종료");
				break;
			}
		}
		sc.close();
	}
}




구구단 단수 입력한단 출력

q 입력시 종료

import java.util.Scanner;

public class Gugudan {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

		String dan1 = "";
		while (true) {
			System.out.print("단수 입력 : ");
			dan1 = sc.nextLine();
			if(dan1.equals("q")) {
				System.out.println("종료");
				break;
			}
			int dan2 = Integer.parseInt(dan1);
			for (int i = dan2; i <= dan2; i++) {
				for (int j = 1; j <= 9; j++) {
					System.out.printf(i + "X" + j + "=" + (i * j) + " ");
				}
				System.out.println();
			}

		}

	}

}




컬렉션 프레임워크

컬렉션 : 여러 객체(데이터)를 모아놓은 것을 의미
프레임워크 : 표준화, 정형화된 체계적인 프로그래밍 방식
컬렉션 프레임워크 : 컬렉션(다수의 객체)를 다루기 위한 표준화된 프로그래밍 방식

어느 특정 클래스 하나가 아닌 여러 클래스의 묶음 (wrapper 류)


3가지 계열

List 계열
Set 계열
Map 계열

List 계열

List는 순서가 있는 데이터의 집합, 순서가 있기 때문에 동일한 데이터의 중복이 허락.
대표적인 List계열의 구현체 : ArrayList, LinkedList, Stack, Vector

Set 계열

Set은 순서를 유지하지 않는 데이터의 집합, List와 달리 순서가 없으며, 데이터 중복을 허용하지 않음.
대표적인 Set계열의 구현체 : HashSet, TreeSet

Map 계열

Map계열은 키와 값의 쌍으로 데이터를 관리하는 집합.
이때 키는 중복되지 않고 값은 중복이 허용.
대표적인 Map계열의 구현체 : HashMap, TreeMap, Hashtable, Properties

ArrayList

List인터페이스를 상속받은 클래스
배열은 크기가 고정인 반면 ArrayList는 크기가 가변적으로 변한다.
ArrayList는 Object 배열을 이용해서 데이터를 순차적으로 저장한다.

import java.util.ArrayList;

public class ArrayListEx01 {

	public static void main(String[] args) {
		// List 계열의 Collection Framework
		// 데이터를 저장할 ArrayList 선언
		ArrayList al1 = new ArrayList();
		
		// 100 개의 방을 가짐
		ArrayList al2 = new ArrayList(100);
		
        // add()메서드로 요소 추가
		// 데이터 집어넣음 / 배열과 유사한 형식으로 저장되어 있다.
		// String이 Object로 형변환
		al1.add("홍길동");
		al1.add("박문수");
		al1.add("이몽룡");
		
		System.out.println(al1);
		
		// 데이터 갯수
		System.out.println(al1.size());
		
		// al1은 Object이기때문에 형변환 해줘야한다. / 형변환 안해주면 에러
		String data1 = (String)al1.get(0);
		String data2 = (String)al1.get(0);
		
		System.out.println(data1);
		System.out.println(data2);
		
		// 전체데이터를 보기위해 for문 사용
		for(int i =0; i<al1.size(); i++) {
			System.out.print((String)al1.get(i));
		}
	}

}




ArrayList의 추가 / 삭제 / 수정

import java.util.ArrayList;

public class ArrayListEx02 {

	public static void main(String[] args) {
		ArrayList al = new ArrayList();
		al.add("홍길동");
		al.add("박문수");
		al.add("이몽룡");
		
		System.out.println(al.toString());
		
		// 추가 / 삭제가 자유로움
		// add() : 추가 / 2번째에 장길산 추가
		al.add(2, "장길산");
		System.out.println(al.toString());
		
		// set() : 수정 / 0번째를 이몽룡으로 바꿈
		al.set(0, "이몽룡");
		System.out.println(al.toString());
		
		// remove() : 삭제 / 0번째 삭제
		al.remove(0);
		System.out.println(al.toString());
		
		// clear() : 전체삭제 / size()도 지워진다
		al.clear();
		System.out.println(al.toString());
		System.out.println(al.size());
	}

}




클래스도 넣을 수 있다

Person이라는 클래스를 만들어줌


public class Person {
	private String hakbun;
	private String name;
	
	public Person(String hakbun, String name) {
		this.hakbun = hakbun;
		this.name = name;
	}

	public String getHakbun() {
		return hakbun;
	}

	public String getName() {
		return name;
	}

	@Override
	public String toString() {
		return "Person [hakbun=" + hakbun + ", name=" + name + "]";
	}		
}

ArrayListEx03 클래스 만들어서 Person 클래스 호출

import java.util.ArrayList;

public class ArrayListEx03 {

	public static void main(String[] args) {
		ArrayList al = new ArrayList();
		
		Person p1 = new Person("1001", "홍길동");
		Person p2 = new Person("1002", "박문수");

		// Person이 Object로 형변환 돼서 들어간다.
		al.add(p1);
		al.add(p2);
		
		System.out.println(al);
		
		// 전체 데이터 확인
		for(int i=0; i<al.size(); i++) {
			Person p = (Person)al.get(i);
			System.out.println(p.getHakbun());
			System.out.println(p.getName());
		}
	}
}




제네릭

컬렉션 클래스 들은 재부분 제네릭이 적용되어 있다.
컬렉션 내부 자료형 선언 / 확장되면 클래스, 메서드도 가능
정해진 타입만 들어올 수 있게 제한

import java.util.ArrayList;

public class ArrayListEx04 {

	public static void main(String[] args) {
		ArrayList al1 = new ArrayList();
		al1.add("홍길동");
		
		// 데이터 출력/가공할때 문제생김 /
		al1.add(new Person("1001", "홍길동"));

		// 데이터 출력 해보기 / 실행할때 에러남
		//for(int i=0; i<al1.size(); i++) {
			//String s = (String)al1.get(i);
			//System.out.println(s);
		//}
		
		// Generic : 컬렉션 내부 자료형 선언
		ArrayList<String> al2 = new ArrayList<>();
		al2.add("홍길동");
		
		// 자료형이 맞지않아 에러난다.
		// al2.add(new Person("1001", "홍길동"));
		
		al2.add("박문수");
		
		for(int i=0; i<al2.size(); i++) {
			String s = al2.get(i);
			System.out.println(s);
		}
	}
}




505P 예제

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ArrayListTest {
	List<Object> list = new ArrayList<>();
	List<Integer> integers = Arrays.asList(1, 2, 3, 4, 5); // Arrays.asList() 메서드는 가변인자를 받아서 리스트로 리턴해주는 메서드(유용)
	
	public void createTest() {
		list.add("Hello");
		list.add("Hello"); // 동일 데이터 추가
		list.add(null); // null 추가
		list.addAll(integers); // 다른 Collection 요소 추가
		list.add(integers); // 다른 Collection 추가
		list.add(0, new Object()); // 끼워넣기
	}
	
	public void retrieveTest() {
		// 반복을 이요한 요소 조회
		for(int i=0; i<list.size(); i++) { // 리스트의 크기 조회
			System.out.println(i + ":" + list.get(i)); // 특정 인덱스의 객체 조회
		}
		
		// 포함 여부의 활용
		if(list.contains("Hello")) { // 객체의 포함 여부
			System.out.println("Hello의 위치는 : " + list.indexOf("Hello")); // 객체의 위치 조
		}
		
		// 서브 리스트 활용
		List<Object> sub = list.subList(3,5);
		System.out.println("sub의 내용 : " + sub);
		System.out.println("sub의 내용을 다 가지고 있는가? " + list.containsAll(sub));
	}
	
	public void updateTest() {
		list.set(1,  "update");
		System.out.println("업데이트 후 :" + list);
	}
	
	public void deleteTest() {
		list.remove(0); // 특정 위치의 객체 삭제
		list.remove("Hello"); // 특정 객체가 있다면 처음 객체 삭제
		
		// 타입이 Integer인 경우 삭제
		for(int i=0; i<list.size(); i++) {
			if(list.get(i) instanceof Integer) {
				list.remove(i);
			}
		}
		
		System.out.println("삭제 후 : " + list);
		list.clear(); // 리스트 초기화
		System.out.println("초기화 후 : " + list);
	}

	public static void main(String[] args) {
		ArrayListTest alt = new ArrayListTest();
		alt.createTest();
		alt.retrieveTest();
		alt.updateTest();
		alt.deleteTest();
		
	}

}




profile
개발자 꿈나무

0개의 댓글