[JAVA] 싱글톤과 정규표현식 예제

김윤섭·2023년 9월 4일
0

JAVA

목록 보기
20/27
post-thumbnail

문제

  1. 사용자에게 이름, 나이, 이메일, 전화번호를 입력받는다.
  2. 싱글톤 클래스 RegexHelper에서 validation check를 하는
  3. 회원가입 절차를 작성한다.

풀이과정

1. 싱글톤 객체를 만든다

private static RegexHelper current;
    
    public static RegexHelper getInstance(){
    	if (current == null ){
        	current = new RegexHelper();
         }
         return current;
     }
     public static void freeInstance() {
     	current = null; 
     } // freeInstance()는 생략가능, 객체에 null을 입력하면 삭제된다는 뜻
     
     priavate RegexHelper2(){}

2. 내가 받은 문자열이 공백이거나 null인지 확인

	// boolean 변수로 문자열이 공백 or null 이면 false, 문자열이면 true
	public boolean isValue(String str){
    	//boolean result의 기본값은 false
    	boolean result = false;
        // 만약 문자열이 비어있지 않으면
        if ( str != null ){
        	//result 값 = 문자열의 공백을 제외한 값이 공백이 아닌게 맞다 = true
            //result 값 = 문자열의 공백을 제외한 값이 공백이 아닌게 아니다 = false
            //equals도 true/false의 값을 가짐
        	result = !str.trim().equals("");
        }
        // 만약 문자열이 비어있으면 result 값으로 돌아가라 -> 기본값 false로
        return result;
    }    
    
    * true/false 값만 담으면 됨

3. 정규표현식을 사용한 각 문자에 대한 형식 검사

*** 이름 한글 여부 ***
    
    // 이름배열이 한글인지 아닌지 true/false
	public boolean isKor( String str ) {   
		boolean result = false;
        // isValue의 값이 true이면
		if( isValue(str) ) {
        	// 패턴 매치가 true인지 false인지의 값이 result에 담긴다.
			result = Pattern.matches("^[ㄱ-ㅎ가-힣]*$", str);
		}
        // 아니면 result는 디폴트값인 false.
		return result;						
	}
    
    * true / false값만 담으면 됨

----------싱글톤 객체를 담은 클래스 완성----------

4. 사용자에게 받은 정보 변수처리

	String name = "자바학생";

5. 입력값 형식검사를 통한 결과 출력

	//study클래스 객체의 isKor 메소드에 변수 name을 담고
    //그 값이 true가 아니면, 다음값을 출력하고
	if(!study.getInstance().isKor(name)) { 
	System.out.println("이름을 한글로 입력해주세요");
    // 더 이상 메소드 진행하지 않고 돌아감
     return;
	}

6. 회원가입 절차를 알림

System.out.println("회원가입 절차를 시작합니다.");

💡 정리

// 싱글톤 객체를 담은 클래스 시작
import java.util.regex.Pattern;

public class study {
	
	private static study current;
	
	public static study getInstance() { 
		if( current == null ) {
			current = new study();
		}
		return current;
	}

	public static void freeInstance() {
		current = null;
	}

	private study () {}

	public boolean isValue(String str) {
		boolean result = false;
		if ( str != null ) {
			result = !str.trim().equals("");
		}
		return result;	
	}
	
	// 이름 한글 여부
	public boolean isKor( String str ) {   
		boolean result = false;	
		if( isValue(str) ) {
			result = Pattern.matches("^[ㄱ-ㅎ가-힣]*$", str);
		}
		return result;						
	}
	
	//숫자 나이 여부
	public boolean isAge( String str ) {   
		boolean result = false;	
		if( isValue(str) ) {
			result = Pattern.matches("^[0-9]*$", str);
		}
		return result;						
	}
	
	//이메일 형식 여부
	public boolean isEmail( String str ) {   
		boolean result = false;	
		if( isValue(str) ) {
			result = Pattern.matches("^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$", str);
		}
		return result;						
	}
	
	//전화번호 숫자 형식 여부(기호 "-"제거 했는 지)
	public boolean isNum( String str ) {   
		boolean result = false;	
		if( isValue(str) ) {
			result = Pattern.matches("^01(?:0|1|[6-9])(?:\\d{3}|\\d{4})\\d{4}$", str);
		}
		return result;						
	}
    
// 싱글톤을 담은 클래스 끝
//메인메서드를 담은 클래스

public class Main {

	public static void main(String[] args) {
		String name = "자바학생";
		String age = "30";
		String email = "abc@gac.com";
		String num = "01012345678";
		
		if(!study.getInstance().isKor(name)) {
			System.out.println("이름을 한글로 입력해주세요");
			return;
		}
		
		if(!study.getInstance().isAge(age)) {
			System.out.println("나이를 숫자로 입력해주세요");
			return;
		}
		
		if(!study.getInstance().isEmail(email)) {
			System.out.println("이메일의 양식을 지켜주세요");
			return;
		}
		
		if(!study.getInstance().isNum(num)) {
			System.out.println("전화번호의 숫자만 입력해주세요");
			return;
		}
		
		System.out.println("회원가입 절차를 시작합니다.");
	}
}

// 출력 : 회원가입의 절차를 시작합니다.

📌오답노트

  • 메인메서드를 담은 클래스에서는 메인메서드 내부에 식을 적지 않더라도 순서가 중요하다.
  • 메서드 호출법
	System.out.println(isEng(""));
  • boolean형은 true/false값을 내는게 중요하다.
profile
안녕하세요

0개의 댓글