- String

String은 객체 자료형이나 그 선언및 사용에 있어서 아래와 같이 기본자료형 처럼 사용한다.
String string = "Helloworld~";

객체 자료형 임에도 뒤에 생성자(new)를 붙이지 않고 기초데이터를 만들 때 처럼 초기화 하고 있다.
이유는 아마도 많이 쓰이는 객체라서 편하게 사용하라고 이렇게 만든 것 같다.


그래서 아래 두 경우 모두 사용할 수 있다.
String string = "HelloWorld~";
String string = new String("HellowWorld~~");

 

 

다음은 주요 String관련 메소드들의 실행결과이다.


String str1 = "abcdefg";
String str2 = "HIJKLMN";
String str3 = "opqrstu";

System.out.println(str1.concat(str2));  // abcdefgHIJKLMN
System.out.println(str1.substring(3));  // defg
System.out.println(str1.length());      // 7
System.out.println(str1.toUpperCase()); // ABCDEFG
System.out.println(str2.toLowerCase()); // hijklmn
System.out.println(str1.charAt(3));     // d
System.out.println(str1.indexOf('c'));  // 2

String str4="abcdefg";
System.out.println(str1.equals(str4));  // true

string str5="abc def ghi";
System.out.println(str5.trim());        // abcdefghi

System.out.println(str1.replace('a','Z')); // Zbcdefg
System.out.println(str1.replaceAll('abcd','ZZZZZ')); // ZZZZZefg
System.out.println(str1);               // abcdefg

- String의 문제점

메모리 과소비


예를들어
String str1 = "ABC"
str1에 "DEF" 문자열을 더 붙이는 경우
기존에 str1이 가리키고 있던 메모리 주소값에 있는 "ABC"에 + "DEF"를 갖다 붙이는게 아니라

메모리 주소를 새로 따서 "ABCDEF"를 저장하고 , 기존에 "ABC"값을 가지고 있던 메모리 주소는 무시한다. 무시된 메모리는 가비지콜렉터가 나중에 회수를 진행하지만, 회수 되기 전까지는 메모리가 사용되고 있으므로 회수전까지는 메모리가 불필요하게 소비되는것이다.

그래서 String클래스의 대안으로 StringBuffer와 StringBuilder가 등장했다.

- StringBuilder

StringBuilder와 StringBuffer는 제공하는 메서드들도 같으며 String과 달리 메모리에 값을 append하는 방식으로 동작 또한 동일하다. 

 

한 가지 중요한 차이점이 있는데,

멀티 스레드 환경에서 StringBuilder클래스는 여러 스레드들이 접근 가능하고

StringBuffer클래스는 멀티스레드 환경에서 더 안전하다고 한다. 

StringBuffer는 동기화를 처리해주지만, StringBuilder는 동기화를 처리해주지 않는다는 것이다.

 

다음은 주요 StringBuffer, StringBuilder관련 메소드들의 실행결과이다.


StringBuilder str1 = new StringBuilder("abcdefg");

str1.append("hijklmn"); // abcdefghijklmn
str1.insert(3, "AAA");  // abcAAAdefghijklmn
str1.delete(3, 5);      // abcAdefghijklmn  (3번째 자리에서 5번째 자리 앞까지 지워라)
str1.deleteCharAt(10);  // abcAdefghiklmn

 


날짜(Calendar) API

날짜와 시간을 표현할 때 많이 쓰이는 Calendar클래스이다.


Calendar calendar = Calendar.getInstance();
// 위 calendar 객체를 뽑아내는것을 보면 싱글턴 패턴으로 짜여진 것을 예상할 수 있다.
// new를 이용하는 객체생성없이 getInstance를 이용해 객체 변수를 뽑아내고 있다.

int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1; //월은 0부터 시작하므로 1을 더해줘야 함
int day = calendar.get(Calendar.DAY_OF_MONTH);
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);

System.out.println(year+"년 " + month + "월 " + day + "일");
System.out.println(hour+"시 " + minute + "분 " + second + "초");

 

+ Recent posts