일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- BufferedReader
- JavaScript
- select
- select문
- Java
- 자바스크립트
- 예외처리
- 프로그래머스 SQL
- 웹개발
- Git
- where
- StringBuilder
- 스프링
- 백엔드
- html
- 리눅스
- 자바
- github
- order by
- SQL
- MySQL
- 입출력
- sql문
- 개발자
- String클래스
- 정보처리기사필기요약
- DML
- 프로그래밍
- 프론트엔드
- 데이터 조회
- 백준
- 알고리즘
- mybatis
- 프로그래머스 sql 고득점 kit
- 형변환
- Linux
- 클래스
- 정보처리기사
- 메서드
- scanner
- Today
- Total
ToBe끝판왕
[ JAVA ] java.lang 패키지( String 클래스 / StringBuffer 클래스 / Math 클래스 / Wrapper 클래스 / System 클래스 ) 본문
[ 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] );
}
}
'■ 프로그래밍 SKILLS > JAVA' 카테고리의 다른 글
[ JAVA ] 타입 변환과 다형성 , 중첩클래스 , 익명구현객체 , 예외 (0) | 2022.05.27 |
---|---|
[ JAVA ] java.util 패키지( Date 클래스 / Calendar 클래스 / Random 클래스 / StringTokenizer 클래스 / Scanner 클래스 / Stringjoiner 클래스 ) , 추상클래스 , 인터페이스 (0) | 2022.05.26 |
[ JAVA ] java.lang 패키지( Object 클래스 , String 클래스 ) (0) | 2022.05.25 |
[ JAVA ] 인터페이스( Interface ) (0) | 2022.05.24 |
[ JAVA ] 추상클래스 (0) | 2022.05.24 |