본문 바로가기
개발/JAVA

자바 - Wrapper,String class, StringTokenizer, Random, Date

by chansungs 2020. 6. 14.
728x90
반응형

Wrapper

package basic;

public class Class_53_Wrapper {
	public static void main(String[] args) {
		// Wrapper 클래스는 기본형의 데이터를 객체화 하기위해 제공되는 클래스
		int num1 = 100;
		
		// 이전 방식의 Wrapper 객체 생성
		// - new 를 사용한 객체 생성 방식
		Integer numObj1 = new Integer(num1);
		
		// 새로운 방식의 Wrapper 객체 생성
		// - 오토 박싱을 사용한 객체 생성
		Integer numObj2 = num1;
		
		// 기존의 객체 메소드 호출을 통한 기본형 데이터 제공
		int num2 = numObj2.intValue();
		// Wrapper클래스의 레퍼런스 값을 기본 자료형에 대입할 수 있습니다.
		// (실제 동작은 num2 = numObj2.intValue(); 가 처리됩니다.)
		// - 오토 언박싱을 사용한 기본형 데이터 제공
		num2 = numObj1;
		
		// Wrapper 클래스의 활용 방법
		// - 데이터 저장 범위의 확인
		System.out.printf("byte 타입으로 저장할 수 있는 값의 범위는 %d ~ %d 입니다.\n",
				Byte.MIN_VALUE, Byte.MAX_VALUE);
		System.out.printf("short 타입으로 저장할 수 있는 값의 범위는 %d ~ %d 입니다.\n",
				Short.MIN_VALUE, Short.MAX_VALUE);
		System.out.printf("int 타입으로 저장할 수 있는 값의 범위는 %d ~ %d 입니다.\n",
				Integer.MIN_VALUE, Integer.MAX_VALUE);
		System.out.printf("long 타입으로 저장할 수 있는 값의 범위는 %d ~ %d 입니다.\n",
				Long.MIN_VALUE, Long.MAX_VALUE);
		
		// - 기본형 데이터의 자료형 크기
		System.out.printf("int 타입은 %d bit 만큼 저장할 수 있습니다.\n", Integer.SIZE);
		System.out.printf("int 타입은 %d byte 만큼 저장할 수 있습니다.\n", Integer.BYTES);
		
		// - 문자열로 저장된 기본형 데이터를 변환하는 기능
		String strNum1 = "10";
		String strNum2 = "7";
		
		System.out.println(strNum1 + strNum2);

		// Wrapper 클래스가 제공하는 parse~~~ 메소드를 사용하여
		// 문자열 값을 실제 자료형으로 변환할 수 있습니다.
		System.out.println(Integer.parseInt(strNum1) + Integer.parseInt(strNum2));
		
		// 2진법으로 저장된 문자열
		strNum1 = "1010";
		strNum2 = "0111";
		System.out.println(Integer.parseInt(strNum1, 2) + Integer.parseInt(strNum2, 2));
		
		// - 저장하고 있는 기본형의 데이터를 문자열로 반환
		Integer itg = 27;
		System.out.printf("%d를 2진법으로 변환하는 %s 입니다.\n", 
				itg.intValue(), Integer.toBinaryString(itg));
		System.out.printf("%d를 8진법으로 변환하는 %s 입니다.\n", 
				itg.intValue(), Integer.toOctalString(itg));
		System.out.printf("%d를 16진법으로 변환하는 %s 입니다.\n", 
				itg.intValue(), Integer.toHexString(itg));
		
	}
}


String class

package basic;

