ToBe끝판왕

[ JAVA ] java.lang 패키지( String 클래스 / StringBuffer 클래스 / Math 클래스 / Wrapper 클래스 / System 클래스 ) 본문

■ 프로그래밍 SKILLS/JAVA

[ JAVA ] java.lang 패키지( String 클래스 / StringBuffer 클래스 / Math 클래스 / Wrapper 클래스 / System 클래스 )

업그레이드중 2022. 5. 25. 21:54
반응형

 


 

String 클래스 문자열 비교

 

▶  참조값 , new 연산자

•  문자열 리터럴이 동일하다면, 동일한 String 객체를 공유한다.

 

•  new 연산자를 사용하여 직접 String 객체 생성할 수 있다.

   -  서로 다른 객체

   -  new 연산자는 Heap 영역에 새로운 객체를 만드는 객체 생성자

String a = "aaa";
String b = "aaa";
String c = new String( "aaa" );
String d = new String( "aaa" );

 

 

▶  불변성

•  String() 의 특성 - 불변성

String str = "ABC";
str += "BCD";
System.out.println( str );

String pstr = str.replaceAll( "ABC", "CDE" );

// str에 저장된 값은 Heap 메모리영역에서 불변( immutable ) 하다.
System.out.println( str );
System.out.println( pstr );

결과값

 

 

 

▶  문자열 비교 ( equals( ) 메서드 사용, 참조값 비교 )

 

•  동일성 비교는 == 로 객체 인스턴스의 주소값 비교

•  동등성 비교는 equals( ) 메서드 사용하여 객체 내부의 값 비교

public class Study {

	public static void main( String[] args ) {
    
    	String str11 = "Hello World";
        String str12 = "Hello World";
        
        String str21 = new String( "Hello World" );
        String str22 = new String( "Hello World" );
        
        // 문자열 비교의 안좋은 예
        if( str21 == str22 ) {
        	System.out.println( "참조값이 같다." );
        } else {
        	System.out.println( "참조값이 다르다." );
        }
        
        // 문자열 비교 => 꼭 equals() 사용 !
        if( str21.equals( str22 ) ) {
        	System.out.println( "내용값이 같다." );
        } else {
        	System.out.println( "내용값이 다르다." );
        }
        
        if( str11 == str12 ) {
        	System.out.println( "참조값이 같다." );
        } else {
        	System.out.println( "참조값이 다르다." );
        }
        
        if( str11.equals( str22 ) ) {
        	System.out.println( "내용값이 같다." );
        } else {
        	System.out.println( "내용값이 다르다." );
        }
        
        System.out.println( str11.hashCode() );
        System.out.println( str12.hashCode() );
    }
}

결과값

 


 

StringBuffer / StringBuilder 클래스

 

•  String객체를 수정할 때, 새로운 객체를 생성하며 낭비하는 메모리를 보완하기 위한 클래스

•  StringBuffer와 StringBuilder는 생성방법과 메서드가 같다.

•  내부버퍼에 문자열을 저장해두고 그 안에서 추가 / 수정 / 삭제 작업을 할 수 있다.

 

※ 버퍼( Buffer )

내부 임시공간, 데이터가 계속적으로 들어와도 일정량을 유지한다.

 

 

▶  StringBuffer 생성

// 기본
StringBuffer sb1 = new StringBuffer();

// 크기 할당
StringBuffer sb2 = new StringBuffer( 200 );

// 문자열 할당
StringBuffer sb3 = new StringBuffer( "Hello World" );

 

 

▶  StringBuffer 객체 저장공간

기본 내부 저장공간은 16 ( 문자를 넣으면 늘어난다. )

StringBuffer sb1 = new StringBuffer();
StringBuffer sb2 = new StringBuffer( 200 );
StringBuffer sb3 = new StringBuffer( "Hello World" );

System.out.println( sb1.capacity() );
System.out.println( sb2.capacity() );
System.out.println( sb3.capacity() );

결과값

 

 

▶  StringBuffer / StringBuilder 메서드

•  append( ) : 문자열 끝에 매개값을 추가

•  insert( 인덱스, 문자 ) : 특정 인덱스에 매개 문자를 추가 

•  delete( 시작인덱스, 끝인덱스 ) : 시작인덱스 문자부터 끝인덱스 문자까지 삭제

•  reverse( ) : 문자열의 순서가 뒤바뀜

StringBuffer sb = new StringBuffer( "Hello World" );

System.out.println( sb );

sb.append( "Nice" );
System.out.println( sb );

sb.insert( 3, "추가" );
System.out.println( sb );

