Arrays 클래스
- binarySearch() : 배열 내 입력문자 위치 찾아줌
1
2
3
4
5
6
7
8
9
10
11
12
13
|
import java.util.Arrays;
public class ArraysEx2 {
public static void main(String[] args) {
int[] scores = {96,80,90,60,70};
int index=Arrays.binarySearch(scores, 60);
System.out.println(index);
}
}
|
cs |
//
-1 => sort 메소드 실행 안 할 때 오류
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
import java.util.Arrays;
public class ArraysEx2 {
public static void main(String[] args) {
int[] scores = {96,80,90,60,70};
Arrays.sort(scores);
int index=Arrays.binarySearch(scores, 60);
System.out.println(index);
}
}
|
cs |
//
0
Wrapper 클래스 (포장 클래스)
: 기본 타입 값을 가지는 객체 생성 (참조타입)
ex. Byte, Character, Short, Integer, Long, Float, Double, Boolean 클래스
기본타입 값은 외부에서 변경 불가 => 새로운 포장 객체 생성해야
문자열을 기본타입 값으로 변환할 때에도 사용됨
내부 값 비교 => equals() 메소드 사용 (-128~127 int, byte, short => == 연산자로도 비교 가능)
※String 등 참조타입 => 크기 없음 (주소만 참조)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
public class WrapperEx1 {
public static void main(String[] args) {
Integer obj1 = new Integer(10); //버전 업그레이드되면서 이렇게 쓰이진 않음
Integer obj2=20; //자동 Boxing : 기본타입이 객체 안으로 들어감
System.out.println(obj2.intValue());
int value = obj1; //자동 unboxing : 객체가 기본타입으로 재변환
String str1 = "20";
String str2 = "2.54";
int value2 = Integer.parseInt(str1); //String -> int
System.out.println(value2);
double value3 = Double.parseDouble(str2); //String -> double
System.out.println(value3);
}
}
|
cs |
//
20
20
2.54
Math 클래스
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
public class MathEx1 {
public static void main(String[] args) {
int value1=Math.abs(-5); //절대값
System.out.println(Math.sqrt(16)); //루트값
double dvalue1=Math.round(-5.5); //반올림값
System.out.println("반올림 "+dvalue1);
double dvalue2=Math.ceil(-5.5); //올림값
System.out.println("올림 "+dvalue2);
double dvalue3=Math.floor(-5.5); //내림값
System.out.println("내림 "+dvalue3);
double dvalue4=Math.rint(-5.5); //가까운 정수의 실수값
System.out.println("가까운 정수의 실수값 "+dvalue4);
}
}
//
5
4.0
반올림 -5.0 //음수 .5 => 더 큰 값으로 올림
올림 -5.0
내림 -6.0
가까운 정수의 실수값 -6.0 //가까운 값으로
public class MathEx1 {
public static void main(String[] args) {
int max = Math.max(30, 15);
System.out.println(max);
}
}
//
30
|
cs |
Random 클래스
boolean, int, long, float, double 난수 얻을 수 있음
종자값(seed) 설정 가능 => 같은 종자값이면 같은 난수 고정적으로 가짐
cf. Math.random() => 0.0~1 사이의 double 난수만 얻기 가능, 종자값 無
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
import java.util.Random;
public class MathEx2 {
public static void main(String[] args) {
Random rand = new Random();
for (int i=1;i<=6;i++) {
System.out.println(rand.nextInt(45)+1); //난수 리턴
}
}
}
//
32
16
31
25
21
26
import java.util.Random;
public class MathEx2 {
public static void main(String[] args) {
Random rand = new Random(8); //괄호 안 숫자=종자값 => 같은 난수 계속 얻음
for (int i=1;i<=6;i++) {
System.out.println(rand.nextInt(45)+1);
}
}
}
//
20
17
11
17
43
24
=> 고정된 난수값
|
cs |
- 로또 번호-내 번호 비교 후 결과 리턴 문제 (Random 클래스, 종자값 사용)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
import java.util.Arrays;
import java.util.Random;
public class MathEx2 {
public static void main(String[] args) {
int[] lotto=new int[6]; //배열 6슬롯 생성
int[] myNum=new int[6];
Random rand;
rand=new Random(10); //종자값
System.out.print("추첨 번호 : ");
for (int i=0;i<lotto.length;i++) {
lotto[i]=rand.nextInt(45)+1; //1~45 랜덤 리턴
System.out.print(lotto[i]+" ");
}
rand=new Random(5); //종자값 일치시키면 동일 난수값 출력됨
System.out.print("\n내 번호 : ");
for (int i=0;i<myNum.length;i++) {
myNum[i]=rand.nextInt(45)+1;
System.out.print(myNum[i]+" ");
}
Arrays.sort(lotto);
Arrays.sort(myNum);
boolean result = Arrays.equals(lotto, myNum);
System.out.println("\n\n***추첨 결과***\n");
if (result) {
System.out.println("1등에 당첨되셨습니다");
}else {
System.out.println("꽝");
}
}
}
|
cs |
Date 클래스
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateEx1 {
public static void main(String[] args) {
Date now = new Date(); //인스턴스 객체 생성
System.out.println(now);
SimpleDateFormat sdf; //Format 클래스
sdf=new SimpleDateFormat("yyyy-MM-dd");
System.out.println(sdf.format(now));
sdf=new SimpleDateFormat("yyyy년 MM월 dd일 (E요일)");
System.out.println(sdf.format(now));
sdf=new SimpleDateFormat("yyyy년 MM월 dd일 hh시 mm분 ss초(S)");
System.out.println(sdf.format(now));
sdf=new SimpleDateFormat("yyyy년 MM월 dd일 a HH시 mm분 ss초");
System.out.println(sdf.format(now));
sdf=new SimpleDateFormat("yyyy년 D일째 W주차");
System.out.println(sdf.format(now));
sdf=new SimpleDateFormat("yyyy년 w주차");
System.out.println(sdf.format(now));
}
}
|
cs |
//
Fri May 13 17:38:08 KST 2022
2022-05-13
2022년 05월 13일 (금요일)
2022년 05월 13일 05시 38분 08초(232) // S : 1/1000초
2022년 05월 13일 오후 17시 38분 08초
2022년 133일째 2주차 //W : 해당 월의 현재 주차 //w : 올해년도 중 현재 주차
2022년 20주차
Calendar 클래스
추상 클래스 => 직접 객체 생성 불가 => getInstance() 메소드 사용 (싱글톤과 유사)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
import java.util.Calendar;
public class CalendarEx1 {
public static void main(String[] args) {
Calendar now = Calendar.getInstance();
//Calendar: 싱글톤& getinstance: static 메소드 (클래스로 바로 접근)
int year = now.get(Calendar.YEAR);
int month = now.get(Calendar.MONTH)+1; //월은 0부터 시작
int day = now.get(Calendar.DAY_OF_MONTH);
int week=now.get(Calendar.DAY_OF_WEEK); //일요일: 1
int hour = now.get(Calendar.HOUR);
int minute = now.get(Calendar.MINUTE);
int second= now.get(Calendar.SECOND);
switch(week) {
case Calendar.SUNDAY:
System.out.println("오늘은 일요일");
break;
case Calendar.MONDAY:
System.out.println("오늘은 월요일");
break;
case Calendar.TUESDAY:
System.out.println("오늘은 화요일");
break;
case Calendar.WEDNESDAY:
System.out.println("오늘은 수요일");
break;
case Calendar.THURSDAY:
System.out.println("오늘은 목요일");
break;
case Calendar.FRIDAY:
System.out.println("오늘은 금요일");
break;
case Calendar.SATURDAY:
System.out.println("오늘은 토요일");
break;
}
System.out.println(year+"년 "+month+"월 "+day+"일");
int amPm = now.get(Calendar.AM_PM); //0:am 1:pm
String strAmPm;
if (amPm==0) { //(amPm==Calendar.AM) 도 가능 //AM은 상수
strAmPm="오전 ";
}else {
strAmPm="오후 ";
}
System.out.println(strAmPm+hour+"시 "+minute+"분 "+second+"초");
Calendar calNow = Calendar.getInstance();
year=now.get(Calendar.YEAR);
month = now.get(Calendar.MONTH)+1;
day = now.get(Calendar.DAY_OF_MONTH);
hour = now.get(Calendar.HOUR);
minute = now.get(Calendar.MINUTE);
System.out.println(calNow);
System.out.println(year+"년 "+month+"월 "+day+"일 "+hour+"시 "+minute+"분 ");
}
}
|
cs |
//
오늘은 금요일
2022년 5월 13일
오후 6시 8분 43초
java.util.GregorianCalendar[time=1652440061077,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=2022,MONTH=4,WEEK_OF_YEAR=20,WEEK_OF_MONTH=2,DAY_OF_MONTH=13,DAY_OF_YEAR=133,DAY_OF_WEEK=6,DAY_OF_WEEK_IN_MONTH=2,AM_PM=1,HOUR=8,HOUR_OF_DAY=20,MINUTE=7,SECOND=41,MILLISECOND=77,ZONE_OFFSET=32400000,DST_OFFSET=0]
2022년 5월 13일 8시 7분
- Timezone
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
import java.util.TimeZone;
public class TimeZoneEx1 {
public static void main(String[] args) {
String[] timeZoneID = TimeZone.getAvailableIDs(); //timezone id 다 가져옴
for (String id: timeZoneID) {
System.out.println(id);
}
}
}
//
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
~
import java.util.Calendar;
import java.util.TimeZone;
public class CalendarEx1 {
public static void main(String[] args) {
Calendar now = Calendar.getInstance(); //싱글톤
int year = now.get(Calendar.YEAR);
int month = now.get(Calendar.MONTH)+1; //월은 0부터 시작
int day = now.get(Calendar.DAY_OF_MONTH);
int week=now.get(Calendar.DAY_OF_WEEK); //일요일: 1
int hour = now.get(Calendar.HOUR);
int minute = now.get(Calendar.MINUTE);
int second= now.get(Calendar.SECOND);
switch(week) {
case Calendar.SUNDAY:
System.out.println("오늘은 일요일");
break;
case Calendar.MONDAY:
System.out.println("오늘은 월요일");
break;
case Calendar.TUESDAY:
System.out.println("오늘은 화요일");
break;
case Calendar.WEDNESDAY:
System.out.println("오늘은 수요일");
break;
case Calendar.THURSDAY:
System.out.println("오늘은 목요일");
break;
case Calendar.FRIDAY:
System.out.println("오늘은 금요일");
break;
case Calendar.SATURDAY:
System.out.println("오늘은 토요일");
break;
}
System.out.println(year+"년 "+month+"월 "+day+"일");
int amPm = now.get(Calendar.AM_PM); //1 pm 2 am
String strAmPm;
if (amPm==Calendar.AM) {
strAmPm="오전 ";
}else {
strAmPm="오후 ";
}
System.out.println(strAmPm+hour+"시 "+minute+"분 "+second+"초");
TimeZone tz = TimeZone.getTimeZone("America/Los_Angeles");
Calendar calNow = Calendar.getInstance(tz);
year=calNow.get(Calendar.YEAR);
month = calNow.get(Calendar.MONTH)+1;
day = calNow.get(Calendar.DAY_OF_MONTH);
hour = calNow.get(Calendar.HOUR);
minute = calNow.get(Calendar.MINUTE);
amPm = calNow.get(Calendar.AM_PM);
if (amPm==Calendar.AM) {
strAmPm="오전 ";
}else {
strAmPm="오후 ";
}
System.out.println(year+"년 "+month+"월 "+day+"일 "+strAmPm+hour+"시 "+minute+"분 ");
}
}
//
2022년 5월 13일 오전 4시 11분
|
cs |
※상수 AM
class Calendar {
static final int AM=0;
}
Format 클래스
1. DecimalFormat (숫자형식 클래스)
- 1234567.89 변환
0 | 10진수 (빈자리 0으로 채움) | 0 0.0 0000000000.00000 |
1234568 1234567.9 0001234567.89000 |
# | 10진수 (빈자리 채우지 않음) | # #.# ##########.##### |
1234568 1234567.9 1234567.89 |
. | 소수점 | #.0 | 1234567.9 |
- | 음수 | +#.0 -#.0 |
+1234567.9 -1234567.9 |
, | 단위 구분 | #,###.0 | 1,234,567.0 |
E | 지수 | 0.0E0 | 1.2E6 |
; | 양수, 음수 구분 | +#,###;-#,### | +1,234,568 -1,234,568 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
import java.text.DecimalFormat;
public class NumberFormatEx1 {
public static void main(String[] args) {
double dnum = 5123.2634;
DecimalFormat df;
df = new DecimalFormat("0.00");
// 0 : 지정된 자리수만 적용됨 (입력값이 더 크면 앞자리에 0 채워짐, 강제성 있음)
System.out.println(df.format(dnum));
int num1=7560000;
df=new DecimalFormat("#,###원");
//# : 유동적 (네자리 넘으면 패턴 반복시키고, 네자리 보다 작으면 형식 미지정)
System.out.println(df.format(num1));
double dnum2=0.1;
df=new DecimalFormat("##.0%");
System.out.println(df.format(dnum2));
}
}
|
cs |
//
5123.26
7,560,000원
10.0%
2. SimpleDateFormat (날짜형식 클래스)
=> Date 클래스 예제 참고
3. MessageFormat (문자열형식 클래스)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
import java.text.MessageFormat;
public class MessageFormatEx1 {
public static void main(String[] args) {
String id = "hong";
String name = "홍길동";
String tel = "010-1234-5678";
String text = "회원ID : {0} \n회원이름 : {1} \n전화번호 : {2}";
String result = MessageFormat.format(text, id,name,tel,text); //출력할 문자열,0,1,2
System.out.println(result);
text="{0}회원님 오늘 부탁하신 제품은 {0}회원님이 원하신 제품이 아니라";
result=MessageFormat.format(text, name);
System.out.println(result);
}
}
|
cs |
//
회원ID : hong
회원이름 : 홍길동
전화번호 : 010-1234-5678
홍길동회원님 오늘 부탁하신 제품은 홍길동회원님이 원하신 제품이 아니라
Java.time 패키지
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
import java.text.Format;
import java.text.MessageFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
public class DateTimeEx1 {
public static void main(String[] args) {
//날짜
LocalDate currentDate = LocalDate.now(); //현재
System.out.println("오늘은 "+currentDate);
LocalDate EndDate = LocalDate.of(2022, 12, 5); //특정 년월일
System.out.println("수료일자: "+EndDate);
int year = currentDate.getYear();
int month = currentDate.getMonthValue();
int day = currentDate.getDayOfMonth();
if (currentDate.isLeapYear()) { //윤년 여부 판단
System.out.println("올해는 윤년: 2월 29일까지");
}else {
System.out.println("올해는 평년: 2월 30일까지");
}
System.out.println(year+"년 "+month+"월 "+day+"일");
//시간
LocalTime currentTime = LocalTime.now();
System.out.println("지금 시간은 "+currentTime);
LocalTime endTime = LocalTime.of(21, 40);
System.out.println("수업 종료 시간: "+endTime);
//날짜와 시간
LocalDateTime currentDT = LocalDateTime.now();
System.out.println("현재 날짜와 시간 : "+currentDT);
LocalDateTime endDT = LocalDateTime.of(2022,12,5,21,40); //특정 날짜와 시간
System.out.println("수료 날짜와 시간 : "+endDT);
ZonedDateTime zdate = ZonedDateTime.now(ZoneId.of("Canada/Eastern"));
System.out.println("캐나다 시간존 : "+zdate);
}
}
|
cs |
//
오늘은 2022-05-13
수료일자: 2022-12-05
올해는 평년: 2월 30일까지
2022년 5월 13일
지금 시간은 19:45:32.244469300
수업 종료 시간: 21:40
현재 날짜와 시간 : 2022-05-13T20:24:16.500247500
수료 날짜와 시간 : 2022-12-05T21:40
캐나다 시간존 : 2022-05-13T07:26:39.113367900-04:00[Canada/Eastern]
확인문제
- Object 클래스
=> 모든 자바클래스의 최상위 부모클래스
=> Object.equals()는 ==연산자와 동일하게 번지 비교 cf. String.equals : 값내용 가져옴
=> Object의 clone 메소드는 얕은 복사
=> toString메소드는 객체의 필드값을 문자 정보로 리턴
- 3번 문제 - Object의 equals(), hashCode() 오버라이딩해 studentNum 같으면 동등 객체 되도록
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
public class Student {
//필드
private String studentNum;
//생성자
public Student(String studentNum) {
this.studentNum=studentNum;
}
//메서드
public String getStudentNum() { //getter
return studentNum;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof Student) {
Student student = (Student)obj;
if (student.getStudentNum().equals(studentNum)){
return true;
}
}
return false;
}
@Override
public int hashCode() {
return studentNum.hashCode();
}
}
import java.util.HashMap;
public class StudentExample {
public static void main(String[] args) {
//Student 키로 총점을 저장하는 HashMap 객체 생성
HashMap<Student, String> hashMap = new HashMap<Student, String>();
//new Student("1")의 점수 95를 저장
hashMap.put(new Student("1"), "95");
//new Student("1")로 점수를 읽어옴
String score = hashMap.get(new Student("1"));
System.out.println("1번 학생의 총점: "+score);
}
}
|
cs |
- 4번 문제 - toString() 오버라이딩해 예제 결과 나오도록
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
public class Member3 {
private String id;
private String name;
public Member3 (String id, String name) {
this.id=id;
this.name=name;
}
@Override
public String toString() {
return id+" : "+name;
}
}
public class Member3Example {
public static void main(String[] args) {
Member3 member = new Member3("blue","이파란");
System.out.println(member);
}
}
|
cs |
- Class 객체
=> Class.forName() 또는 Class.getClass() 로 얻음
=> 클래스의 생성자, 필드, 메소드 정보 얻음
=> newInstance() => 기본 생성자 이용해 객체 생성 / 리턴 타입: Object 타입
+ Class 클래스
- Class 객체 얻기 - getClass(), forName()
1. getClass()
Object.getClass 이용해 Class 객체 생성 가능
ex. Class clazz = obj.getClass();
2. forName()
객체 생성 전 직접 Class 객체 얻음
정적 메소드
매개값 => 패키지 포함한 클래스 전체 이름
Class 객체 리턴
ex. try{Class clazz = Class.forName(String className)} catch(ClassNotFoundException e){}
- 리플렉션 - getDeclaredConstructors(), getDeclaredFields(), getDeclaredMethods()
: Class 객체 이용해 클래스의 생성자, 필드, 메소드 정보 알아냄
ex.
Constructor[] constructors = clazz.getDeclaredConstructors();
Field[] fields = clazz.getDeclaredFields();
Method[] methods = clazz.getDeclared.Methods();
- 동적 객체 생성 - newInstance()
Class 객체 이용하면 new 연산자 없이 동적으로 객체 생성 가능
코드작성X 런타임O 시 클래스 이름 결정되는 경우 유용
Class.forName() 으로 Class 객체 얻음 -> newInstance() 호출해 Object 객체 얻음
기본생성자 호출 후 객체 생성하기 때문에 반드시 클래스에 기본생성자 필요
두가지 예외 발생 가능 (InstantiationException : 추상클래스 또는 인터페이스, IllegalAccessException : 접근제한자로 접근 불가)
리턴 타입 Object ->클래스 타입으로 변환해야만 메소드 사용 가능 => 인터페이스 사용해 강제 타입 변환
ex.
try{
Class clazz = Class.forName("런타임시 결정되는 클래스 이름);
Object obj = clazz.newInstance();
}catch(~