생성자 인자가 많을 때는 Builder패턴 적용을 고려하자 생성자와 Static 팩토리 메소드는 같은 문제를 가지고 있다. 선택적 인자가 많은 상황에 잘 적응하지 못한다는 것이다.이런 상황에 어떤 생성자나 정적 팩터리 메서드가 적합할지 고민을 한다. 1.점층적 생성자 패턴(telescoping constructor)필수 인자만 받는 생성자를 하나 정의하고, 선택적 인자를 하나 받는생성자를 추가하고, 거기에 두 개의 선택적 인자를 받는 생성자를 추가하는 방식이다.public class NutritionFacts { private final int servingSize; //필수 private final int servings; //필수 private final int calories; //선택 privat..
static과 final의 사용 방법 final은 상속불가 또는 변할수 없는 상수 선언에 사용되고,static은 공용의 변수를 만들때 사용되는 예약어 이다. 1.static-인스턴스 변수는 하나의 클래스로 부터 생성되었더라도 각기 다른 값을 유지하지만, 클래스변수(static 멤버변수)인스턴스에 관계 없이 같은 값을 갖는다. 하나의 변수는 모든 인스턴스가 공유하기 때문이다. -멤버변수(클래스 변수는 인스턴스를 생성하지 않고 사용가능하다. 클래스명.static변수명 이런식으로 접근가능) -메서드(인스턴스를 생성하지 않고도 호출이 가능한 static메서드가 된다. 단 static 메서드 내에서는 인스턴스 멤버 들을 직접 사용할수 없다.) -static이 선언된 메소드는 오버라이딩 되지 않고 메소드 숨김이 일..
자바7 출시가 점점 앞으로 다가오는데, 마음에 드는 자바7의 몇 가지 특징들은 다음과 같다. try-with-resources멀티캐치(multicatch) switch-case에 문자열 지원 Fork/JoinECC 암호화 기능 제공 try-with-resources 이용 자원 해제 자동 처리 사실 이거 진작에 필요했던거다. 뭔가 자원을 생성하고 사용하고 해제하는 코드는 항상 다음과 같이 구조가 중복되는 코드를 작성해야 했다. finally 블록의 자원 해제 코드 정말 하는 거 없이 여러 줄 차지한다. SomeResource resource = null; try { resource = getResource(); use(resource); } catch(...) { ... } finally { if (res..
java8이전에 FunctionalInterface와 람다표현식을 배웠다. 아직 못봤거나 까먹었다면 여기에가서 다시 보자!StreamStream 에는 많은 기능이 있다. 다 설명할 수는 없지만 중요한 몇가지를 공부해보겠다. 자바의 컬렉션들은 Stream을 사용 할 수 있다. 혹은 스트림을 만들 수 있다. 흔히 쓰는 List를 예로 들어 공부해보겠다. 그전에 알아두어야 할 용어가 있다. Intermediate Operation Method 와 Terminal Operation Method이다. Intermediate Operation Method는 중간단계로써 스트림을 리턴하기 때문에 계속 Method Chaining 통해 지시 할 수 있다. 그리고 Terminal Operation Method는 스트림을..
java8자바8의 새롭게 바뀐 부분이 많지만 그 중 내가 자주 쓰는걸 정리 해보겠다.@FunctionalInterface첫 번째로 @FunctionalInterface 인터페이스다. 람다를 쓰긴 위한 애노테이션이다. 만약 저 애노테이션이 붙은거라면 람다 표현식을 사용 할 수 있다. 하지만 명시적으로 지정 하지 않더라도 abstract 메소드가 한개라면 람바 표현식을 사용 할 수 있다. 만약 저 애노테이션을 사용한다면 abstract 메소드가 2개 이상 있을경우 컴파일 타임에 에러가 난다. 자바 기본 패키지에 있는 Function이라는 인터페이스다.@FunctionalInterface public interface Function { R apply(T t); //... } 한번 커스텀한 interface를..
jvm 메모리jvm에서 메모리 영역인 런타임 데이터 영역의 구조를 그림으로 그리면 다음과 같다.크게 3부분으로 나눠진다. 1. 메소드 영역(클래스 영역)필드나 메서드의 메타데이터 저장static 변수, 메소드 저장바이트 코드 저장상수 풀(Constant Pool)2. 스택 영역Last In First Out(LIFO)메서드 호출 시마다 각각의 프레임 생성메서드 안에서 사용되어지는 값들을 저장호출된 메서드의 매개변수, 지역변수, 리턴 값 및 연산 시 일어나는 값들을 임시로 저장 메서드 수행이 끝나면 프레임별로 삭제3. 힙 영역new 연산자로 생성된 객체와 배열을 저장하는 공간클래스 영역에 로드된 클래스만 생성가능GC를 통해 메모리 반환출처 : http://wonwoo.ml/index.php/post/cat..
가비지 컬렉션(이하 GC)GC 의 과정GC에 대해서 알아보기전 알아야 용어가 있다. 바로 stop-the-world이다. stop-the-world란 GC를 실행하기 위해 JVM이 어플리케이션 실행을 멈추는 것이다. stop-the-world가 발생하면 GC를 실행하는 쓰레드를 제외한 나머지 쓰레드는 모두 작업을 멈춘다. 대게의 경우 GC 튜닝이란 이 stop-the-world 시간을 줄이는 것이다.자바는 프로그램 코드에서 메모리를 명시적으로 해제하지 않는다. 가끔 명시적으로 해제하려고 해당 객체를 null로 지정하거나 System.gc() 메서드를 호출하는 개발자가 있다. null로 지정하는 것은 큰 문제가 안되지만 System.gc() 메서드를 호출하는 것은 시스템의 성능에 큰 영향을 끼치므로 자제 ..