본문 바로가기

728x90
반응형

분류 전체보기

(222)
[이펙티브자바] 아이템4. 인스턴스화를 막으려면 private을 강제하라 정적메서드와 정적 필드만을 담은 클래스를 만들고 싶을 때가 있다. 예를 들면 java.lang.Math, java.util.Arrays와 같은 기본 타입의 값이나 배열 관련 메서드를 모아놓을 수 있다. java.util.Collections처럼 특정 인터페이스를 구현하는 객체를 생성해주는 정적 메서드를 모아놓을 수도 있다. 컴파일러는 생성자를 명시하지 않으면 public 생성자를 만들어준다. 의도하지 않아도 인스턴스화할 수 있게 된다. public class UtilClass { public static String getName() { return "heypli"; } public static void main(String[] args) { UtilClass utilClass = new UtilClas..
[이펙티브자바] 아이템3. private생성자나 열거타입으로 싱글턴 보증 싱글턴 인스턴스를 오직 하나만 생성할 수 있는 클래스. 클라이언트를 테스트 하기 어려워질 수 있다. 싱글턴을 만드는 방법은 두 가지가 있는데 두 가지 모두 생성자는 private으로 감춰두고 static멤버를 이용해서 인스턴스에 접근할 수 있다. 첫 번째 싱글턴 생성방법 public class Elvis { public static final Elvis INSTANCE = new Elvis(); private Elvis(){ } public void leaTheBuild() {} } private 생성자는 Elvis.INSTANCE를 초기화할 때 한 번만 호출된다. 그런데 리플렉션 API AccessibleOjbect.setAccessible을 사용해 생성자를 호출 할 수 있다. // 기존에 static..
[이펙티브자바] 아이템2. 생성자에 매개변수가 많다면 빌더를 고려하라 정적 팩터리와 생성자는 선택적 매개변수가 많으면 대응하기 어렵다. 영양 정보를 제공하는 클래스이다. 점층적 생성자 패턴 - 확장이 어려움 pubic class NutritionFacts { private final int servingSize; private final int servings; private final int calories; private final int fat; private final int sodium; private final int carbohydrate; public NutritionFacts(int servingSize, int servings) { this(servingSize, servings, 0); } public NutritionFacts(int servingSi..
[이펙티브자바] 아이템1. 생성자 대신 정적 팩터리 메서드를 고려해야하는 이유 public static Boolean valueOf(boolean b) { return b? Boolean.TRUE : Boolean.FALSE; } 클래스는 정적팩터리 메서드를 제공 할 수 있는데 위 예제는 메서드의 기본타입인 boolean을 받아서 Boolean객체 참조로 변환해준다. 클래스는 public 생성자 대신 정적 팩터리 메서드를 제공할 수 있다. 장점과 단점을 알아본다. 정적 팩터리 메소드 장점 첫 번째, 이름을 가질 수 있다. 생성자에 넘기는 매새변수와 생성자 자체만으로는 반환될 객체의 특성을 제대로 설명하지 못한다. 정적 팩터리 메서드는 이름을 잘 지으면 반환될 객체의 특성을 잘 묘사할 수 있다. ex) BigInteger(int, int, Random) vs BigInteger.pr..
JAVA GC가 발생하는 시기(Garbage Collector) JAVA GC? java에서 메모리는 GC가 관리하기 때문에 개발자가 따로 메모리를 관리하는 로직을 넣을 필요가 없다. (만들어서는 안된다) Garbage Collector 쓰레기를 정리하는 작업으로 자바에서 쓰레기는 객체를 의미한다. 객체가 메모리를 점유하고, 필요가 없으면 메모리에서 해제되어야 한다. JAVA Runtime Data Area 프로그램이 실행되면 JVM은 OS로 부터 필요한 메모리를 할당받은 후 용도에 따라 여러 영역으로 나눈다. 자바 컴파일러(javac)가 소스코드(java)를 읽어서 바이트 코드로 변환한다.(.class) 그리고 클래스로더를 통해 JVM으로 로딩하는데 로딩된 class파일들은 실행엔진을 통해 해석된다. 해석된 바이트코드는 Runtime Data Area에 배치되어 수..
Spring Boot2 Swagger 사용 Gradle 설정 추가 // swagger implementation 'io.springfox:springfox-swagger2:3.0.0' implementation 'io.springfox:springfox-swagger-ui:2.9.2' SwaggerConfig.java @Configuration @EnableSwagger2 public class SwaggerConfig { @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.any()) .paths(PathSelectors.ant("/order")) .buil..
JAVA enum vs static 비교 enum이란? 비단 자바에만 있는 개념은 아니고 다른 언어에서도 볼 수 있는 형식이다. 열거형이라 불리며 요소, 멤버라 명명된 값의 집합을 이루는 자료형으로 열거자 이름들은 해당언어의 상수 역할을 하는 식별자이다. (출처 : 위키백과) enum의 장점 코드가 단순해지며 가독성이 좋다. 인스턴스 생성, 상속을 방지하며 상수값의 타입 안전성이 보장된다. enum이라는 키워드로 열거형의 의도를 명확히 드러낸다. enum이 나온 배경 1. 코드에 주석이 없을 경우 코드를 이해하기 어려움 int type = 1; if(type == 1) { System.out.println("boy"); } else { System.out.println("girl"); } type에 대한 주석이나 if문 안에서 처리하는 내용에 ..
Spring restTemplate Connection pool 사용 ResteTemplate? 스프링3.0부터 제공하는 HTTP 요청을 수행하는 Synchronous 클라이언트. JDK HttpURLConnection, Apache HttpComponents 등과 같은 기본 HTTP 클라이언트 라이브러리를 통한 템플릿 메소드 API. 스프링 5부터는 maintenance 모드로 WebClint 사용을 지향한다. RestTemplate은 기존에 HttpClient를 추상화해서 제공한다. HttpClient를 사용했을 때 빈번하게 발생하는 코드 중복 혹은 응답 컨텐츠 관리에 좋다. 기본적으로 RestTemplate은 커넥션풀을 사용하지 않는다. 커넥션을 맺고 닫을 때 SimpleClientHttpRequestFactory(HttpUrlConnection래핑)를 사용한다. 대..

728x90
반응형