티스토리 뷰
mv2.member.assembler - Assembler.java mv2.member.model - ChangePasswordService.java - Member.java - MemberAllService.java - MemberDAO.java - MemberRequest.java - MemberService.java mv2.member.run - Main.java |
Main.java
package mvc2.member.run;
import java.util.Collection;
import java.util.Scanner;
import mvc2.member.assembler.Assembler;
import mvc2.member.model.ChangePasswordService;
import mvc2.member.model.Member;
import mvc2.member.model.MemberAllService;
import mvc2.member.model.MemberRequest;
import mvc2.member.model.MemberService;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while(true) {
System.out.println("명령어를 입력하세요: ");
String command = in.nextLine();
if(command.equals("exit")) {
System.out.println("종료합니다");
break;
}
if(command.startsWith("new")) {
proccessNewCommand(command.split(" "));
continue;
}else if(command.startsWith("all")) {
proccessAllCommand();
}else if(command.startsWith("change")) {
ProccessChangeCommand(command.split(" "));
continue;
}
printHelp();
}
}
어떤 키워드를 입력하면 그것을 명령어로 인식해서 기능을 수행하는 것을 만들려고합니다.
exit 는 종료, new 는 새로운 내용 입력, all은 전원 출력, change는 업데이트(수정)을 위한 키워드로 만들어줍니다.
in.nextLine()은 문자열을 입력받아 리턴합니다.
in.next()는 공백으로 나누기때문에 문자열을 사용하기 위해서는 nextLine()을 사용하였습니다.
만약 new를 입력했다면 command의 시작문자열을 비교(starswith)하여 if문으로 들어갑니다.
만약 new,all,change, exit 외의 문자가 들어갔다면 printHelp()메소드로 넘어갑니다.
지금 포스팅은 new를 위한 기능을 구현할 것 입니다.
printHelp()
private static void printHelp() {
System.out.println();
System.out.println("명령어 사용법을 확인하세요");
System.out.println("## 사용법 ##");
System.out.println("new [이메일] [이름] [암호] [암호확인]");
System.out.println("change [이메일] [현재암호] [변경암호]");
System.out.println();
}
printHelp는 간단하게 명령어를 사용하는 방법을 띄워주는 메소드로 사용하였습니다.
private static Assembler assembler = new Assembler();
assembler를 조립기로 사용할 예정입니다.
어떻게 사용할려 하냐면 assembler에는 new연산자를 모아둘겁니다.
>assembler라는 객체가 만들어질때 memberDao, memSvc 객체도 함께 만들어집니다.
>그 만든 객체를 가지고 MemberService가 만들어집니다.
>MemberService에서는 또 생성자를 통해서 클래서 변수에다가 값을 넣어주고 있습니다.
proccessNewcommand()
private static void proccessNewCommand(String[] args) {
if(args.length != 5) {
printHelp();
return;
}
MemberService memSvc = assembler.getMemSvc();
MemberRequest req = new MemberRequest();
req.setEmail(args[1]);
req.setName(args[2]);
req.setPassword(args[3]);
req.setConfirmPassword(args[4]);
if(! req.isPasswordEqualToConfirmPassword()) {
System.out.println("패스워드가 일치하지 않습니다");
return;
}
memSvc.regist(req);
}
'new'를 입력하여 해당 메소드로 이동했습니다.
command에 넣어놨던것을 문장을 String[] 배열로 조각나 문자열 길이가 5가 아니면 다시 printHelp를 보여줘 올바른 양식을 맞추게 해줍니다.
Main -(MemberRequest)-> service -> Dao -> 데이터(HashMap) |
현재 저는 Service를 호출하고 Service가 DAO를 호출하도록 하는 구성으로 만들것이기 때문에
MemberService memSvc = assembler.getMemSvc(); 를 입력해줍니다
(=memSvc = new MemberService (memberDao); )
만약 양식을 제대로 해서 넣었다면 args의 [1]번째에 setEmail를 해주고, [2]번째에는 name [3]번째는 패스워드 [4]번째에는 확인 패스워드를 넣어줍니다.
req안에는 현재 [이메일, 이름, 패스워드, 확인 패스워드]가 들어있습니다.
req를 MemberRequest에 있는 isPasswordEqualToConfirmPassword()메소드를 실행시켜 패스워드와 확인 패스워드가 일치하는지를 확인합니다.
검증 후에는 그때는 서비스에 값을 넘겨줄것입니다.(memSvc.regist(req);)
memSvc라는 변수에다가 regist()라는 메소드를 호출할건데 이때 전달을 req를 전달합니다
Assembler.java
package mvc2.member.assembler;
import mvc2.member.model.MemberDAO;
import mvc2.member.model.MemberService;
public class Assembler {
private MemberDAO memberDao;
private MemberService memSvc;
public Assembler() {
memberDao = new MemberDAO();
memSvc = new MemberService(memberDao);
}
public MemberDAO getMemberDao() {
return memberDao;
}
public MemberService getMemSvc() {
return memSvc;
}
}
우리가 사용할 객체를 모아두는 곳입니다.
Assembler()에 우리가 사용할 객체를 넣어두고 get을 이용해서 내용을 꺼내 사용할 수 있습니다.
MemberService.java
package mvc2.member.model;
import java.util.Date;
public class MemberService {
private MemberDAO memberDao;
public MemberService(MemberDAO memberDao) {
this.memberDao = memberDao;
}
public void regist(MemberRequest req) {
Member member = memberDao.selectByEmail(req.getEmail());
if(member != null) {
return;
}
Member newMember = new Member(
req.getEmail(),
req.getPassword(),
req.getName(),
new Date()
);
memberDao.insert(newMember);
}
}
public MemberService(MemberDAO memberDao)
MemberService라는 생성자는 MemberDAO라는 자료형에 memberDao라는 변수를 받는 생성자여야 assembler에서 호출했을때의 내용을 받아줄 수 있습니다.
여기서는 등록이란 표현을 regist()라 해주기로합니다.
먼저 dao로 전달하기 전 데이터를 검증할겁니다.
이메일을 고유한 번호로 사용하여 중복이메일을 체크합니다.
req.getEamil()해서 req의 이메일을 가져와 memberDao에서 그 이메일 주소를 가지고 값을 찾아 member에 넣어줍니다.
만약 이메일이 존재한다면 member에 값이 들어있겠죠?
Member member = memberDao.selectByEmail(req.getEmail());
이 문장으로 이메일을 통해서 해당 데이터들을 가져올 수 있습니다.
newMember에는 각각의 값들을 새롭게 넣어줄겁니다.
생성 날짜는 위에서 정의해준 내용들이 없기 때문에 new Date()로 객체를 호출해서 사용해주기로 합니다.
newMember에 넣어둔 값은 dao의 insert메소드를 사용해 넣어줄려고 합니다.
MemberDAO.java
package mvc2.member.model;
import java.util.Collection;
import java.util.HashMap;
public class MemberDAO {
private static int nextId = 0;
private HashMap<String, Member> map = new HashMap<String, Member>();
public Member selectByEmail(String email){
return map.get(email);
}
public void insert(Member newMember) {
newMember.setId(++nextId);
map.put(newMember.getEmail(), newMember);
}
}
회원번호를 증가해서 쓰기 위한 문구는 static int nextId = 0;
HashMap을 이용하는데 key로는 String 문자열을 사용할 것이고 value로는 Member 이름은 map이라고 해줍니다.
*저는 이메일을 key로 쓸 것입니다.
map의 put메소드를 사용 할 것입니다.
map.put(key, value)형식이기 때문에 newMember의 이메일을 key로 사용하고 데이터는 newMember 내용을 다 넣어줍니다.
그다음 id를 지정해서 넣어줄겁니다.
그래서 newMember를 불러내 setId(++nextId)를 해서 넣어줍니다.
DAO의 주된 역할은 간단하게 값을 넣어주는 것입니다. |
MemberRequest.java(검증용)
package mvc2.member.model;
public class MemberRequest {
private String email;
private String password;
private String confirmPassword;
private String name;
public boolean isPasswordEqualToConfirmPassword() {
return password.equals(confirmPassword);
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getConfirmPassword() {
return confirmPassword;
}
public void setConfirmPassword(String confirmPassword) {
this.confirmPassword = confirmPassword;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
isPasswordEqualToConfirmPassword()는 password와 confirmPassword가 같다면 true, 아니면 false를 반환하게 합니다.
사실 Member.java와 크게 다를 것이 없지만 하는 역할을 나누어주었습니다.
Member.java(등록용)
package mvc2.member.model;
import java.util.Date;
public class Member {
private int id;
private String email;
private String password;
private String name;
private Date registerDate;
public Member(String email, String password, String name, Date registerDate) {
super();
this.email = email;
this.password = password;
this.name = name;
this.registerDate = registerDate;
}
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 getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getRegisterDate() {
return registerDate;
}
public void setRegisterDate(Date registerDate) {
this.registerDate = registerDate;
}
}
이 페이지는 dao에서 값을 입력을 할때 사용하기 위한 페이지로 만들었습니다.
registerDate는 회원 가입 날짜를 넣어주기 위함입니다.
'Spring' 카테고리의 다른 글
스프링_@RequestParam 간단하게 사용해보기 (0) | 2021.05.25 |
---|---|
스프링_Annotation(@RequestMapping,@GetMapping,@PostMapping)을 이용하여 더 짧고 간단하게 get,Post방식으로 보내기 (0) | 2021.05.25 |
스프링_post로 보내기 get으로 보내기 (0) | 2021.05.25 |
스프링_Annotation(@) Autowired, Component사용하기 (0) | 2021.05.25 |
스프링_컨트롤러를 한번 사용해보기 (0) | 2021.05.21 |
- Total
- Today
- Yesterday
- RequestDispatcher
- scriptlet
- NAV
- 실기
- 정처기
- id
- Margin
- dl
- 정처산기
- session
- Declaration
- 정보산업처리기사
- 자격증
- CLASS
- request
- 독학
- padding
- span
- jsp
- Expression
- application
- link href
- this.
- forward
- getParameter
- 합격
- Redirect
- div
- pageContext
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |