국비지원 복습과정 11차 (Wrapper Class, 패턴 체크)

Park In Kwon·2022년 9월 15일
0

1. Wrapper Class

1-1. Wrapper Class란

  • Java는 데이터를 관리하기 위하여 기본 데이터 타입을 지원하지만,
    클래스를 통해서 만들어진 객체를 통한 데이터 관리도 가능하다.
  • 기본 데이터 타입의 변수를 객체형태로 사용해야 하는 경우가 있는데,
    이때 기본형 타입을 객체로 포장할 필요가 있다.
  • 포장 클래스(Wrapper Class)는 특정 기본형 타입을 나타내는 용도로 사용된다.

1-2. Wrapper Class 의미

  • 초창기 Java언어는 기본 자료형의 연산보다도 Wrapper 클래스를 사용한 연산이 더 많이 이루어 졌으나, Java언어가 발전함에 따라서 기본 자료형과 Wrapper 클래스 간에 연산에 차이가 없어졌다.
  • 최근에 Java언어는 Wrapper클래스와 기본 자료형을 구분하지 않고 사용하기 때문에 객체로서의 특별한 의미가 없어졌다고 볼 수 있다.

1-3. Wrapper 클래스의 객체 만들기

  • 각각의 Wrapper 클래스의 객체는 자신과 대응되는 기본 자료형의 데이터를 파라미터로 전달받는다.
	int num = 1;
	Integer wrapper = new Integer( num );

1-4. Wrapper 클래스 형변환

  • 기본 자료형과 Wrapper 클래스 간에는 서로 암묵적 형변환이 가능하다.
	int num = 100;
	Integer wrapper = num;

	Integer wrapper = New Integer(200);
	int num = wrapper;

1-5. Wrapper 클래스의 static 데이터

  • 모든 Wrapper클래스는 static 데이터 형태로 Wrapper 클래스에 대응되는 자료형에 대한 최소값과 최대값을 가지고 있다.

    	int max = Integer.MAX_VALUE;
    	int min = Integer.MIN_VALUE;

1-6. 문자열 데이터의 형변환(중요)

  • 1과 "1"의 차이
  • 기본 자료형과 문자열 데이터간의 연산에서는 기본 자료형 데이터가
    문자열로 변환된 후, 문자열간의 연산으로 처리된다.

int a = 1;
String b = "1";
System.out.println(a + b); // 11

  • 사용자 입력값에 대한 연산
  • 모든 프로그램 플랫폼에서 사용자의 입력값은 String 으로 처리된다.
  • 만약, 인터넷뱅킹에서 2개의 계좌로 송금할 금액을 각각 입력하였을 때,
    총 금액을 계산한다면 다음과 같이 처리된다.
String money1 = "3000";
String money2 = "5000";
String total = moeny1 + money2;	// 30005000
  • 문자열 데이터를 기본 데이터 형으로 변환하기
    -> wrapper 클래스에는 기본 자료형의 모양을 띄고 있는 문자열 데이터를
    실제 기본 자료형으로 변환시키는 기능이 포함되어 있다.
String money1 = "3000";
String money2 = "5000";

int m1 = Integer.parseInt( money1 );
int m2 = Integer.parseInt( money2 );

System.out.println(m1 + m2);	// 8000
public class Main01 {

	public static void main(String[] args) {
		// String 객체의 생성 방법
		String str1 = "자바 Programming";
		String str2 = new String("Java");
		// 위와 같다. String str2 = "Java";
		
		System.out.println("str1 : " + str1); 
		System.out.println("str2 : " + str2); 
		System.out.println("-------------------------");
		
//		1. 문자열의 길이를 조회
		int str1_len = str1.length();
		int str2_len = str2.length();
		System.out.println("str1_len : " + str1_len); 
		System.out.println("str2_len : " + str2_len); 
		System.out.println("-------------------------");
		
//		2. 특정 문자열이 처음으로 나타나는 위치를 조회
		int str1_pos = str1.indexOf(" "); 
		int str2_pos = str2.indexOf("a");
		System.out.println("str1_pos : " + str1_pos); 
		System.out.println("str2_pos : " + str2_pos); 
		System.out.println("-------------------------");
		
//		3. 특정 문자열이 나타나는 마지막 위치를 조회
		int str1_last_pos = str1.lastIndexOf(" "); 
		int str2_last_pos = str2.lastIndexOf("a");
		System.out.println("str1_last_pos : " + str1_last_pos); 
		System.out.println("str2_last_pos : " + str2_last_pos); 
		System.out.println("-------------------------");
		
//		4. A를 B로 변경하기
		String new_str1 = str1.replace(" ", "-"); 
		String new_str2 = str2.replace("a", "A");
		System.out.println("new_str1 : " + new_str1); 
		System.out.println("new_str2 : " + new_str2); 
		System.out.println("-------------------------");
		
//		5. 대소문자 변경
		String upper = new_str2.toUpperCase();
		String lower = new_str2.toLowerCase();
		System.out.println("upper : " + upper); 
		System.out.println("lower : " + lower); 
		System.out.println("-------------------------");
		
//		6. 문자열의 앞 뒤 공백제거
		String input = "    enjoy   java programming         ";
		String output = input.trim();
		System.out.println("input = " + input); 
		System.out.println("output = " + output); 
//		  중간 공백까지 포함한 모든 공백 제거
		String output2 = input.replace(" ", "");
		System.out.println("output2 = " + output2);
		System.out.println("-------------------------");
		
//		7. 문자열 비교하기
		boolean isSam = str1.equals(str2);
		if(isSam) {
			System.out.println("같다");
		} else {
			System.out.println("다르다");
		}
		System.out.println("-------------------------");
		
//		8. 문자열 자르기
//		   - 첫 번째 파라미터: 시작위치
//		   - 두 번째 파라미터: 끝 위치
		String sub_str1 = str1.substring(0,2);
		System.out.println(str1);
		System.out.println("sub_str1 : " + sub_str1);
		// 두번째 파라미터가 없는 경우 끝까지 자른다.
		String sub_str2 = str1.substring(3);
		System.out.println("sub_str2 : " + sub_str2);
		
		//9. 형식에 따른 문자열 출력을 위한 static 메서드 사용
		/*
		 * - %d : 정수
		 * - %s : 문자
		 * - %f : float형 소수
		 * - %3d: 숫자를 3자리로 맞춰서 출력
		 *        자릿수가 맞지 않으면, 앞에 공백출력
		 * - %03d: 자릿수가 맞지 않으면 0을 출력
		 * - %3s : 문자열을 3자리로 맞춰서 출력
		 *         자릿수가 맞지 않으면 앞에 공백 출력
		 *         (%03s와 같은 형식은 사용 불가)
		 */
		
		int yy = 2022;
		int mm = 3;
		int dd = 20;
		String gender = "남자";
		String result = String.format("%d년 %02d월 %02d일 %s",
				                        yy,  mm,  dd, gender);
		System.out.println(result);
		System.out.println("------------------------------");
		
		// 10. 주어진 글자를 기준으로 잘라내어서 배열로 변환
		String src = "C++/Java/HTML/CSS/JavaScript";
		String[] data = src.split("/");
		
		for(int i = 0; i<data.length; i++) {
			System.out.println(data[i]);
		}
	}
}

public class Main02 {

	public static void main(String[] args) {
		//1. 이메일 주소에서 아이디와 도메인을 구별하기
		// 단 splite 사용 금지
		
		String email = "student@java.com";
		
		//결과 : 아이디 => student
		//결과 : 도메인 -> java.com
		
		System.out.println("아이디 : " + email.substring(0,7)); 
		System.out.println("도메인 : " + email.substring(8,16)); 
		
		// "@" 가 나타나는 위치 얻기
		int s = email.indexOf("@");
		
		// 처음부터 "@"가 나타나는 위치까지 자르기 -> 아이디
		String email_id = email.substring(0,s);
		
		// "@"가 나타나는 위치 다음부터 끝까지 자르기 -> 도메인
		String email_domain = email.substring(s + 1);
		
		// 결과 아이디 
		System.out.println("아이디 : " + email_id);
		// 결과 도메인
		System.out.println("도메인 : " + email_domain );
		
	}
}

패턴 체크하기

package patterncheck;

import java.util.regex.Pattern;

public class Main01 {