public class Class_54_String {
	public static void main(String[] args) {
		// 문자열을 저장하기 위한 클래스의 사용
		// - 문자열 : 글자의 수가 지정되지 않은 문자들의 집합
		// - 문자열은 크기가 제한이 없음
		// - 데이터의 크기가 고정되지 않기 때문에 기본형의 자료형이 존재하지 않음
		// - 자바 언어에서는 문자열을 저장하기 위해 java.lang.String 클래스가 제공됨
		
		// String 클래스를 사용한 문자열 저장 방법
		// 1. 문자열을 대입하는 방식 - 오토 박싱(X)
		String str1 = "Hello";
		
		// 2. 객체의 생성방법을 사용하는 방식 (기본)
		String str2 = new String("Hello");
		
		// 문자열을 직접 대입하는 경우의 특징
		// - 문자열 상수의 영역을 참조합니다.
		String src1 = "Hello";
		String src2 = "Hello";
		
		if( src1 == src2 )
			System.out.println("src1과 src2는 같습니다.");
		else
			System.out.println("src1과 src2는 다릅니다.");
		
		// 아래와 같은 경우 서로 다른 HEAP 메모리를 참조하므로
		// 다른 참조값을 가지기 때문에 서로 다른 결과가 나옵니다.
		String src3 = new String("Hello");
		String src4 = new String("Hello");
		
		if( src3 == src4 )
			System.out.println("src3과 src4는 같습니다.");
		else
			System.out.println("src3과 src4는 다릅니다.");
		
		// 자바에서의 문자열은 불변객체의 특징을 가집니다.
		// - 아래의 src5, src6은 동일한 위치의 문자열을 참조합니다.
		String src5 = "Hello";
		String src6 = "Hello";
		
		System.out.printf("%s / %s\n", src5, src6);
		
		src5 += " World"; 
		
		System.out.printf("%s / %s\n", src5, src6);
		
		// String 클래스가 제공하는 모든 기능들은
		// 원본 데이터를 수정하지 않고
		// 새로운 문자열 생성하여 반환하는 방식을 사용합니다.
		
		// replaceAll 메소드는 String 객체가 참조하는
		// 문자열의 특정 부분을 다른 문자열로 대체하는 메소드입니다.
		// String 클래스의 모든 값을 수정하는 메소드는
		// 원본 데이터는 수정하지 않고 새로운 문자열을 생성하여
		// 처리합니다.
		System.out.println(src5.replaceAll("World", "TJE"));
		System.out.println(src5);
		
		// String 클래스의 trim 메소드
		// - 문자열의 앞뒤에 존재하는 공백을 제거하여 반환하는 메소드
		String source = "         Hello        ";
		System.out.printf("'%s'\n", source);
		System.out.printf("'%s'\n", source.trim());
		System.out.printf("'%s'\n", source);

		// 문자열의 값 비교를 위한 equals 메소드
		String id = "id13579";
		if( id.equals("id13579") )
			System.out.println("TRUE");
		else
			System.out.println("FALSE");
		
		// 문자열의 길이를 반환하는 length 메소드
		System.out.println(id.length());
	}
}


String class

package basic;

public class Class_55_String {
	public static void main(String[] args) {
		// 자바에서 제공하는 String 클래스는 문자열 저장하지 않고
		// 참조하는 방식을 기반으로 동작합니다.
		// - String 클래스의 메소드를 빈번하게 호출하는 경우
		//   메모리의 낭비가 심해질 수 있습니다.
		//   (불변객체의 특징때문에 새로운 문자열이 생성)
		
		// 만약 문자열의 길이가 제한적인 경우(휴대전화 번호, 이름)에는
		// 문자열 자제를 저장하여 수정할 수 있는 클래스가 필요합니다.
		// - StringBuffer(멀티쓰레딩 환경에서 동기화를 지원) / 
		//   StringBuilder(싱글쓰레딩 환경에서 최적화, 속도가 빠름) 클래스
		
		// 10글자까지 추가적인 메모리 할당없이 저장할 수 있는 객체를 생성
		// - 디폴트 생성자의 경우 16글자까지 저장
		// - 허용량이 넘어서는 문자열 연산이 일어나면 자동으로 확장됨
		StringBuilder sb = new StringBuilder(10);
		
		sb.append("Hello");
		System.out.printf("%s / %d / %d\n", sb.toString(), sb.length(), sb.capacity());
		
		sb.append("World");
		System.out.printf("%s / %d / %d\n", sb.toString(), sb.length(), sb.capacity());
		
		sb.append("~!");
		System.out.printf("%s / %d / %d\n", sb.toString(), sb.length(), sb.capacity());
		
		// 문자열 삽입 기능
		// - 아래와 같은 경우 5번째 인덱스 위치에 " " 을 추가
		sb.insert(5, " ");
		System.out.printf("%s / %d / %d\n", sb.toString(), sb.length(), sb.capacity());
		
		// 문자열 부분 삭제 기능
		// - 아래와 같은 경우 1번째 인덱스부터 12 인덱스 전까지 삭제
		// - 12번째 인덱스의 문자열은 삭제가 안됨!
		sb.delete(11, 12);
		System.out.printf("%s / %d / %d\n", sb.toString(), sb.length(), sb.capacity());
		
		// 특정 문자열의 시작 인덱스 검색 기능
		// - indexOf 메소드
		// - 아래와 같은 경우  World 문자열의 시작 인덱스를 반환
		// - 만약 존재하지 않는 문자열인 경우 -1 이 반환
		sb.delete(0, sb.indexOf("World"));
		System.out.printf("%s / %d / %d\n", sb.toString(), sb.length(), sb.capacity());
	}
}


StringTokenizer

package basic;

import java.util.StringTokenizer;

