String을 사용하여 String과 String을 더하여 연결하는 방식은
메모리 할당과 해제를 발생시키기 때문에, 성능적으로 좋다고 볼 수 없다.
String str1 = "Hello";
str1 = str1 + " java";
System.out.println(str1);
다음과 같은 문장을 실행하면 두 개의 String 객체가 생성됨을 의미한다.
개체의 생성은 다른 작업들 보다 시간이 더 많이 소요되기 때문에 위와 같이 문자열을 연결하는 방식은 비효율적이다.
이와 같은 상황을 극복하기 위한 것이 String Builder 이다.
StringBuilder str1 = new StringBuilder("Hello");
str1.append(" java");
System.out.println(str1);
//여기선 의미 없지만, str1.toString(); 도 사용 가능
str1.append(" and ").append(program1.getLanguage);
//program1.language가 python이라고 가정할떄
//이와 같은 상황에서 유용하게 사용할 수 있다.
StringBuffer 또한 동기화 된다는 점을 제외하고 StringBuilder와 동일한 메서드를 가지기 때문에, 일반 문자열을 대체하려면 StringBuilder를 사용하는 것을 권장하고, 스레드 안전성이 필요한 경우라면 StringBuffer사용을 고려하는 것을 권장한다
프로그래머가 매개변수화된 코드를 작성할 수 있도록 하는 Java 프로그래밍 언어의 기능
- 장점 1 : 캐스팅을 사용할 필요가 없어진다.
- 장점 2 : Stronger type checks at compile time (컴파일 타임에 더 강력한 검사 가능)
//제네릭 없이 컬렉션 사용하기
List listpet = new ArrayList();
listpet.add("고양이");
String pet_name1 = (String) listpet.get(0); //고양이가 들어감
Date nowDate = new Date();
listpet.add(nowDate); //Date 형의 nowDate를 넣음
String pet_name2 = (String) listpet.get(1); //캐스팅이 가능할까?
//제네릭을 사용하여 다시 구현
List<String> listpet = new ArrayList<String>();
listpat.add("고양이");
Date nowDate = new Date();
listpet.add(nowDate);