java.

brave_chicken·2024년 3월 28일

잇(IT)생 챌린지

목록 보기
14/90

WrapperTest1 490p

  • 기본형을 참조형으로 wrap, 감쌈
  • 기본형변수도 객체로 다뤄야 하는 경우, 기본형 값을 객체로 변환하여 작업수행
    : 매개변수로 객체 요구
    : 기본형 값이 아닌 객체로 저장해야할때
    : 객체간의 비교가 필요할때 등
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);

5.0이전, Deprecated,

이게 기본임을 알려주는거(지금은 다른데, 원래 형태를 보여주는거)

Integer in = new Integer(10);
//디프리캐이티드됭있는 메소드 사용하면 이렇게 표시됨. 안쓰는게맞음
test(in);
public static void test(Object obj) {
5.0이전
	Integer in = (Integer)obj;//obj사용하기 위해 Integer타입으로 캐스팅
	int myval = in.intValue();
		
	System.out.println("5.0이전버전 : "+myval);

출력 :
5.0이전버전 : 10

5.0이후 : 오토박싱, 오토언박싱 494p

  • 오토박싱
  • Object타입 변수에 int집어넣음
  • 5.0이후 버전의 jdk에서 컴파일러가 자동으로 변환해줌
  • 참조형 매개변수를 요구하는 메소드에 기본형을 전달해도, 자동으로 Integer in = new Integer(10);와 같은 코드를 실행해서 전달
int i =10;
test(i);
  • int형 변수에 참조형 매개변수를 전달하는 경우, 컴파일러가 자동으로 객체로 포장된 값을 기본형으로 변환
  • Integer in = (Integer)obj;
  • int myval = in.intValue(); 자동으로 해줌
  • 오토언박싱
public static void test(Object obj) {
	int myval2 = (int)obj;
	System.out.println("5.0이후버전 : "+myval2);
	}

출력 :
5.0이후버전 : 10

api.util

StringTokenizerTest

  • 긴 문자열을 지정된 구분자를 기준으로 토큰이라는 여러개의 문자열로 잘라내는데 사용
  • split(",")과 비슷
  • StringTokenizer st = new StringTokenizer(str, ",");
    : str이라는 문자열을 ,로 분리해서 내부저장소에 저장
  • System.out.println(st.hasMoreTokens());
    : 토큰을 가졌는지 체크->true/false
    : while문으로 작업(true일때 꺼내야하니까)
  • System.out.println(st.nextToken());
    : 다음 토큰을 반환
package api.util;

import java.util.StringTokenizer;

public class StringTokenizerTest {
	public static void main(String[] args) {
		String str = "java,mysql,oracle,html,css,javascript,jQuery";
		StringTokenizer st = new StringTokenizer(str,",");
        //내부저장소에 <,로 분리된 문자열(token)> 저장
        
		while(st.hasMoreTokens()) {//내부저장소에 토큰이 있으면
			String token = st.nextToken();//내부저장소의 토큰을 꺼내라
			System.out.println("토큰:"+token);
		}
	}

}

CalendarTest

  • GregorianCalendar는 Calendar의 하위
package api.util;

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

public class CalendarTest {
	public static void main(String[] args) {
		Calendar cal = new GregorianCalendar();
		Calendar cal2 = new GregorianCalendar();
		System.out.println(cal);
		Date d = new Date(); //util말고 sql에도 있음. 데베랑 연동할땐 그거사용
		System.out.println(d);
		
		System.out.println("====================Calendar객체의 사용법=======================");
		System.out.print(cal.get(Calendar.YEAR)+"년 ");
		System.out.print((cal.get(Calendar.MONTH)+1)+"월 ");
		System.out.print(cal.get(Calendar.DATE)+"일 ");
		System.out.print(cal.get(Calendar.HOUR)+"시 ");
		System.out.print(cal.get(Calendar.MINUTE)+"분 ");
		System.out.println(cal.get(Calendar.SECOND)+"초 ");
		
		cal2.set(2013,8,1);
		System.out.println(cal2);
	}
}

출력:
java.util.GregorianCalendar[time=1711633472720,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Seoul",offset=32400000,dstSavings=0,useDaylight=false,transitions=30,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2024,MONTH=2,WEEK_OF_YEAR=13,WEEK_OF_MONTH=5,DAY_OF_MONTH=28,DAY_OF_YEAR=88,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=4,AM_PM=1,HOUR=10,HOUR_OF_DAY=22,MINUTE=44,SECOND=32,MILLISECOND=720,ZONE_OFFSET=32400000,DST_OFFSET=0]

Thu Mar 28 22:44:32 KST 2024

====================Calendar객체의 사용법=======================

2024년 3월 28일 10시 44분 32초

java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Seoul",offset=32400000,dstSavings=0,useDaylight=false,transitions=30,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2013,MONTH=8,WEEK_OF_YEAR=13,WEEK_OF_MONTH=5,DAY_OF_MONTH=1,DAY_OF_YEAR=88,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=4,AM_PM=1,HOUR=10,HOUR_OF_DAY=22,MINUTE=44,SECOND=32,MILLISECOND=720,ZONE_OFFSET=32400000,DST_OFFSET=0]

exam. 오늘부터 6/18까지 dday계산하기

  • 밀리세컨드가 1/1000초니까 /1000/60/24해야 하루가 됨.
package api.util;

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

public class CalendarTest {
	public static void main(String[] args) {
		
		Calendar today = new GregorianCalendar();
		Calendar dday = new GregorianCalendar();
		//1970년 1/1 자정 (0:0:0)UTC
		dday.set(2024,5,18);
		long time = dday.getTimeInMillis() - today.getTimeInMillis();
		System.out.println(time/1000/60/60/24);
        
	}
}

출력 :
82

CalendarTest2

p534-535 연습하기

package api.util;

import java.util.Calendar;
import java.util.GregorianCalendar;

public class CalendarTest2 {
	public static void main(String[] args) {
		Calendar cal = new GregorianCalendar();
		System.out.println(Calendar.DAY_OF_YEAR);
        //상수라서 변수가 대문자
		//Calendar.DAY_OF_YEAR 상수에 설정된 값(세팅 값이 6, 내부에서 사용되는값)
		System.out.println(Calendar.DAY_OF_WEEK);
        //7 출력
		System.out.println(Calendar.DAY_OF_MONTH);
        //5 출력
	
		//2024년 1월 1일부터 경과한 day
		System.out.println(cal.get(Calendar.DAY_OF_YEAR));
        //오늘날짜를 기준으로 DAY_OF_YEAR를 적용한 값, 캘린더 객체에 생성된 걸 가져오는것
        //88 출력
		
		System.out.println(Calendar.AM);//0출력
		System.out.println(Calendar.PM);//1출력
		//현재시간을 기준으로 오전?오후? - 0이나 1을 반환
        
		System.out.println(cal.get(Calendar.AM_PM));
        // 오전이냐 오후냐에 따라 0또는 1출력
		
        if(cal.get(Calendar.AM_PM)==Calendar.AM) {
			System.out.println("오전");
		}else {
			System.out.println("오후");
		}
		
		System.out.println(Calendar.SATURDAY);
        //일요일1,월요일2,..~토요일7
		System.out.println(Calendar.SUNDAY);
        //1
	}
}

DAY_OF_YEAR를 이용해서 dday구하기 - 단, 년도가 다른경우 년도에 대한 계산을 추가

Calendar today = new GregorianCalendar();
Calendar dday = new GregorianCalendar();
		
dday.set(Calendar.YEAR, 2024);
dday.set(Calendar.MONTH, Calendar.JUNE);
dday.set(Calendar.DAY_OF_MONTH, 18);
		
//dday 계산
int day = dday.get(Calendar.DAY_OF_YEAR) - today.get(Calendar.DAY_OF_YEAR);
		
System.out.println(day);

출력:
82

PrintfTest

출력형식을 기호로 이용해서 설정

  • %d -> 정수출력
  • %s -> 문자열 출력
  • %f -> 실수
  • %n -> 줄바꿈
  • System.out.printf("%s, %s %n",매개변수1, 매개변수2...)
    : System.out.printf("출력형식", 출력형식에 연결할 값)
package api.util;

public class PrintfTest {
	public static void main(String[] args) {

		String str ="java programming";
		String str2 ="재밌다.";
		
		System.out.printf("%s, %s %n",str,str2);
		System.out.printf("[%20s]%n",str,str2);
        //[%20s] : 너비 20자로 공강을 두고 출력, 대괄호 안두고 작업해도됨
		System.out.printf("%d %n",1000);
		System.out.printf("값=> (%d, %d) %n",1000,2000);
		System.out.printf("값=> (%f) %n",1000.1234);
		System.out.printf("값=> (%5.2f) %n",1000.1234);
        //5.2는 전체 자리를 5로하고 소수점은 2자리까지
        //5가 넘어가며 너비지정값보다 커지므로 그냥 무시하고 사이즈만큼 출력
		System.out.printf("값=> (%10.2f) %n",1000.1234);	
		System.out.printf("값=> (%5.2f) %n",567898.1234);
		System.out.printf("값=> (%5.2f) %n",5.1234);
        //5자리에서 남으니 앞에 스페이스로 1자리확보, 자리엔 .도포함
	}

}

FormatTest

  • java.time임 544p
  • 출력되는 숫자와 날짜에 포맷을 적용할수있다.
    => 지정한 패턴에 맞게 출력
public class FormatTest {
	public static void main(String[] args) {
		Calendar cal = new GregorianCalendar();
		// 날짜출력
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy년 MM월 dd일");
        //이런포맷으로 작업을 하겠다는 말
		//날짜객체에 SimpleDateFormat에 정의한 패턴을 적용
		//SimpleDateFormat의 format매소드를 적용해서 패턴에 맞게 출력되도록 처리
		String data = sdf.format(cal.getTime());
		System.out.println("format을 적용한 날짜데이터=>"+data);
	}
}

출력:

format을 적용한 날짜데이터=>2024년 03월 28일

public class FormatTest {
	public static void main(String[] args) {
		//숫자출력
		DecimalFormat df = new DecimalFormat("#,###");
		System.out.println(df.format(123456789));
		
		DecimalFormat df2 = new DecimalFormat("#,###.##");
		System.out.println(df2.format(123456789.12345));
        //소숫점은 반올림
	}
}

출력:

123,456,789
123,456,789.12

public class FormatTest {
	public static void main(String[] args) {
		//숫자모양을 하고있는 문자열에 포맷적용하기
		String decimaldata = "123456.785";
		System.out.println(Double.parseDouble(decimaldata));
		try {
			double num = (double)df2.parse(decimaldata);
			System.out.println(df2.format(num));
			System.out.println("parseDouble이용=>"+df2.format(Double.parseDouble(decimaldata)));
		}catch (ParseException e) {
			e.printStackTrace();
		}
	}
}

출력:

123456.785
123,456.79
parseDouble이용=>123,456.79

LocalDateTimeTest

  • LocalDate, LocalDateTime, LocalTime =>8버전에서 추가
package api.util;

import java.time.LocalDateTime;

//LocalDate, LocalDateTime, LocalTime =>8버전에서 추가
public class LocalDateTimeTest {
	public static void main(String[] args) {
		LocalDateTime now = LocalDateTime.now();
		System.out.println(now);
		LocalDateTime date1 = LocalDateTime.of(2024, 3, 28, 13, 20, 10);
		System.out.println(date1);
		
		LocalDateTime date2 = date1.plusYears(1).plusMonths(2).plusHours(2);
		System.out.println(date2);
	}
}

출력:
2024-03-28T23:45:38.080700200
2024-03-28T13:20:10
2025-05-28T15:20:10

LocaleTest

  • java에서 국제화를 지원하는 핵심클래스 - 스프링에서 다국어지원을 처리할때 지역정보를 설정할때 사용
  • 각 지역의 국가 언어 정보를 갖고있는 클래스
  • 빌더패턴 : 객체하나를 완성하기 위해 객체에 여러 값을 설정
  • Locale객체를 생성하기 위해서 Locale내부 정보를 셋팅해서 하나씩 정보를 추가해가면서 객체를 완성
package api.util;

import java.util.Calendar;
import java.util.Locale;

public class LocaleTest {
	public static void main(String[] args) {
// 		java플랫폼에서 사용할 수 있는 로케일 정보 구하기
//		나라별 언어정보 싹 뜸.
//		Locale[] locales = Locale.getAvailableLocales();
//		for(Locale data:locales) {
//			System.out.println(data);
//		}
		

//		Locale.Builder builder = new Locale.Builder();
//		builder = builder.setLanguage("en");
//		builder = builder.setRegion("US");
//		Locale local2 = builder.build();
		
//		위를 아래로 표현하는거!!
		Locale locale1 = new Locale.Builder()
						.setLanguage("en")
						.setRegion("US")
						.build();
		Locale locale2 = new Locale.Builder()
				.setLanguage("ko")
				.setRegion("KR")
				.build();
		//언어와 국가 설정 내용을 기본 설정된 로케일에 맞춰 출력하기
		System.out.println(locale1.getDisplayName());
		System.out.println(locale1.getDisplayName(Locale.CHINESE));
        //중국어로 쓰기
		System.out.println(locale1.getCountry());
		------------------------------------------		
		
        System.out.println();
		Calendar cal1 = Calendar.getInstance(locale1);
		getInfo(cal1);
		//Locale을 US로 설정 - TimeZone확인
		//Calendar에 Locale을 설정해도 Calendar객체를 만들때 설정된 타임존 정보를 갖고 있으므로 별도로 설정해주는 작업을 해야한다. 그래서 한국시간으로 뜨는듯
		System.out.println(cal1.getTimeZone());
		
	}
	public static void getInfo(Calendar cal) {
		System.out.print(cal.get(Calendar.YEAR)+"년 ");
		System.out.print((cal.get(Calendar.MONTH)+1)+"월 ");
		System.out.print(cal.get(Calendar.DATE)+"일 ");
		System.out.print(cal.get(Calendar.HOUR_OF_DAY)+"시 ");
		System.out.print(cal.get(Calendar.MINUTE)+"분 ");
		System.out.println(cal.get(Calendar.SECOND)+"초 ");
	}
}

출력 :
영어 (미국)
英语 (美国)
US

2024년 3월 29일 0시 2분 17초
sun.util.calendar.ZoneInfo[id="Asia/Seoul",offset=32400000,dstSavings=0,useDaylight=false,transitions=30,lastRule=null]

TimeZoneTest

public class TimeZoneTest {
	public static void main(String[] args) {
		Calendar cal1 = new GregorianCalendar();
		//TimeZone정보출력
		String[] idInfo = TimeZone.getAvailableIDs();
        
//		관련자료 주르르륵뜸
//		for(String data:idInfo) {
//			System.out.println(data);
//		}



			TimeZone timezone = TimeZone.getTimeZone("America/Los_Angeles");
			Calendar cal2 = Calendar.getInstance(timezone);
			getInfo(cal2);
			
			TimeZone timezone2 = TimeZone.getTimeZone("Australia/Sydney");
			Calendar cal3 = Calendar.getInstance(timezone2);
			getInfo(cal3);
			
}
	public static void getInfo(Calendar cal) {
		System.out.print(cal.get(Calendar.YEAR)+"년 ");
		System.out.print((cal.get(Calendar.MONTH)+1)+"월 ");
		System.out.print(cal.get(Calendar.DATE)+"일 ");
		System.out.print(cal.get(Calendar.HOUR_OF_DAY)+"시 ");
		System.out.print(cal.get(Calendar.MINUTE)+"분 ");
		System.out.println(cal.get(Calendar.SECOND)+"초 ");
	}
}

출력:
2024년 3월 28일 8시 5분 52초
2024년 3월 29일 2시 5분 52초

VectorTest, List - Vector의 사용방법

  • Vector E는 Vector에 저장되는 요소의 타입, 여기에 뭐 저장하냐에 따라 요소의 타입은 계속 달라짐
  • 매개변수타입이 E면 어떤 타입이 와도 상관없다는뜻
  • 기본형은 제네릭타입으로 쓸수없음..찾아보기
    =>Generic을 적용해서 Vector(그리고 이외의 모든자료구조)에 저장되는 요소의 타입을 정의하고 작업해야함
  • 벡터 : 기본세팅용량은 10이고 자리가 부족할때마다 2배로 증가하는게 법칙
package api.util;

import java.util.Vector;

public class VectorTest {
	public static void main(String[] args) {
		//1.Vector생성
		Vector<Integer> v1 = new Vector<Integer>();
  		//int[] arr = new int[10] 와 같음
		
		//2.벡터에 데이터 저장하기
		v1.add(10);//arr[0]=10
		
		//3.Vector에 저장된 요소의 갯수
		System.out.println("현재 벡터에 저장된 요소의 갯수=>"+v1.size());//arr.length
		System.out.println("현재 벡터의 용량=>"+v1.capacity());
		
		for(int i =1;i<=10;i++) {
			v1.add(i);
		}
		//용량10인데 자리 부족하네? 용량 2배증가
		System.out.println("현재 벡터에 저장된 요소의 갯수=>"+v1.size());//arr.length
		System.out.println("현재 벡터의 용량=>"+v1.capacity());
		
		//4.Vector에 저장된 요소를 꺼내기 - 요소번호는 0번
		System.out.println("1번 요소에 저장된 값=>"+v1.get(1));//sysout(arr[1])
		
		//5.Vector에 저장된 모든 요소를 꺼내기
		for(int i=0;i<v1.size();i++) {
			int data = v1.get(i);
			System.out.println(i+"번째 요소=>"+data);
		}
		//향상된 for문
 		 System.out.println("=================");
		for(int data:v1) {
			System.out.println(data);
		}
	}
}

VectorExam

  • 78,99,100,95,100점을 Vector에 저장하고 저장된 점수들의 총점과 평균을 구해서 출력하기
public class VectorExam {
	public static void main(String[] args) {
		Vector<Integer> exam = new Vector<Integer>();
		exam.add(78);
		exam.add(99);
		exam.add(100);
		exam.add(95);
		exam.add(100);
		
		int sum=0;
		int size = exam.size();
		for(int i=0;i<size;i++) {
			sum = sum+exam.get(i);
		}
		//향상된for문
		for(int j:exam) {
			sum=sum+j;
		}
		System.out.println("총점 : "+sum);
		System.out.println("평균 : "+sum/size);
	}
}

출력:
총점 : 472
평균 : 94

ArrayListTest01

  • List - ArrayList의 사용방법-신크로나이즈드 안되어있어서 벡터보다 가벼움
public class ArrayListTest01 {
	public static void main(String[] args) {
		
		ArrayList<Integer> v1 = new ArrayList<Integer>();//int[] arr = new int[10]
		
		v1.add(10);//arr[0]=10
		System.out.println("현재 ArrayList에 저장된 요소의 갯수=>"+v1.size());//arr.length
		
		for(int i =1;i<=10;i++) {
			v1.add(i);
		}
		System.out.println("현재 ArrayList에 저장된 요소의 갯수=>"+v1.size());//arr.length
		
		System.out.println("1번 요소에 저장된 값=>"+v1.get(1));//sysout(arr[1])
		for(int i=0;i<v1.size();i++) {
			int data = v1.get(i);
			System.out.println(i+"번째 요소=>"+data);
		}
		System.out.println("=================");
		for(int data:v1) {
			System.out.println(data);
		}
	}
}

ArrayListTest02

  • List - ArrayList의 기타메소드 사용방법
  • List는 중복이 허용됨
  • 많이 사용하니 자유자재로 연습필요

ArrayList의 요소를 출력하는 메소드

public static void display(List<String> list2) {
	System.out.println("====================");
	for(String data:list2) {
		System.out.println(data);
	}
}
public class ArrayListTest02 {
	public static void main(String[] args) {
		ArrayList<String> list = new ArrayList<>();
		
  		list.add("java");
		list.add("oracle");
		list.add("servlet");
		list.add("jsp");
		list.add("spring");
		display(list);

//set은 수정(업데이트), 4번요소의 값을 수정~!
	list.set(4, "spring & spring boot");
	display(list);
  	System.out.println("사이즈=>"+list.size());

//add는 마지막에 요소추가
	list.add("spring & spring boot");
   	display(list);
	System.out.println("사이즈=>"+list.size());

//지우기
//여러개가 있으면 첫번째 요소를 찾아서 제거
	list.remove(1);
	display(list);
		
	list.remove("spring & spring boot");
  //저장된 객체를 지정해서 삭제, 중복중 첫번째것이 지워짐
	display(list);

//이게 포함되냐
	System.out.println(list.contains("java"));

 //이게 비어있냐
	System.out.println(list.isEmpty());

출력:
true
false

List<String> list2 = new ArrayList<>();
 //list가 상위타입이라 이렇게 가능
	list2.add("Mybatis");
	list2.add("JPA");
	list2.add("MongoDB");

	display(list2);
	list2.addAll(list);
	display(list2);
		
	}
}

ArrayListExam01

  • 1부터 50까지 랜덤수를 6개 발생시켜서 ArrayList에 저장하고 출력형식대로 출력하세요
    ex) 랜덤수 5,7,9,13,40
  • [출력형식]
    5(홀수),7(홀수),9(홀수),13(홀수),40(짝수)
public class ArrayListExam01 {
	public static void main(String[] args) {
		ArrayList<Integer> list = new ArrayList<>();
		Random rand = new Random();
		
		//랜덤수를 저장하는 for
		for(int i=0;i<6;i++) {
			list.add(rand.nextInt(50)+1);
		}
		
		//ArrayList에 저장된 데이터를 꺼내는 for
		for(int data:list) {
			if(data%2==0) {
				System.out.print(data+"(짝수),");
			}else {
				System.out.print(data+"(홀수),");
			}
		}
     }
}

출력 :
39(홀수),17(홀수),8(짝수),16(짝수),40(짝수),43(홀수),

ArrayListExam02

  • 배열을 ArrayList로 변환해서 리턴하는 메소드를 정의
    메소드명 : changeArrayList
    매개변수 : String[]
    리턴타입 : ArrayList
public class ArrayListExam02 {
	public static void main(String[] args) {
		String[] strArr = {"java","servlet","jsp","spring"};
		//2.  changeArrayList메소드를 호출
		ArrayList<String> clist = changeArrayList(strArr);
		//3. 메소드 호출결과 출력
		for(String data:clist) {
			System.out.println(data);
		}
	}
	
	//배열을 어레이리스트로 변환해서 리턴하는 메소드를 정의
	//1. changeArrayList메소드를 정의
	public static ArrayList<String> changeArrayList(String[] strArr) {
		
		ArrayList<String> clist = new ArrayList<>();
		int size = strArr.length;
		for(int i=0;i<size;i++) {
			clist.add(strArr[i]);
		}
                                                          
		//또는
		for(String data:strArr) {
			clist.add(data);
		}
		return clist;
	}
}

출력:
java
servlet
jsp
spring

본 포스팅은 멀티캠퍼스의 멀티잇 백엔드 개발(Java)의 교육을 수강하고 작성되었습니다.

0개의 댓글