public class Class_56_StringTokenizer {
	public static void main(String[] args) {
		// java.util.StringTokenizer 클래스
		// - 문자열을 분할할 수 있는 기능을 제공하는 클래스
		// - EX) 100;90;88;75;96
		// - 문자열을 파싱하기 위해서 사용되는 클래스
		// - 하나의 문자열에 여러 데이터를 저장하고 있는 경우
		//   각각의 데이터를 추출하기 위해서 사용됩니다.
		// - StringTokenizer 클래스를 사용하기 위해서는
		//   java.util 패키지를 임포트해야합니다.
		
		String scores = "100;90,88#75?96";
		
		// scores 문자열을 ; 을 기준으로 파싱할 수 있는 객체 생성
		StringTokenizer st = new StringTokenizer(scores, ";,#?");
		
		int total = 0;
		
		// StringTokenizer 클래스의 hasMoreTokens 메소드는
		// 원본 문자열에서 추출할 수 있는 토큰(성적)이 남아있는지 확인하는 메소드
		while( st.hasMoreTokens() ) {
			// ; 을 기준으로 구분된 문자열을 추출
			// - 다음의 토큰에 접근하고, 해당 토큰의 값을 반환하는
			//   nextToken 메소드
			String strToken = st.nextToken();
			int score = Integer.parseInt(strToken);
			total += score;
		}
		
		System.out.printf("성적의 총합은 %d 점 입니다.\n", total);
	}
}

Random

package basic;

import java.util.Random;

public class Class_57_Random {
	public static void main(String[] args) {
		// 랜덤한 숫자를 생성할 수 있는 방법
		// - 난수를 기반으로 임의의 랜덤한 숫자를 생성할 수 있음
		// - 난수 : 0 보다 크고 1 보다 작은 실수
		
		// 1. java.lang.Math 클래스의 random 메소드를 사용하는 방법
		// - 난수를 추출하여 직접 숫자를 생성하는 방법
		for( int i = 0 ; i < 3 ; i++ )
			// Math 클래스의 random 메소드는 난수를 
			// 발생시키는 메소드입니다.
			System.out.printf("%d : %f\n", i+1, Math.random());
		
		// 난수를 사용하여 로또 번호를 생성하는 예제
		// - 난수는 0 < 난수 < 1
		// - 1 ~ 45
		// - 난수 * 45 -> 0.000000001 < 결과 < 44.99999999999999
		// - (int)(난수 * 45 + 1)
		// - Math.random 을 활용한 식
		//   (int)(Math.random() * 45) + 1
		//   (int)(Math.random() * 최대값) + 최소값
		for( int i = 0 ; i < 6 ; i++ ) {
			int number = (int)(Math.random() * 45) + 1;
			System.out.printf("%d ", number);
		}
		System.out.println();
		
		// 2. java.util.Random 클래스를 사용하는 방법
		// - 난수를 제어하는 random 클래스의 기능을 활용하여 숫자를 생성
		// - 생성자에 seed 값을 지정하는 경우 같은 seed 값은 동일한 난수의 발생을 보장합니다.
		//Random r = new Random(10);
		Random r = new Random();
		for( int i = 0 ; i < 6 ; i++ ) {
			int number = r.nextInt(45) + 1;
			System.out.printf("%d ", number);
		}
	}
}


Date

package basic;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class Class_58_Date {
	public static void main(String[] args) {
		// 날자 정보에 대한 처리 방법
		// - java.util.Date 클래스를 사용하여 저장 및 출력
		// - Date 클래스를 활용하여 등록날자, 생년월일과 같은
		//   정보를 저장할 수 있습니다.
		
		Date now;
		// Date 클래스의 객체를 생성하여 현재 시간의 정보를 저장하는
		// 객체를 생성할 수 있습니다. (디폴트 생성자 사용)	
		now = new Date();
		System.out.println(now.toString());
		
		// Calendar 클래스의 객체를 사용하여 현재 시간에 대한 정보를 
		// 생성하는 예제 (권장방법)
		now = Calendar.getInstance().getTime();
		System.out.println(now.toString());
		
		// 날자 데이터의 출력 형태를 가공하는 방법
		// - java.text.SimpleDateFormat 클래스를 활용합니다.
		// - 대문자 M 은 월을 의미하고
		// - 소문자 m 은 분을 의미합니다.
		SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
		System.out.println(sdf1.format(now));
		
		// - 대문자 H는 24 시를 의미합니다.
		//   소문자 h는 12 시를 의미합니다.
		SimpleDateFormat sdf2 = new SimpleDateFormat("hh:mm:ss a");
		System.out.println(sdf2.format(now));
		
		SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss a");
		System.out.println(sdf3.format(now));
		
		// 현재 시간외에 지정한 시간 데이터를 Date 클래스의 객체로
		// 생성하는 방법
		String strDate = "2002-04-13";
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		try {
			Date d = sdf.parse(strDate);
			System.out.println(sdf3.format(d));
		} catch (ParseException e) {			
			e.printStackTrace();
		}
		
	}
}

728x90
반응형

'개발 > JAVA' 카테고리의 다른 글

자바 - Collection  (0) 2020.06.14
자바 - Object  (0) 2020.06.14
자바 객체지향 (11) - InnerClass  (0) 2020.06.14
자바기초 - Package  (0) 2020.06.14
자바 객체지향 (11) - 인터페이스(interface)  (0) 2020.06.14