	public static void main(String[] args) {
		// 회원 가입시에 입력한 내용을 가정한 변수값들
		String name = "자바학생";
		String age = "19";
		String email = "student@java.net";
		String phone = "01012345678";
		
		//한글여부검사
		boolean isKor = Pattern.matches("^[ㄱ-ㅎ가-힣]*$", name);
		
		if(!isKor) {
			System.out.println("이름은 한글로 입력해주세요");
			// 실행도중 return을 만나면 즉시 중단
			// void 형은 return 키워드만 명시한다.
			return;
		}
		
		//숫자인지 검사
		boolean isNum = Pattern.matches("^[0-9]*$", age);
		if(!isNum) {
			System.out.println("나이는 숫자로만 입력해 주세요.");
			return;
		}

		// 이메일 검사
		boolean isEmail = Pattern.matches("^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$", email);
		if(!isEmail) {
			System.out.println("이메일 형식이 맞지 않습니다");
			return;
		}
		
		// 핸드폰 번호 검사
		boolean isPhone = Pattern.matches("^01(?:0|1|[6-9])(?:\\d{3}|\\d{4})\\d{4}$", phone);
		if(!isPhone) {
			System.out.println("핸드폰 번호가 맞지 않습니다");
			return;
		}
		
		System.out.println("회원 가입 절차를 진행합니다.");
	}
}

package patterncheck;

public class Main02 {

	public static void main(String[] args) {
		String name = "자바학생";
		String age = "19";
		String email = "student@java.net";
		String phone = "01012345678";
		
		//RegexHelper에서 만든 메서드 사용해서 데이터 검증
		if(!RegexHelper.getInstance().isKor(name)) {
			System.out.println("이름은 한글로 입력해주세요");
			return;
		}
		
		if(!RegexHelper.getInstance().isNum(age)) {
			System.out.println("나이는 숫자로만 입력해주세요");
			return;
		}
		
		
		System.out.println("회원 가입 절차를 진행합니다");
	}
}

package patterncheck;

import java.util.regex.Pattern;

public class RegexHelper {
	// 싱글톤 객체 생성
	// -- 싱글톤 객체 생성 시작
	private static RegexHelper regexHelper;

	// 객체가 할당되지 않은 경우메나 할당하도록 하여 중복 할당을 방지한다.
	public static RegexHelper getInstance() {
		
		if( regexHelper == null ) {
			regexHelper = new RegexHelper();
		}
		
		return regexHelper;
	}
	
	// 객체에 null을 대입하면 메모리에서 삭제된다.
	public static void freeInstance() {
		regexHelper = null;
	}
	
	// 기본 생성자를 private 형태로 정의하면 객체 생성자가 은닉 처리되어
	// 외부에서 new 연산자를 사용한 객체할당이 금지된다.
	private RegexHelper(){	}
	// -- 싱글톤 객체 생성 끝
	
	/*
	 * 주어진 문자열이 공백이거나 null인지 검사
	 * @param 	str 		- 검색할 문자열
	 * @return	boolean		- 공백, null이 아닐 경우 true 리턴
	 */
	public boolean isValue(String str) {
		boolean result = false;
		
		if( str != null ) {
			result = !str.trim().equals("");
		}
		
		return result;
	}
	
	/*
	 * 숫자 모양에 대한 형식 검사
	 * @param 	str 		- 검사할 문자열
	 * @return	boolean		- 형식에 맞을 경우 true, 맞지 않을경우 false 
	 */
	public boolean isNum( String str ) {
		boolean result = false;
		
		if( isValue(str) ) {
			result = Pattern.matches("^[0-9]*$", str);
		}
		
		return result;
	}
	
	/*
	 * 영문으로만 구성되었는지에 대한 형식 검사
	 * @param 	str 		- 검사할 문자열
	 * @return	boolean		- 형식에 맞을 경우 true, 맞지 않을경우 false 
	 */
	public boolean isEng( String str ) {
		boolean result = false;
		
		if( isValue(str) ) {
			result = Pattern.matches("^[a-zA-Z]*$", str);
		}
		
		return result;
	}
	
	/*
	 * 한글로만 구성되었는지에 대한 형식 검사
	 * @param 	str 		- 검사할 문자열
	 * @return	boolean		- 형식에 맞을 경우 true, 맞지 않을경우 false 
	 */
	public boolean isKor( String str ) {
		boolean result = false;
		
		if( isValue(str) ) {
			result = Pattern.matches("^[ㄱ-ㅎ가-힣]*$", str);
		}
		
		return result;
	}
	
	/*
	 * 영문과 숫자로만 구성되었는지에 대한 형식 검사
	 * @param 	str 		- 검사할 문자열
	 * @return	boolean		- 형식에 맞을 경우 true, 맞지 않을경우 false 
	 */
	public boolean isEngNum( String str ) {
		boolean result = false;
		
		if( isValue(str) ) {
			result = Pattern.matches("^[a-zA-Z0-9]*$", str);
		}
		
		return result;
	}
}
profile
개발자로 진로 변경을 위해 준비하고 있습니다

0개의 댓글