- 클래스_복습
> 전날에 배운 내용을 한번 더 사용해보며 복습하는 시간을 가졌습니다
>먼저 클래스의 구성 요소 3가지 필드 생성자 메소드 입니다
==========필드============================
public class People {
private String name; <private를 사용한 모습입니다 이런경우 같은 클래스에서만 수정이 가능합니다
private int age; <이는 다른 클래스에서 필드를 함부로 수정이 불가능하게 하기 위함입니다
=========생성자===========================
public People() { < 생성자 메소드입니다
}
public People(String name,int age) { < 이렇게 생성자 메소드를 사용하는경우
this.name = name; < 기본 생성자가 자동으로 만들어지지 않기 때문에
this.age = age; < 위에서 생성자를 수동으로 작성해준 모습입니다
}
===========메소드==============================
> 필드에 있는 변수들에게 private 로 접근 제한을 걸어 두었기 때문에
> 같은 클래스에서만 정보 변경이 가능합니다
> 그렇기에 정보를 클래스로 가져와 대입하고 다른 클래스로 불러오기 위한 메소드를 작성한 모습입니다
> 정보를 가져와 필드에 대입할 메소드는 메소드 이름 앞에 set을 사용하였고
> 필드의 정보를 다른 클래스에서 사용할때는 메소드 이름 앞에 get을 붙여 가독성을 높였습니다
public String getNane() { < 입력된 정보를 받아오는 메소드로 받아올 변수의 타입이 String이기에 리턴 타입은 String입니다
return this.name; < this.name으로 필드에 있는 name 변수를 리턴한다는 뜻입니다
}
public void setName(String name) { < 입력 정보를 필드에 있는 변수에 저장하는 메소드입니다
this.name = name; < 정보를 가져만오기 때문에 리턴 타입은 void(없음)이고 매개변수를 String name으로 하였습니다
} < 필드에 있는 name변수에 매개변수로 받은 name을 대입하게 합니다
public int getAge() {
return this.age;
}
public void setAge(int age) {
this.age = age;
}
public int ageUp() { < ageUp메소드를 사용하면 필드의 age에 1을 증가시키고 리턴으로 1증가한 age를 돌려줌
this.age++; <age의 타입은 int이기 때문에 리턴 타입도 int로 설정함
return this.age;
}
}
========================================================================
> 이제 작성된 클래스를 메인 클래스에서 사용해보도록 하겠습니다
public class People_main {
public static void main(String[] arge) {
People p1 = new People(); < 해당 클래스에서 People이라는 클래스를 사용가능하게 함
// p1.name = "홍길동"; < 클래스의 변수가 private이기 떄문에 이렇게 직접 넣을 수 없음
p1.setName("홍길동"); < 그렇기에 해당 클래스에 있는 메소드를 이용하여 대입하게 한 모습
// System.out.println(p1.name); 마찬가지로 private이기에 직접 넣어지지 않아 출력도 불가능하다
System.out.println(p1.getNane()); < 그렇기에 People 클래스에서 설정한 get메소드를 이용해 출력한 모습
System.out.println(p1.getAge());
if(true) {
System.out.println(p1.ageUp()); < ageUp이 잘 작동 되는지 확인하는 모습
}
People p2 = new People("이순신", 90);
System.out.printf(p2.getNane()+"\n"+p2.getAge()+"\n");
if(true) {
System.out.println(p2.ageUp());
}
}
}
- 만들어보기_응용_Util_User
> 2가지 class를 동시에 사용해보기 위해 먼저 class를 2가지 만들어보도록 하겠습니다
import java.util.Scanner;
> sc.hasNextInt() > 입력받은 수가 숫자면 참 문자면 거짓
> sc.nextLine() > 띄어쓰기까지 문장을 입력받을 수 있음
public class Util {
========필드==============================================
int number;
=======생성자==============================================
> 이번 클래스에서는 생성자 메소드를 사용하지 않기 때문에
> 기본생성자가 자동으로 만들어집니다
> 그렇기에 생성자를 따로 만들어주지않아도 상관 없습니다
=======메소드=============================================
> 먼저 만들어보기에서 사용할 숫자 체크 메소드입니다
public int numberCheak() {
int result;
Scanner sc = new Scanner(System.in);
while (true) {
if (sc.hasNextInt()) {
result = sc.nextInt();
break;
} else {
System.out.println(str + "숫자만 입력 >");
sc.nextLine();
}
}
return result;
}
> 풀이입니다
public int numberCheck() { > 리턴은 숫자만 받기 때문에 리턴 타입은 int로 하였습니다
int result; > 정보 저장에 이용될 int변수를 result로 선언한 모습입니다
Scanner sc = new Scanner(System.in); . 사용자가 메소드에 입력이 가능하게 만들기 위한 scanner입니다
while (true) { > 반복문을 이용하여 조건에 충족되지 않으면 메소드가 계속 작동하게 만들었습니다
if (sc.hasNextInt()) { > 여기서 sc.hasNextInt()는 입력받은 값이 문자라면 거짓 숫자라면 참을 뜻합니다
result = sc.nextInt(); > if문의 조건으로 사용하였기에 문자라면 else로 빠지고 숫자라면 if문 안으로 들어오게 됩니다
break; > 숫자를 입력받은 경우 result에 입력 값이 대입되고 반복문을 빠져나가고 값을 return하여 메소드를 마칩니다
} else {
System.out.println("숫자만 입력 >"); > 위의 hasNextInt에서 문자를 받은 경우 else로 넘어옵니다
sc.nextLine(); > 숫자만 입력할 수 있다는 문구를 출력하고
} > 이전에 사용자가 입력한 문자는 사라지지 않기 때문에 sc.nextLine으로 받아줄 스캐너를 생성한 모습입니다
}
return result; > 이렇게 숫자를 입력받으면 result에 담겨 돌려 받게 됩니다
}
> 아이디의 갯수를 제한하는 메소드
public String lengthCheak(String id1) {
String length;
Scanner sc = new Scanner(System.in);
while (true) {
length = sc.next();
if (length.length() <= 6) {
break;
} else if (length.length() > 6) {
System.out.print("6글자까지 가능합니다 >");
sc.nextLine();
}
}
return length;
}
>풀이 입니다
> 아이디는 문자,숫자 둘다 사용하기에 리턴 타입을 String으로 하였습니다
> 매개 변수에는 입력받은 아이디가 들어가게 하였습니다
public String lengthCheak(String id1) {
String length; > 리턴 값을 저장할 변수 length를 만들어줍니다
Scanner sc = new Scanner(System.in); > 사용자가 메소드에서 입력 가능하도록 scanner를 사용하였습니다
while (true) { > 조건에 만족할때까지 반복하기 위해 반복문 while을 이용하였습니다
length = sc.next(); >사용자가 입력한 아이디를 length에 대입하게 하였습니다
if (length.length() <= 6) { > if문을 이용하여 대입받은 length의 길이가 6보다 작거나 같다면 반복문을 빠져나가도록 하였습니다
break;
} else if (length.length() > 6) { > else if로 입력받은 아이디의 길이가 6보다 크다면
System.out.print("6글자까지 가능합니다 >"); > 6글자까지 입력 가능하다는 문구를 출력합니다
sc.nextLine(); > 입력받은 문구는 sc.nextLine으로 빠지며 다시 반복문을 반복합니다
}
}
return length; > 조건에 충족하게된 length는 리턴으로 돌려주며 메소드를 마칩니다
}
====================================================================================
> 만들기에 사용 할 2번째 class입니다
> 2번째 class는 위에서 설명을 마쳤기 때문에 이해가 힘들다면 글을 처음부터 다시 읽어주세요
========필드============================================
private String name;
private String id;
private String pw;
=======생성자============================================
public User() {
}
public User(String name ,String id,String pw) {
this.name = name;
this.id = id;
this.pw = pw;
}
=======메소드============================================
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPw() {
return pw;
}
public void setPw(String pw) {
this.pw = pw;
}
public void print() {
System.out.printf("%s\t%s\t%s\n",name,id,pw);
}
}
- 만들어보기_응용_매우_어려움
> 위에서 만든 2가지 class를 응용하여 회원가입 프로그램 만들어보기!
Scanner sc = new Scanner(System.in); > 사용자가 콘솔에 입력 가능하게하는 scanner
User[] list = new User[100]; > User class의 배열을 만들고 이름을 list로 선언 후 100칸으로 만든 모습
int cnt = 0; > 배열의 방번호 역활을 해줄 변수 cnt
while (true) { > 사용자가 메뉴와 입력 공간을 확인 할 수 있게 메뉴를 while로 무한 반복
Util util = new Util(); < Util class를 utill로 현재 class에서 사용가능하게 함
System.out.println("====회원가입====
System.out.println("1.회원가입 2.로그인 3.리스트 4.검색 0.종로");
System.out.print("메뉴 선택 >");
int menu = util.numberCheak(); < 입력받은 메뉴를 utill로 체크하고 int menu에 대입하게함
if (menu == 1) { < menu가 1인경우 사용자에게 새로운 메뉴창을 보여줌
System.out.print("이름 > ");
String name = sc.next();
System.out.print("아이디 >");
String id1 = util.lengthCheak(""); < 입력받은 아이디를 util.lengthCheak("")를 이용하여 길이를 체크하고 di1에 대입함
System.out.print("비밀번호 >");
String pw = sc.next();
User user = new User(name, id1, pw); < 입력받은 정보를 user class의 생성자 메소드에 대입하고 실행
list[cnt] = user; < 입력받은 정보를 list에 대입하고
System.out.println("회원가입 완료!");
cnt++; < 마지막에 방번호를 한칸 증가시키며 빠져나감
} else if (menu == 2) { < menu가 2인경우 실행
>로그인 id,pw를 입력받고 각각 변수에 저장함
System.out.print("로그인 id >");
String id = sc.next();
System.out.print("로그인 pw >");
String pw = sc.next();
for (int i = 0; i < cnt; i++) {
if (id.equals(list[i].getId()) && pw.equals(list[i].getPw())) {
System.out.println(list[i].getName() + "님 로그인 성공!");
break;
> for문을 이용하여 i가 cnt보다 작을때 1씩 증가하게함
> 1씩 증가하는 i를 이용해 리스트의 칸번호를 열어보며
> 입력받은 id,pw가 일치한다면 "로그인 성공 "을 출력하며 반복문을 빠져나감
} else if (i == cnt - 1) {
System.out.println("로그인 실패!");
> i 가 cnt -1 즉 정보가 들어있는 list의 끝칸의 번호와 같아져도 위의 조건에 맞지 않는 다면
> "로그인 실패"를 출력하게함
}
}
} else if (menu == 3) { > 배열을 이해했다면 충분히 이해 가능한 menu 3
System.out.println("이름\t아이디\t비밀번호");
System.out.println("======================");
for (int i = 0; i < cnt; i++) {
list[i].print();
}
} else if (menu == 4) { > menu 2번을 이해했다면 충분히 이해 가능한 menu4
System.out.print("검색 아이디 >");
String id = sc.next();
System.out.println("이름\t아이디\t비밀번호");
System.out.println("======================");
for(int i = 0 ; i < cnt ; i ++) {
if(id.equals(list[i].getId())) {
list[i].print();
}
}
} else if (menu == 0) {
break;
} else {
System.out.println("없는 메뉴입니다");
}
}
System.out.println("시스템을 종료합니다");
}
}
- Array_List를 알아보자
public class ArrayList_연습 {
public static void main(String[] args) {
Member[] mList = new Member[10]; < Member class를 배열 mList로 선언 후 10칸으로 만듬
Member m = new Member(); > Member class를 m으로 선언 후 해당 class에서 사용할 수 있게만듬
> 배열의 칸을 다 출력하여 정보가 몇번까지 들어있는 알 수 있는 방법
> 빈 배열의 칸은 null로 출력됨
mList[0] = m;
mList[1] = m;
mList[2] = m;
for(int i = 0 ; i < mList.length; i++) { // length는 칸의 길이
System.out.println(mList[i]);
}
> ArrayList를 이용한 경우 배열을 한 공간에 넣고 뺴내와 사용하는 방식인데
> 이것의 이해를 돕는 예시문
List<Member> list = new ArrayList<>(); > Meber class를 ArrayList로 만든 모습
list.add(m); < ArrayList에 정보를 담는 방법
list.add(m); <
list.add(m); <
for(int i = 0 ; i < list.size();i++) { // szie는 들어간 것의 갯수
System.out.println(list.get(i));
}
> for문을 이용하여 ArrayList에 정보가 몇가지 들어있는지 알아볼 수 있는 방법
for(Member mm : list) { //향상된 for문
System.out.println(mm);
}
> 향상된 for문을 이용하여 ArrayList에 정보가 몇가지 들어있는지 알아볼 수 있는 방법
> list를 mm에 대입하며 출력을 반복하는 방식
}
}
- 응용_ 만들기 _ 멤버 _관리_ 프로그램
> 멤버 관리 프로그램을 만들기 위해 사용한 class
=======필드====================================
public class Member {
private int id;
private String email;
private String pw;
private String name;
private String joinDate;
=======생성자=====================================
public Member() {
}
public Member(int id , String email , String pw , String name , String joinDate) {
this.id = id;
this.email = email;
this.pw = pw;
this.name = name;
this.joinDate = joinDate;
}
========메소드======================================
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPw() {
return pw;
}
public void setPw(String pw) {
this.pw = pw;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getJoinDate() {
return joinDate;
}
public void setJoinDate(String joinDate) {
this.joinDate = joinDate;
}
public void print() {
System.out.printf("%d\t%s\t%s\t%s\t%s\n",id,email,pw,name,joinDate);
}
}
================================================================================
Scanner sc = new Scanner(System.in); > 사용자가 콘솔에 입력 가능하게하는 scanner
Util util = new Util(); > Util class를 util로 해당 class에서 사용 가능하게함
List<Member> list = new ArrayList<>(); class Member를 ArrayList로 설정함
int id = 0;
while (true) {
System.out.println("1.멤버등록 2.멤버리스트 3.검색 4.멤버수정 5.멤버삭제 0.종료");
System.out.println("메뉴 선택 >");
int menu = util.numberCheck(); > util에 만들어둔 메소드를 이용해 숫자만 입력 받을 수 있게함
if (menu == 1) { < menu가 1일 경우 실행
Member member = new Member(); > Member class를 member로 해당 class에서 사용 가능하게함
member.setId(++id); > ++id = 전치 증강 id++ = 후치증강 후치는 줄이 ;로 끝나면 증강
System.out.println("이메일 입력 >");
member.setEmail(sc.next()); > 입력받은 이메일을 member의 필드에 저장함
list.add(member); > ArrayList에 여기까지의 meber의 정보를 객체로 저장함
System.out.println("비밀번호 입력 >");
member.setPw(sc.next()); > 입력받은 비밀번호를 member의 필드에 저장함
System.out.println("이름 입력 >");
member.setName(sc.next()); > 입력받은 이름을 member의 필드에 저장함
System.out.println("멤버등록 성공!");
} else if (menu == 2) { menu가 2일때 실행
System.out.println("아이디\t이메일\t\t비밀번호\t이름\t가입일");
System.out.println("-------------------------------------");
for (Member mm : list) { > 향상된 for문을 이용해 list를 mm에 대입하며 프린트
mm.print();
}
} else if (menu == 3) { < menu가 3일때 실행
boolean find = false; > 조건문에 사용하기위한 find 에 false를 대입
System.out.println("검색 아이디 >");
int searchId = sc.nextInt(); < 검색 아이디를 입력받고 searchId에 저장함
System.out.println("아이디\t이메일\t\t비밀번호\t이름\t가입일");
System.out.println("-------------------------------------");
for (Member mm : list) { 향상된 for문을 이용하여 list 안에 저장된 정보를 mm에 대입하며
if (mm.getId() == searchId) { 조건문 if에 입력받은 id와 맞는 정보가 있는지 대조함
mm.print();
find = true;
break;
} > 맞는 정보가 있다면 해당 list의 정보를 출력하고 find를 true로 바꾸며 반복문을 빠져나감
}
if(!find) { 위의 for문에서 맞는 정보가 없어 내려오면 find는 계속 false이기 때문에 해당 조건문을 실행
System.out.println("없는 아이디 입니다"); > "없는 아이디"를 출력하며 해당 메뉴를 빠져나감
}
} else if (menu == 4) { > menu가 4번일 경우 실행
boolean find = false; > 조건문에 사용하기 위핸 find에 false를 대입함
System.out.println("수정할 아이디 >");
int updateId=sc.nextInt(); > 수정할 아이디를 입력받아 updateId에 저장함
for(Member mm : list) { > 향상된 for문을 이용하여 list의 정보를 mm에 하나씩 대입함
if(updateId == mm.getId()) { > if문을 이용하여 입력받은 아이디와 맞는 정보가 list에 있다면 조건문 실행
System.out.println("수정할 이메일입력 >");
mm.setEmail(sc.next());
System.out.println("수정할 비밀번호입력 >");
mm.setPw(sc.next());
System.out.println("수정할 이름입력 >");
mm.setName(sc.next());
> 수정한 정보를 해당 어레이 list에 새로 대입함
System.out.println("수정 완료!");
find = true; > find를 ture로 바꾸며 for문을 빠져나옴
break;
}
}
if(!find) { > 위의 조건에 맞지 않아 find가 계속 false인 경우 실행
System.out.println("조회할 수 없는 id입니다"); > "없는id"를 출력함
}
} else if (menu == 5) {
boolean find = false;
System.out.println("삭제할 id >");
int deleteId = sc.nextInt();
for(Member mm : list) {
if(deleteId == mm.getId()) {
System.out.println(mm.getName()+"님 삭제 완료!");
list.remove(mm);
find = true;
break;
}
}
if(!find) {
System.out.println("조회 할 수 없는 id 입니다");
}
} else if (menu == 0) {
break;
} else {
System.out.println("없는 메뉴");
}
}
System.out.println("프로그램 종료");
}
}
- 숙제_아이디 길이 제한 + 중복된 아이디 걸러주기_내가 생각한 정답
public void setId(List<User2> list, int max) {
Scanner sc = new Scanner(System.in);
while (true) {
boolean find = false;
String id = sc.next();
if (id.length() > max) {
System.out.print("아이디는" + max + "글자 이상 사용 불가!\n다시입력 >");
find = true;
}
for (User2 u : list) {
if (u.getId().equals(id)) {
System.out.println("중복된 아이디입니다\n다시입력 >");
find = true;
}
}
if (!find) {
this.id = id;
break;
}
}
}
==============================================================================================
package day8;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class User2_Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
Util2 util2 = new Util2();
List<User2> list = new ArrayList<>();
boolean login = false;
int loginIndex = -1;
User2 loginUser = new User2();
while (true) {
if (login == false) {
System.out.println("1.회원가입 2.로그인 3.리스트 0.종료");
} else if (login == true) {
System.out.println("1.비밀번호 수정 2.로그아웃 3.리스트 4.회원탈퇴 0.종료");
}
System.out.println("메뉴 선택>");
int menu = util2.menuCheck();
if (menu == 1) {
if (login == true) {
System.out.println("비밀번호 확인");
int pw2 = sc.nextInt();
} else {
User2 user2 = new User2();
System.out.println("이름 입력 >");
user2.setName(sc.next());
System.out.println("아이디 입력 >");
user2.setId(list,4);
System.out.println("비밀번호 입력 >");
user2.setPw(sc.next());
list.add(user2);
System.out.println("반갑습니다" + user2.getName() + "님 회원가입 완료");
}
} else if (menu == 2) {
if (login == true) {
login = false;
} else {
System.out.println("로그인할 아이디 >");
String loginId = sc.next();
System.out.println("로그인할 비밀번호 >");
String loginPw = sc.next();
boolean find = false;
for (User2 mm : list) {
if (loginId.equals(mm.getId()) && loginPw.equals(mm.getPw())) {
System.out.println(mm.getName() + "님 로그인 성공!");
login = true;
find = true;
break;
}
}
if (!find) {
System.out.println("로그인 실패!");
}
}
} else if (menu == 3) {
if (login == true) {
} else {
System.out.println("이름\t아이디\t비밀번호\t가입일");
System.out.println("------------------------------");
for (User2 mm : list) {
mm.print();
}
}
} else if (login == true) {
} else if (menu == 0) {
break;
}
}
System.out.println("없는 메뉴 입니다");
}
}
'나의 수업일지' 카테고리의 다른 글
인천 일보 아카데미 10일차 확장_상속자_오버라이딩 / 추상화 (0) | 2023.03.07 |
---|---|
인천 일보 아카데미 9일차 static을_알아보자 (0) | 2023.03.06 |
인천 일보 아카데미 7일차 클래스_필드_메소드_오버로딩 (0) | 2023.03.02 |
인천 일보 아카데미 5일차 []배열 알아보기 (0) | 2023.02.27 |
인천 일보 아카데미 (주말 숙제) (0) | 2023.02.27 |