개발자/JAVA
[JAVA 14일차]구직자 나이구하기/성별구하기/객체지향프로그래밍/상속성,추상화,캡슐화,다형성/주민번호 유효성/
GoGo개발
2022. 8. 25. 23:25
나이 구하기 메소드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
// == 구직자의 나이를 알려주는 메소드 생성하기 ==
int getAge() {
// 현재나이 = 현재년도 - 태어난년도 + 1
Calendar currentDate = Calendar.getInstance(); // 현재날짜와 시간을 얻어온다.
int currentYear = currentDate.get(Calendar.YEAR); // 현재년도 2022
int centry = ( Integer.parseInt(jubun.substring(6)) == 1 || Integer.parseInt(jubun.substring(6)) == 2 )?1900:2000;
int birthYear = Integer.parseInt(jubun.substring(0, 2)) + centry; // 태어난년도
return currentYear - birthYear + 1;
}
|
cs |
성별 구하기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
String getGender() {
String gender = "";
switch (jubun.substring(6)) {
case "1":
case "3":
gender = "남";
break;
default:
gender = "여";
break;
}
return gender;
}
|
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
49
50
51
52
53
54
|
=== *** 객체지향 프로그래밍(Object Oriented Programming)이란?*** ==== (객체지향이란 객체중심) = OOP
객체지향(중심)프로그래밍(OOP) 이란?
field(= attribute, property, 속성) 와 method(= operation, function, 기능, 행위) 로 구성된 클래스를 통해 객체(= instance, 인스턴스)를 만들고, 데이터처리와 같은 상호작용을 만들어진 객체를 가지고 프로그래밍화 하는것을 OOP 라고 부른다. // 필드 메소드 클래스 세단어가 중요
예를 들어,
쇼핑몰 프로그램에 있어서 어떤 회원이 어떤 제품을 주문하는것을 프로그래밍 하려고 한다.
주문이라는 데이터 처리를 위해서는 어떤 회원이 어떤 제품을 언제 몇 개를 주문했다라는 정보를 담아야 한다.
이것을 위해서 "주문" 이라는 클래스를 만드는데 이 "주문" 클래스의 field 로 "회원" 클래스와 "제품" 클래스가 들어가게 된다. Member mbr; Product prd;
또한 "주문" 클래스의 method 로 주문결과를 화면에 보여주는 기능이 들어가야 할 것이다.
이와같이 "회원" 클래스, "제품" 클래스, "주문" 클래스를 통해 객체를 만들고 객체들간의 상호작용을 논리적으로 프로그래밍 하는것을 OOP라고 부른다.
*/
※ OOP 의 4가지 특징(!!!!필수암기!!!!)
--> 1. 상속성(Inheritance) : 클래스의 재사용과 소스 코드의 중복제거를 목적으로 하는 기술
--> 2. 추상화(Abstraction) : 프로그램이 필요로 하는 실제 데이터들을 모델링하는 기술 // 필요한것만 가져온다
--> 3. 캡슐화(EnCapsulation == 은닉화) : 객체지향의 가장 중요한 데이터 보호 기술
--> 4. 다형성(Polymorphism) : 상속을 이용하여 여러 클래스 타입을 하나의 클래스 타입으로 다루는 기술
구인구직 어플리케이션 프로그래밍 제작시
필요한 요소(부품)가 무엇이 있는지 생각해보자.
아주 다양하고, 많은 요소들이 필요할 것이다.
예를 들어,
구직자, 구인회사, 채용.... 등등등 많이 있다.
이러한 요소(부품)들이 바로 객체인데 이 객체를 만드는 설계도면이 클래스이다.
위와(구인구직 어플리케이션 프로그래밍 제작) 같이 현실세계에 존재하는
다양한 객체들을 각각 하나하나 추상화 시켜서 클래스로 옮기는 것을
객체지향 프로그래밍(OOP)이라고 한다.
여기서 추상화(abstraction)란?
--> 일반적인 의미의 추상화란 어떤 물체(object)에서 주된
특징을 부각시켜 표현하고, 나머지 부분은 과감하게 생략하는것을 말한다.
추상화의 반대는 아주 시시콜콜한것(세세한 것)까지 전부 몽땅
다 묘사하는 것을 말하는데 이것을 정밀화 라고 말한다.
객체지향 프로그래밍(OOP)에서 사용되는 추상화도 이와 비슷하다.
어떤 하나의 물체를 대표하는 속성(명사, 멤버변수)과 기능(동사, 메소드)을 추출해내는 것을
객체지향 프로그래밍(OOP)에서 "추상화" 라고 한다.
>>> 예를 들어, 구인구직 어플리케이션 프로그래밍 제작시
필요한 부품(요소)중 하나인 "구직자" 에 대해서 알아보자.
"구직자" 가 가지고 있는 속성(명사, 멤버변수)과 행동양식(기능, 동사, 메소드)을 뽑아보자.
1). 속성(property, attribute, field)은 멤버변수가 되고,
2). 행동양식(기능)은 메소드가 되는 것이다.
Gujikja(클래스)
|
|-- 속성(property, attribute, field) : 아이디, 암호, 성명, 연락처, 이메일, 주소, 학력, 희망구직직종, 희망연봉.....
|-- 행동양식(기능, 메소드) : 구직자로 접속(로그인)할수 있는 기능, 구직자정보를 조회해주는 기능, 구직자정보를 변경해주는 기능, .......
|
cs |
>>> my.day14.b.abstraction 클래스별로 가서 공부하기!!!
<주민번호 유효성 테스트>
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
|
//주민번호로 사용가능한 것인지 사용불가능한 것인지 검사해주는 메소드 생성하기 // Ctrl_Gujikja day14.abstraction
public static boolean checkjubun(String jubun) {
// 주민번호로 사용할 수 없는 경우
// jubun ==> null, "", "96" , "96102012", "961020s" , "9a05102", "9610208"
// "9656891"
//주민번호로 사용할 수 있는 경우
//jubun ==> "9605102"
if(jubun == null)
return false;
char[] ch_arr = jubun.toCharArray();
if(ch_arr.length !=7)
return false;
for(int i=0; i<7; i++) {
if( ! Character.isDigit(ch_arr[i]) ) // 숫자가 아니라면
return false;
}// end of for--------------
if( !('1' <= ch_arr[6] && ch_arr[6] <= '4') ) // char 타입이라 '' 써준다. 남녀 1,2,3,4 로 시작하니까
return false;
// 월 ==> "01" ~ "12"
int month = Integer.parseInt(jubun.substring(2, 4)); //2,3번째 글자
// 1 ~ 12
if( !(1 <= month && month <= 12) )
return false;
// 일 ==> "01" ~ "31"
int day = Integer.parseInt(jubun.substring(4, 6)); //4,5
// 1 ~ 31
if( !(1 <= day && day <= 31) )
return false;
// 2월은 30일 31일이 없다.
if( month==2 && 30 <= day && day <=31)
return false;
return true;
|
cs |
<Main 클래스>
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
|
Gujikja[] gu_arr = new Gujikja[5];
Ctrl_Gujikja ctrl = new Ctrl_Gujikja(); //불러오려면 객체필요
Scanner sc = new Scanner(System.in);
///////////////////////////////////////////// 다 쓰기 귀찮아서 미리 그냥 써놓은거
Gujikja gu1 = new Gujikja(); //객체가 Gujikja를 호출해온다
gu1.userid ="eomjh";
gu1.passwd ="qWer1234$";
gu1.name = "엄정화";
gu1.jubun = "9610202";
gu_arr[Gujikja.count++] = gu1; //gu_arr에 넣어주기
Gujikja gu2 = new Gujikja();
gu2.userid ="leess";
gu2.passwd ="abCd12345$";
gu2.name = "이순신";
gu2.jubun = "9202001";
gu_arr[Gujikja.count++] = gu2;
Gujikja gu3 = new Gujikja();
gu3.userid ="chaew";
gu3.passwd ="aSdf1234$";
gu3.name = "차은우";
gu3.jubun = "0106203";
gu_arr[Gujikja.count++] = gu3;
/////////////////////////////////////////////////////
String str_menuno;
do {
ctrl.main_menu();
str_menuno = sc.nextLine();
switch (str_menuno) {
case "1": // 구직자 회원가입
ctrl.register(sc, gu_arr);
break;
case "2": // 구직자 모두보기
ctrl.showAll_info(gu_arr);
break;
case "3": // 검색
ctrl.search_menu(sc, gu_arr); //4번 입력안하면 스위치문 못빠져나가니까
break;
case "4":
break;
default:
System.out.println("[경고] 메뉴에 없는 번호 입니다.\n");
break;
}// end of switch -------
} while (!("4".equals(str_menuno)));
//end of do~ while-----------------
sc.close();
System.out.println("\n>>> 프로그램 종료 <<<\n");
|
cs |
<ctril 클래스>
- 행동양식(기능, 메소드) : 구직자로 접속(로그인)할수 있는 기능, 구직자정보를 조회해주는 기능, 구직자정보를 변경해주는 기능 등등
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
|
== 메인 메뉴를 보여주는 메소드 생성하기 == //
void main_menu() {
System.out.println(" \n=== 메인메뉴 ===\n"
+ "1.구직자 회원가입 2.구직자 모두보기 3.검색 4.프로그램종료\n");
System.out.print("▷ 메뉴번호 선택 : ");
}
== 검색메뉴를 보여주는 메소드 생성하기 ==
void search_menu(Scanner sc, Gujikja[] gu_arr) {
}// end of void search_menu(Scanner sc
=== 구직자(Gujikja) 신규 회원가입시 Gujikja 클래스의 field 의 요구사항에 모두 맞으면
Gujikja[] gu_arr 에 저장시켜주는 메소드 생성하기 ===
void register(Scanner sc, Gujikja[] gu_arr) {
}//end of void register(Scanner sc, Gujikja[] gu_arr)------------------------
== 구직자 모두보기 메소드
void showAll_info(Gujikja[] gu_arr) {
/*
----------------------------------------------------
아이디 비밀번호 성명 성별 현재나이
----------------------------------------------------
eomjh qWer***** 엄정화 여 27
leesj abCd****** 이숟신 남 31
chaew aSdf***** 차은우 남 22
*/
if( Gujikja.count == 0) {
System.out.println(">> 구직자로 가입된 회원이 아무도 없습니다. << \n");
}
else {
title();
StringBuilder sb = new StringBuilder(); // 쌓아두기
for(int i=0; i<Gujikja.count; i++) {
sb.append(gu_arr[i].getInfo()+"\n"); //쌓아두기
}// end of for------------------------
System.out.println(sb.toString()); // 찍어줄땐 tostring 빼도된다.
}
}//end of void showAll_info(Gujikja[] gu_arr)
=== 연령대 검색해주는 메소드 생성하기 === //해보기
void search_ageLine(Scanner sc, Gujikja[] gu_arr) {
}// end of void search_ageLine()--------------------------------------------
===성별 검색해주는 메소드====
void search_gender(Scanner sc, Gujikja[] gu_arr) {
}// end of void search_gender(Scanner sc, Gujikja[] gu_arr)
== 연령대 및 성별 검색해주는 메소드 ==
void search_ageLine_gender(Scanner sc, Gujikja[] gu_arr) {
}// end of void search_ageLine_gender(Scanner sc, Gujikja[] gu_arr)
void title () {
System.out.println("=============================================================\n"
+" 아이디 비밀번호 성명 성별 현재나이 가입일자 \n"
+"============================================================\n");
}// end of void title()----------------------------------
} // end of class
|
cs |
<Gujikja 클래스>
- 속성(property, attribute, field) : 아이디, 암호, 성명, 연락처, 이메일, 주소, 학력, 희망구직직종, 희망연봉 등등
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
|
// field 생성
//Member mbr; //회원 클래스
//Product prd; //제품 클래스
String userid; // 아이디
String passwd; // 비밀번호
String name; // 성명
String jubun; // 주민번호인데 앞자리6자리에 성별을 나타내는 1자리까지만 입력한다.
// 예: "9506201" "9607202" "0006203" "0106204" "1106204"
String register_day; // 가입일자
static int count; // Gujikja 객체(인스턴스)의 개수를 알아로려는 용도
//기본 생성자
public Gujikja() {
Date now = new Date(); // 현재시각
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
// System.out.println("오늘날짜 : " + df.format(now));
register_day = df.format(now);
}
// method 생성
// == 구직자의 나이를 알려주는 메소드 생성하기 ==
int getAge() {
// 현재나이 = 현재년도 - 태어난년도 + 1
Calendar currentDate = Calendar.getInstance(); // 현재날짜와 시간을 얻어온다.
int currentYear = currentDate.get(Calendar.YEAR); // 현재년도 2022
int centry = ( Integer.parseInt(jubun.substring(6)) == 1 || Integer.parseInt(jubun.substring(6)) == 2 )?1900:2000;
int birthYear = Integer.parseInt(jubun.substring(0, 2)) + centry; // 태어난년도
return currentYear - birthYear + 1;
}
// == 구직자의 성별을 알려주는 메소드 생성하기 ==
String getGender() {
String gender = "";
switch (jubun.substring(6)) {
case "1":
case "3":
gender = "남";
break;
default:
gender = "여";
break;
}
return gender;
}
// == 구직자의 정보를 한줄로 출력해주는 메소드 생성하기 ==
String getInfo() {
//eomjj qWer***** 엄정화 여 27
StringBuilder sb = new StringBuilder();
sb.append(userid+"\t"); //append는 다쌓아준다
String str_star ="";
for(int i=0; i< passwd.length() - 4; i++) {
str_star += "*";
}
sb.append(passwd.substring(0, 4) + str_star +"\t");
sb.append(name+"\t");
sb.append(getGender()+"\t");
sb.append(getAge()+"\t");
sb.append(register_day); //가입일자 넣어주기
return sb.toString();
}
/*
void showInfo() {
System.out.println("1.성명 : " + name +"\n"
+ "2.현재나이 : " + getAge() +"\n"
+ "3.성별 : " + getGender() +"\n"
+ "4.가입일자 : " + register_day +"\n");
}
*/
}
|
cs |