반응형
[Java] 17. 클래스 예제
클래스 개념설명: https://mathphysics.tistory.com/1439?category=872370
*getter/setter: private으로 설정된 멤버변수를 엑세스/업데이트 하는 메소드, 이클립스에서 Alt+Shift+S키를 누르고 'Generate Getters and Setters'를 클릭해 getter과 setter를 설정할 수 있다.
1. 달력 출력 프로그램
클래스 코드부분
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
|
package myutil;
import java.util.Calendar;
public class MyCalendar {
//private : 자신 외에는 접근 불가
private int year;
private int month;
//달력 내용을 저장할 배열
int [][] cal_array;
//매월의 마지막날을 저장할 배열
// 0, 1, 2, 3 <=index
int [] month_array= {31,28,31,30,31,30,31,31,30,31,30,31};
// 1 2 3 4월
String [] up= {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
public void setDate(int y, int m) {
year=y;
month=m;
//달력 만드는 메소드
make_calendar();
}
//윤년체크
boolean isleapyear() {
// 윤년조건 1 또는 윤년조건 2
return (year%400==0) || (year%4==0 && year%100!=0);
}
private void make_calendar() {
// TODO Auto-generated method stub
//달력을 저장할 배열 생성
cal_array=new int[6][7];
//1. 해당년/월의 요일 구하기
Calendar c=Calendar.getInstance();
//구하고자 하는 날짜로 변경
c.set(year, month-1,1);
//윤년이면 2월을 29일로 아니면 28일로 수정
if(isleapyear())
month_array[1]=29;
int week=0; //주차
//요일 구하기 1(일) 2(월) : 요일-1(첨자로 사용)
int weekday=c.get(Calendar.DAY_OF_WEEK)-1;
//이전달 채우기(3)
if(weekday>0) {
//1. 이전달의 마지막 날
int prev_month=0;
// prev_month=0일 때의 처리가 필요
if(month>1) {
prev_month=month-1;
}else prev_month=12;
int prev_last_day=month_array[prev_month-1];
//2. 이번달의 이전첨자
int prev_weekday=weekday-1;
for(int i=prev_last_day;i>0;i--) {
cal_array[0][prev_weekday]=i;
prev_weekday--;//후진(backward)
if(prev_weekday<0) break;
}
}
//현재달 채우기
//해당 월의 마지막 날
int last_day=month_array[month-1];
for(int i=1;i<=last_day;i++) {
cal_array[week][weekday]=i;
weekday++;//다음 요일로 이동
if(weekday==7) {
week++; //다음행으로 이동(주 차 증가)
weekday=0; //일요일로 이동(맨 앞으로)
}
}
//다음달 날짜 셋팅(2) cal_array=new int[6][7];
for(int i=1;i<20;i++) {//가운데의 i<20은 의미가 없으므로 true로 채워도 되고, 비어도 됨
cal_array[week][weekday]=i;
weekday++;//다음 요일로 이동
if(weekday==7) {
weekday=0; //일요일로 이동(맨 앞으로)
week++; //다음행으로 이동(주 차 증가)
if(week==6) break;//배열의 끝에 도달했으면 종료
}
}
}
public void display() {
//요일출력(1)
System.out.print("----------------------------\n");
for(int j=0;j<7;j++) {
System.out.printf(" %s", up[j]);
}
System.out.println(); //줄바꾸기
System.out.print("----------------------------\n");
for(int i=0;i<6;i++) { //행
for(int k=0;k<7;k++) {//열
System.out.printf("%4d", cal_array[i][k]);
}
System.out.println(); //줄바꾸기
}
System.out.print("----------------------------\n");
}
//getter / setter method
/*
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public int getMonth() {
return month;
}
public void setMonth(int month) {
this.month = month;
}
*/
}
|
cs |
메인 실행부분:
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
|
package mymain;
import java.util.Scanner;
import myutil.MyCalendar;
public class MyMain_MyCalendar {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan=new Scanner(System.in);
int year;
int month;
String yn="y";
MyCalendar mc=new MyCalendar();
while(true) {
System.out.print("년도와 월을 입력하시오(한칸 띄고):");
year=scan.nextInt();
month=scan.nextInt();
//MyCalendar에게 달력 만들어 달라고 요청
mc.setDate(year, month);
//달력출력
mc.display();
//계속
System.out.print("계속(y/n)");
yn=scan.next();
if(!yn.equalsIgnoreCase("Y")) break;
}
System.out.println("---End---");
}
}
|
cs |
실행결과:
년도와 월을 입력하시오(한칸 띄고):2021 11 ---------------------------- Sun Mon Tue Wed Thu Fri Sat ---------------------------- 31 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 1 2 3 4 5 6 7 8 9 10 11 ---------------------------- 계속(y/n) |
년-월-일-요일 출력 프로그램
*이 프로그램에서 1요일: 일요일, 2요일: 월요일, 3요일: 화요일,... 7요일: 토요일
클래스 코드부분
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
|
package myutil;
import java.util.Calendar;
public class MyDate {
//Member field(변수) : 상태정보 나타냄
//객체의 속성: property
//:아주 중요한 속성으로 간주
private int year;
protected int month;
public int day;
int week_day;
//전체수정기능
public void setDate(int y, int m, int d, int wd) {
year=y;
month=m;
day=d;
week_day=wd;
}
public void setDate(int y, int m, int d) {
year=y;
month=m;
day=d;
//현재시스템날짜 =>객체가 생성되었다
Calendar c=Calendar.getInstance();
//month:Jan(0) Feb(1) Mar(2) Apr(3) May(4) Jun(5)
c.set(y,m-1,d);
week_day=c.get(Calendar.DAY_OF_WEEK);
}
//setter method
// 형식) set필드명 (명명법 준수)
// setyear(X)
// set_year(X)
public void setYear(int y) {
year=y;
}
public void setMonth(int m) {
month=m;
}
public void setDay(int d) {
day=d;
}
public void setWeek_day(int wd) {
week_day=wd;
}
//getter method
//형식) get필드명()
public int getYear() {//첫 글자는 대문자로
return year;
}
public int getMonth() {
return month;
}
public int getDay() {
return day;
}
public int getWeek_day() {
return week_day;
}
//Member Method : 행위
public void display() {
System.out.printf("%04d-%02d-%02d %d요일\n",
year,month,day,week_day
);
}
}
|
cs |
메인 실행부분
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
|
package mymain;
//해당 클래스의 위치 알려준다
import myutil.MyDate;
public class MyMain_MyDate {
public static void main(String[] args) {
// TODO Auto-generated method stub
//참조변수=new 클래스명() <- 객체
MyDate in=new MyDate(); //myutil.을 쓸 수도 있으나 자주 써야 해서 불편함
//private이므로 외부에서 접근불가
//in.year=2021;
in.setYear(2021);
//protected이므로 외부에서 접근불가(같은 방(패키지)에서는 가능)
in.setMonth(3);
//in.day=29; //public이므로 가능
in.setDay(29);
//외부에서 접근불가(default는 같은 멤버끼리 허용, 다른 방이므로 접근불가)
//week_day는 MyDate에 있고, 여기는 MyMain_MyDate이므로 다른 방
//in.week_day=2;
in.setWeek_day(2);
in.display();
//객체의 속성값을 얻어온다
//int year=in.year;
int year=in.getYear();
System.out.printf("in's year:%d\n", year);
//전체수정
in.setDate(1992, 12, 31, 1);
in.display();
in.setDate(2000, 5, 5);
in.display();
}
}
|
cs |
실행결과
2021-03-29 2요일 in's year:2021 1992-12-31 1요일 2000-05-05 6요일 |
년-월-일-요일 출력 프로그램(2)
클래스 코드부분
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
|
package myutil;
// Code Generator: Alt+Shift+s
public class MyDate2 {
private int year;
private int month;
private int day;
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public int getMonth() {
return month;
}
public void setMonth(int month) {
this.month = month;
}
public int getDay() {
return day;
}
public void setDay(int day) {
this.day = day;
}
}
|
cs |
메인 실행부분
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
|
package mymain;
import myutil.MyDate2;
public class MyMain_MyDate2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
MyDate2 md2=new MyDate2();
//setter이용
md2.setYear(2021);
md2.setMonth(3);
md2.setDay(29);
//getter이용해서 값을 꺼내기
int year=md2.getYear();
int month=md2.getMonth();
int day=md2.getDay();
System.out.printf("%d년%02d월%02d일\n", year, month, day);
}
}
|
cs |
실행결과:
2021년03월29일 |
반응형
'Coding(Java) > Java(이론)' 카테고리의 다른 글
[Java] 16. 배열(2) (0) | 2021.09.24 |
---|---|
[Java] 15. 배열(1) (0) | 2021.09.24 |
[Java] 14. 메소드 예제 (0) | 2021.09.09 |
[Java] 13. 클래스의 정의와 메소드 (0) | 2021.09.02 |
[Java] 12. 다중반복문, break&continue label (0) | 2021.08.31 |