3월, 2015의 게시물 표시

Java-String, StringBuffer

1. 둘다 문자 배열(char[]) 2. 배열의 크기를 늘리려면 새로운 배열을 생성해야함 3. String은 문자열 결합이 일어날때마다 항상 새로운 배열을 만들고 복사하는 과정을 거침 4. 3번의 과정은 여유 크기의 배열(StringBuffer)의 내용을 변경하는 것과 성능 차이가 있음 5. 너무 여유있게 생성하면 메모리 낭비(StringBuffer의 단점) 6. 5번을 생각하여 너무 작게 잡으면 의미 없음(그래도 String보다는 나음) 7. StringBuffer가 더 빠름.(이유 : 3번 배열의 특징) 8. String + 연산을 컴파일러가 StringBuffer로 변환함 9. 8번 컴파일러의 변환에는 한계가 있음 10. 결론은 왠만하면 String 사용(자동 변환되니까…)하고 성능상 문제가 되는 경우에 StringBuffer를 이용하여 최적화해야함 참고 - 네이버 자바초보스터디 카페

Java-Vector, ArrayList, Object[], HashMap, TreeMap의 비교 선택

1. 성능의 관점이되는 3가지 - 저장시간(insert time) - 검색시간(seek time) - 읽는시간(read time) ** 각 컬렉션 클래스들은 위의 3가지에 대해 장단점이 있음 2. Hash계열(Hashtable, HashMap)이 검색이 제일 빠른대신 저장시간이 오래걸림.(전화번호부, 주소록 같이 검색이 주로 되는 곳에 유리) 3. TreeMap과 같은 Sorted계열은 저장시간은 Hash계열보다 빠르고, 검색시간은 Hash계열보다 느림(균형잡힌 성능) TreeMap은 정렬된 상태로 데이터를 저장하기 때문에, 범위검색(Range Search)기능 제공함 4. 검색없이 데이터를 저장/읽기 하는 경우 Vector와 ArrayList를 사용(ArrayList가 조금 빠름) 5. 최적화가 필요하면 Object배열을 구현(4번의 2개도 최적화는 잘되어 있음) 6. 구현하려는 기능의 동기화, 저장시간, 검색시간을 잘 고려하여 선택하여야 함 참고 - 네이버 자바초보스터디 카페

Java-Inner Class

종류 특징 instance class 1. 외부 클래스의 멤버변수 선언위치에 선언 2. 외부 클래스의 인스턴스멤버처럼 다루어짐 3. 주로 외부 클래스의 인스턴스멤버들과 관련된 작업에 사용될 목적으로 선언 static class 1. 외부 클래스의 멤버변수 선언위치에 선언 2. 외부 클래스의 static멤버처럼 사용됨 3. 주로 외부 클래스의 static멤버, static 메서드에서 사용될 목적으로 선언 local class 1. 외부 클래스의 메서드나 초기화블럭 안에 선언 2. 선언된 영역 내부에서만 사용 anonymous class 1. 클래스의 선언과 객체의 생성을 동시에 하는 이름없는 클래스 // 외부 클래스 class Outer { // 내부 클래스 class Inner { int iv = 100; } // 스태틱 내부 클래스 static class StaticInner { int iv = 200; } // 외부 클래스의 멤버변수 int value = 10; // 내부 클래스2 class Inner2 { // 내부 클래스2 멤버변수 int value = 20; // 내부 클래스2 함수 void method1() { // 함수의 지역변수 int value = 30; System.out.println(value); System.out.println(this.value); System.out.println(Outer.this.value); } } } public class ExampleInnerClass { ...