sb.delete(0, 4);
System.out.println( sb );

sb.reverse();
System.out.println( sb );

결과값

 

 

 

예제 ) 문자열 입력받고 맨 앞글자 대문자로 변환해서 출력 ( 절차적 프로그래밍)

 

args[ ]를 사용하여, 문자열을 입력받고 향상된 for문과 substring( ) 메서드를 사용한것이 핵심이다.

public class Study {

	public static void main( String[] args ) {
    
    	// 입력값 검사
    	if( args.length != 1 ) {
        	System.out.println( "1개를 입력하세요" );
        } else {
        	System.out.println( "정상" );
        }
        
        String strName = args[0];				// args[0]에 "hong gil dong" 이 들어간다.
        String[] names = strName.split( " " );
        
        /*
        디버깅
        for( String name : name ) {
        	System.out.println( name );
        }
        */
        
        String result = "";
        // substring(1)은 문자열 위치 1부터 끝까지 의미한다.
        for( String name : names ) {
        	result += name.substring( 0, 1 ).toUpperCase() + name.substring(1) + " ";
        }
        
        // trim() : 양쪽 공백을 없앤다.
        System.out.println( "결과 : " + result.trim() );
    }
}

결과값

 

 

예제 ) 문자열 입력받고 맨 앞글자 대문자로 변환해서 출력 ( 구조적 프로그래밍 )

public class Study {

	public static String capitalizeName( String strName ) {
    	
        String[] names = strName.split(" ");

        String result = "";
        
        for( String name : names ) {
            result += name.substring( 0 , 1 ).toUpperCase() + name.substring(1) + " ";
        }
        return result.trim();
    }

    public static void main( String[] args ) {
        if ( args.length != 1 ) {
            System.out.println( "1개를 입력하세요" );
        } else {
            System.out.println( "정상" );

            String result = Study.capitalizeName( args[0] );
            System.out.println( "결과 : " + result );
        }

    }
}

 

 

예제 ) 문자열 입력받고 맨 앞글자 대문자로 변환해서 출력 ( 객체 지향 프로그래밍 )

//클래스
public class Study {
    
    public String capitalizeName( String strName ) {
        String[] names = strName.split(" ");

        String result = "";
        for( String name: names ) {
            result += name.substring( 0,1 ).toUpperCase() + name.substring(1)+" ";
        }
        return result.trim();
    }
}
//메인클래스

public class Main {
    public static void main( String[] args ) {
        if( args.length != 1 ) {
            System.out.println( "1개를 입력하세요" );
        } else {
            System.out.println( "정상" );

            Study su = new Study();
            String result = su.capitalizeName( args[0] );
            System.out.println( "결과 : " + result );
        }
    }
}

 


 

Math 클래스

 

 

▶  Math 메서드

public class Math {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		// 올림 / 내림/ 반올림
		System.out.println( Math.ceil( 10.3 ) );
		System.out.println( Math.ceil( 10.6 ) );
		System.out.println( Math.ceil( 10.7 ) );
		
		System.out.println( Math.floor( 10.3 ) );
		System.out.println( Math.floor( 10.6 ) );
		System.out.println( Math.floor( 10.7 ) );
		
		System.out.println( Math.round( 10.3 ) );
		System.out.println( Math.round( 10.6 ) );
		System.out.println( Math.round( 10.7 ) );
        
		// 지수 처리
		System.out.println( Math.pow( 10, 2 ) );
		System.out.println( Math.pow( 2, 2 ) );
		
		// 최대값, 최소값
		System.out.println( Math.max( 10, 5 ) );
		System.out.println( Math.min( 10, 5 ) );
        
		// 0 <= x < 1 랜덤값 표현
		System.out.println( Math.random() );
		System.out.println( Math.random() );
		
		// 0<= x < 9까지의 정수를 추출하는 방법
		System.out.println( (int)(Math.random() * 10) );
		
		// lotto 번호 추출
		System.out.println( (int)(Math.random() * 45) + 1 );
	}
}

결과값

 

 

예제 ) Math 클래스 이용해서 Lotto 6개 5세트 출력

public class Lotto {

	public static void main(String[] args) {

		// lotto 6개씩 5세트 출력되는 형태 만들기
		
		for( int i=1; i<=5; i++ ) {
			for( int j=1; j<=6; j++ ) {
				System.out.print( (int)(Math.random() * 45) + 1 + "\t" );
			}
			System.out.println();
		}
	}
}

결과값

 


 

Wrapper 클래스

 

•  기본자료형을 객체로 감싼다. ( 기본타입의 값을 내부에 두고 포장한다. )

