Java 언어에서 배열 arr의 모든 요소를 표시하기 위해서는 다음과 같이 for문을 사용합니다. for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } for문의 변수 i를 통해 배열 arr의 요소에 접근할 수 있습니다. Iterator 패턴은 이런 변수 i의 기능을 추상화해서 일반화 한 것 입니다.Iterator 패턴의 구성은 아래와 같습니다.Iterator(반복자)요소를 순서대로 검색해가는 인터페이스(API) 입니다. 다음 요소가 존재하는지를 얻기 위한 hasNext 메서드와 다음 요소를 얻기 위한 next 메서드를 결정합니다.ConcreteIterator(반복자 구현체)Iterator 인터페이스의 구현체 입니다.Aggregate(..
이 글은 4 Types of Memory Leaks in JavaScript and How to Get Rid Of Them를 번역한 글입니다. 번역 문서를 읽는 중, 오타나 어색한 문장이 있으면 부담없이 댓글 부탁드립니다. 이번 글에서 클라이언트단 JavaScript 코드의 일반적인 메모리 누수 유형에 대해 살펴보겠습니다. 또한 크롬 개발 도구(Chrome DevTools)를 사용하여 메모리 누수를 찾는 방법에 대해서도 알아보겠습니다. Introduction 메모리 누수(Memory leaks)는 모든 개발자들이 직면하는 문제입니다. 심지어 메모리를 관리해주는 프로그래밍 언어(Java, C# 등)를 사용하는 경우에도 메모리 누수 문제에서 벗어날 수 없습니다. 메모리 누수는 어플리케이션의 속도 저하, 충..
이펙티브 자바 Effective Java 2/E국내도서저자 : 조슈아 블로크(Joshua Bloch) / 이병준역출판 : 인사이트 2014.09.01상세보기 자바 플랫폼에는 작명 관습(naming convention)이 잘 정립되어 있으며, 그 중 상당수는 자바 언어 명세(The Java Language Specification)에도 언급되어 있다. 간단하게 말해서 자바의 작명 관습은 두 가지 범주로 나눌 수 있다. 철자에 관한 것이 하나고, 문법에 관한 것이 하나다.철자에 관계된 작명 관습은 패키지, 클래스, 인터페이스, 메서드, 필드 그리고 자료형 변수에 관한 것으로, 그 양이 얼마 되지 않는다. 아주 그럴듯한 이유가 없이 이 규칙을 어겨서는 안된다.패키지 이름은 마침표를 구분점으로 사용하는 계층적 ..
이펙티브 자바 Effective Java 2/E국내도서저자 : 조슈아 블로크(Joshua Bloch) / 이병준역출판 : 인사이트 2014.09.01상세보기 모든 프로그래머가 알아둬야 하는 최적화 관련 격언이 세 가지 있다. 너무 많이 봐서 질릴 정도라는 분도 있겠으나, 아직 본 적이 없다면 지금 읽어보자. 맹목적인 어리석음(blind stupidity)을 비롯한 다른 어떤 이유보다도, 효율성이라는 이름으로 저질러지는 죄악이 더 많다(효율성을 반드시 성취하는 것도 아니면서 말이다). - 윌리엄 울프(William A. Wulf) 작은 효율성(small effiency)에 대해서는, 말하자면 97% 정도에 대해서는, 잊어버려라. 섣부른 최적화는 모든 악의 근원이다. - 도널드 커누스(Donald E. Kn..
이펙티브 자바 Effective Java 2/E국내도서저자 : 조슈아 블로크(Joshua Bloch) / 이병준역출판 : 인사이트 2014.09.01상세보기 자바의 네이티브 인터페이스(Java native interface, JNI)는 C나 C++ 등의 native programming language로 작성된 native method를 호출하는 데 이용되는 기능이다. 네이티브 메서드가 수행하는 임의의 계산은 네이티브 언어로 실행되며, 자바 언어로 전달된다.전통적으로 네이티브 메서드는 세 가지 용도로 쓰였다. 네이티브 메서드를 사용하면 레지스트리(registry)나 파일 락(file lock) 같은 특정 플랫폼에 고유한 기능을 이용할 수 있다.또한 이미 구현되어 있는 라이브러리를 이용할 수 있으며, 그 ..
이펙티브 자바 Effective Java 2/E국내도서저자 : 조슈아 블로크(Joshua Bloch) / 이병준역출판 : 인사이트 2014.09.01상세보기 java.lang.reflect의 핵심 리플렉션 기능(core reflection facility)을 이용하면 메모리에 적재된 클래스의 정보를 가져오는 프로그램을 작성할 수 있다. 하지만 이런 능력에는 대가가 따른다. 컴파일 시점에 자료형을 검사함으로써 얻을 수 있는 이점들을 포기해야 한다(exception checking 포함). 리플렉션을 통해 존재하지 않는, 또는 접근할 수 없는 메서드를 호출하면 실행 도중에 오류가 발생할 것이다. 그러니 특별히 주의해야 한다. 리플레션 기능을 이용하는 코드는 보기 싫은데다 장황하다. 영리한 코드와는 거리가 멀..
이펙티브 자바 Effective Java 2/E국내도서저자 : 조슈아 블로크(Joshua Bloch) / 이병준역출판 : 인사이트 2014.09.01상세보기 만일 적당한 인터페이스 자료형이 있다면 인자나 반환값, 변수 그리고 필드의 자료형은 클래스 대신 인터페이스로 선언하자. 아래와 같은 타이핑하는 습관을 들이는 것이 좋다. // 인터페이스를 자료형으로 사용하고 있는 바람직한 예제 List subscribers = new Vector(); // 클래스를 자료형으로 사용하는 나쁜 예제 Vector subscribers = new Vector(); 인터페이스를 자료형으로 쓰는 습관을 들이면 프로그램은 더욱 유연해진다. 가령 성능 개선, 기능 추가 등의 이유로 객체의 실제 구현을 다른 것으로 바꿀 때 유연하게..
이펙티브 자바 Effective Java 2/E국내도서저자 : 조슈아 블로크(Joshua Bloch) / 이병준역출판 : 인사이트 2014.09.01상세보기 문자열 연결(concatenation) 연산자 +는 여러 문자열을 하나로 합하는 편리한 수단이다. 하지만 n개의 문자열에 연결 연산자를 반복 적용해서 연결하는데 드는 시간은 n^2에 비례한다. public String statement() { String result = ""; for (int i = 0; i < numItems(); i++) { result += lineForItem(i); // String concatenation } return result; } 만족스런 성능을 얻으려면 String 대신 StringBuiler를 써야된다. pu..