Post

자바기초 정리


String


java String 선언 시 두가지 방법이 존재
String str = new String();
String srt = "value";

첫번째 방법은 String 자료형이 heap에 할당됨.
두번째 방법은 String 값이 string constant pool이라는 영역에 할당된다. 만약 이미 선언되어있다면 그 값을 가져온다.
메모리를 아끼려면 2번째 방법(String 리터널) 방법으로 사용하는게 좋을 듯..

StringBuffer 


문자열을 추가하거나 변경할 때 주로 사용한다.
String과 다른 점은 String은 문자열 연산 시 객체 생성을 하지만 StringBuffer는 한번만 객체 생성이 된다.
또 String 보다 메모리 사용량도 많고 속도도 느다고 한다.
(일단 같은 문자열을 length() 함수로 출력했을 때 메모리는 같았다.)


String, StringBuffer, StringBuilder의 차이점


String은 메모리공간이 변하지 않는다. 그래서 문자열을 붙이면, 그 문자열을 참조한다. 그래서 문자열 연산이 많을 경우 성능이 좋지 않다.
StringBuffer, StringBuilder는 문자열 연산이 있을 때 크기를 변경해 문자열을 변경한다. 그래서 연산이 많을 때 사용하면 좋다.
둘의 차이점은 StringBuffer는 동기화를 지원하지만 StringBuilder는 멀티스레드 환경에서 사용하면 위험하다.

문자열 연산 시 StringBuffer가 더 효과있는지 확인하기 위해 테스트해보았다.
테스트 결과 문자열 연산 시 StringBuffer가 String보다 5배 더 빨랐다.

package Example;
import java.text.SimpleDateFormat;
public class HelloWorld {
       public static void main(String args[])
       {
              String str = new String("Hello Java");
              String nowTime = getCurrentTime("YYYY.MM.DD. HH:mm:ssSSS");
              for(int i = 0; i < 10000; ++i)
              {
                     System.out.println(str+" Hello Java");
              }
              String nowTime2 = getCurrentTime("YYYY.MM.DD. HH:mm:ssSSS");
              
                           
              StringBuffer strBuf = new StringBuffer("Hello Java");
              String nowTime3 = getCurrentTime("YYYY.MM.DD. HH:mm:ssSSS");
                           
              for(int i = 0; i < 10000; ++i)
              {
                     System.out.println("strBuf"+"Hello Java");
              }
              String nowTime4 = getCurrentTime("YYYY.MM.DD. HH:mm:ssSSS");
              
              System.out.println("1:" + nowTime);
              System.out.println("2:" + nowTime2);
              System.out.println("3:" + nowTime3);
              System.out.println("4:" + nowTime4);
       }
       
       public static String getCurrentTime(String timeFormat)
       {
              return new SimpleDateFormat(timeFormat).format(System.currentTimeMillis());
       }
}

ArrayList


배열은 크기가 고정이지만 List는 가변이다.
원래는 Generics(<>)를 사용하지 않아 item들이 Object로 인식되어 잘못된 형변환을 하는 경우가 있었다.
현재는 자료형을 명확히 적어주기 때문에 형변환에 의한 오류가 없어졌다.

package Example;
import java.util.ArrayList;
public class HelloWorld {
       public static void main(String args[])
       {
              ArrayList<Integer> arrList = new ArrayList();
              arrList.add(2);
              arrList.add(1);
              arrList.add(4);
              arrList.add(3);
              System.out.println(arrList);
              System.out.println(arrList.get(2));             // 2번째 요소 선택(4)
              System.out.println(arrList.size());             // 크기 출력(4)
              arrList.remove(2);                                     // 2번째 요소 삭제
              System.out.println(arrList);                    // 다시 출력
                           
       }
       
}

▲ top