•  포장하고 있는 기본타입 값은 외부에서 변경할 수 없다. 만약, 내부의 값을 변경하고 싶다면 새로운 포장 객체를 만들어야 한다.

•  객체와 일반변수를 왕래 할 수 있는 것이 Wrapper 클래스이다.

 

 

▶  boxing / autoboxing

auto boxing은 생산자 안에 값을 집어넣지 않고 바로 객체변수에 값을 넣는 것을 의미한다.

원래)

Integer i1 = new Integer( 123 );

auto boxing )

Integer i2 = 123;

 

 

Wrapper 예 )

 

public class Wrapper {

	public static void main( String[] args ) {
    
		// Wrapper - Integer 중심으로
		// deprecated 표시
		Integer il = new Integer( 10 );
		Integer i2 = new Integer( "10" );
		
		Integer i3 = Integer.valueOf( 10 );
		// autoboxing
		Integer i5 = 10;
		
		// runtime error
		// Integer i6 = Integer.valueOf(  "a10" );
		
		byte b = il.byteValue();
		System.out.println( b );
		float f = il.floatValue();
		System.out.println( f );
		
		// 문자열 -> 숫자
		Integer i4 = Integer.valueOf( "10" );
		int i11 = i4;
		
		int i12 = Integer.parseInt( "10" );
		System.out.println( i12 + 10 );
    }
}

결과값

 

 

Wrapper 예 )

public class Wrapper {

	public static void main( String[] args ) {
    
		Integer i1 = Integer.valueOf( 10 );
		// autoboxing
		Integer i2 = 30;

		// unboxing
		int sum = i1 + i2;
		System.out.println( sum );
        
    }
}

결과값

 


 

System 클래스

 

•  자바프로그램은 운영체제상에서 바로 실행 X , JVM 위에서 실행된다.

•  JVM을 강제로 끝내거나 조작할 때, 자바의 java.lang패키지의 System클래스를 이용하여 가능하다.

•  프로그램 종류 / 키보드로부터 입력 / 모니터로 출력 / 메모리 정리 / 현재시간 읽기  등이 가능하다.

•  System 클래스의 모든 필드와 메서드는 정적필드와 정적메서드로 구성되어 있다.

 

 

▶ exit( ) 메서드

public class System {

	public static void main( String[] args ) {
    
		System.out.println( "시작" );
        
		if( args.length != 1 ) {
			System.out.println( "[에러] 1개를 입력하셔야 합니다." );
			
			// exti() 메서드
			System.exit(0);
		}
			
		System.out.println( "정상 실행" );
		System.out.println( "끝" );
    }
}

 

 

▶  현재시간 읽기( currentTimeMillis( ) 메서드 / nanoTime( ) 메서드 )

public class System {

	public static void main( String[] args ) {
    
		long time1 = System.currentTimeMillis();
		
		int sum = 0;
		for( int i=0; i<1_000_000; i++ ) {
			sum += i;
		}
		
		long time2 = System.currentTimeMillis();
		System.out.println( "실행 시간 : " + ( time2 - time1) );
    }
}

결과값

 

 

▶  getProperty( ) 메서드 / getenv( ) 메서드

public class System {

	public static void main( string[] args ) {
    
		// 환경설정
		System.out.println( System.getProperty( "os.name") );
		System.out.println( System.getProperty( "user.name") );
		System.out.println( System.getProperty( "user.home") );
		
		// 시스템 환경변수
		System.out.println( System.getenv( "PATH") );
		System.out.println( System.getenv( "JAVA_HOME") );
    }
}

결과값

 

 

▶  배열복사 ( 참조복사 / 값 복사 )

public class System {

	public static void main( String[] args ) {
    	
    	int[] arr = { 1, 2, 3, 4, 5 };
        
        // 초기화 X , 선언만
        // 지역변수는 반드시 초기화해야 쓸수 있기 때문이다.
        int[] dest1 = null;
        
        // 얕은 복사 ( = 참조값 복사 )
        dest 1 = arr;
        System.out.println( arr[0] );
        System.out.println( dest1[0] );
        
        dest1[0] = 10;
        System.out.println( arr[0] );
        System.out.println( dest1[0] );
        
        // 깊은복사( = 값복사 , 부분복사 허용 )
        int[] dest2 = { 0, 0, 0, 0, 0 };
        System.arraycopy( arr, 0, dest2, 0, arr.length );
        System.out.println( arr[0] );
        System.out.println( dest2[0] );
        
        dest2[0] = 10;
        System.out.println( arr[0] );
        System.out.println( dest2[0] );
    }
}

결과값

 

 

 

반응형
Comments