본문 바로가기

반응형

IT

[Effective Java] Item 2 생성자에 매개변수가 많다면 빌더를 고려하라 Item 2 생성자에 매개변수가 많다면 빌더를 고려하라 정적 팩토리와 public 생성자에는 선택적 매개변수가 많은 경우 대응하기 어렵다는 문제점이 있다. 정적 팩토리나 생성자는 3가지 패턴으로 정의할 수 있다. 1) 점층적 생성자 패턴 2) 자바 빈즈 패턴 3) 빌더 패턴 1) 점층적 생성자 패턴 public 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; //선택 pu.. 더보기
[Effective Java] Item 1 생성자 대신 정적 팩토리 메서드를 고려하라 Item 1 생성자 대신 정적 팩토리 메서드를 고려하라 클래스의 인스턴스를 얻는 기본적인 방법은 public 생성자이다. 하지만 public 생성자 대신 정적 팩터리 메서드를 사용함으로써 많은 장점을 얻을 수 있다. 장점 1 이름을 가질 수 있다. -> 일반적인 public 생성자를 사용할 경우 해당 클래스의 이름밖에 사용할 수 없지만, 정적 팩터리 메서드를 사용하면 호출하고자 하는 객체마다 이름을 정할 수 있기에 반환되는 객체의 역할을 정확히 파악할 수 있다. 예를 들어 1. 일반 public 생성자 public BigInteger (int bitLength, Random rnd) { if (bitLength < 2) throw new ArithmeticException("bitLength < 2");.. 더보기
JPA 웹 어플리케이션 개발 웹 애플리케이션 만들기 진행 순서 - 프로젝트 환경설정 (프로젝트 구조, 메이븐과 라이브러리 설정, 스프링 프레임워크 설정) - 도메인 모델과 테이블 설계 - 애플이케이션 기능 구현 프로젝트 환경설정 [JPA 사용을 위한 예외적인 설정] 1. 트랙잭션 관리자를 DatasourceTransactionManager가 아닌 JpaTransactionManager로 등록해야 됨 (JPA + JdbcTeplate + Mybatis 함께 사용가능) 2. JPA 예외를 스프링 프레임워크가 추상화한 예외로 변환하는 AOP 적용 3. 스프링 프레임워크에서 JPA를 사용하려면 스프링 프레임워크가 제공하는 엔티티 매니저 팩토리를 등록해야 됨 org.hibernate.dialect.H2Dialect true true true.. 더보기
주식 가격 (스택&큐) 문제 설명 초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요. 제한사항 prices의 각 가격은 1 이상 10,000 이하인 자연수입니다. prices의 길이는 2 이상 100,000 이하입니다. 입출력 예 pricesreturn [1, 2, 3, 2, 3] [4, 3, 1, 1, 0] 입출력 예 설명 1초 시점의 ₩1은 끝까지 가격이 떨어지지 않았습니다. 2초 시점의 ₩2은 끝까지 가격이 떨어지지 않았습니다. 3초 시점의 ₩3은 1초뒤에 가격이 떨어집니다. 따라서 1초간 가격이 떨어지지 않은 것으로 봅니다. 4초 시점의 ₩2은 1초간 가격이 떨어지지 않았습니다. 5초 시점의 ₩3은 .. 더보기
다리를 지나는 트럭문제 (스택 & 큐) 트럭 여러 대가 강을 가로지르는 일 차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 트럭은 1초에 1만큼 움직이며, 다리 길이는 bridge_length이고 다리는 무게 weight까지 견딥니다. ※ 트럭이 다리에 완전히 오르지 않은 경우, 이 트럭의 무게는 고려하지 않습니다. 예를 들어, 길이가 2이고 10kg 무게를 견디는 다리가 있습니다. 무게가 [7, 4, 5, 6]kg인 트럭이 순서대로 최단 시간 안에 다리를 건너려면 다음과 같이 건너야 합니다. 경과 시간다리를 지난 트럭다리를 건너는 트럭대기 트럭 0 [] [] [7,4,5,6] 1~2 [] [7] [4,5,6] 3 [7] [4] [5,6] 4 [7] [4,5] [6] 5 [7,4.. 더보기
Spring 기본개념 스프링 기본 개념 - 스프링의 탄생 배경 : 기존의 EJB의 사용이 무겁고, 활용성이 떨어지는 이슈로 인해 POJO인 자바기반 스프링 프레임워크가 탄생하게 되었음 스프링은 인터페이스화된 부품들을 컨테이너(IOC)에서 생성 및 조립(DI)하는 것 의미함 - 특징 : 스프링 = DI(의존성 주입) + IOC(제어의 역전) + AOP(관점지향프로그램) 1) DI = 한 클래스에서 다른 클래스를 호출하는 식으로 서로 의존성을 맺는걸 의미한다. 1.직접 생성 (Java) - autowired, inject 2. Setter를 이용한 생성 3. Contructor를 이용한 생성 > 2, 3번처럼 IOC 컨테이너에 등록된 Bean 객체를 호출하여 주입할 수 있음 (= 외부에서 의존성 주입 가능) 2) IOC = 메소.. 더보기
Chapter 8 컬렉션 API 개선 Arrays.asList() 팩토리 메서드를 통해 리스트를 생성할 수 있다. List friends = Arrays.asList("Raphael", "Olivia", "Thibaut"); 단, 고정 크기의 리스트를 생성했기에 요소 추가, 삭제가 불가능하다. 만약 friends.add("test")로 추가할 경우 UnsupportedOperationException 예외가 발생한다. 이처럼 자바 9에서 작은 리스트, 집합, 맵을 쉽게 만들 수 있도록 팩토리 메서드를 제공한다. 1) 리스트 팩토리 - List.of (크기 변경 불가능) List friends = List.of("Raphael", "Olivia", "Thibaut"); 2) 집합 팩토리 - Set.of (크기 변경 불가능) Set friend.. 더보기
Chapter 7 병렬 데이터 처리와 성능 스트림으로 데이터 컬렉션 관련 동작을 손쉽게 병렬 처리할 수 있다. 병렬 스트림 병렬 스트림은 각각의 스레드에서 처리할 수 있도록 스트림 요소를 여러 청크로 분할한 스트림이다. ParallelStream을 호출하여 병렬 스트림을 생성할 수 있다. 순차 스트림을 병렬 스트림으로 변환하기 (ParallelStream 적용) @Test @Description("1~n까지 숫자의 합을 구하기(직렬 & 병렬)") void parallelStreamTest7_1() throws Exception{ // given int n = 100; Long sequentialResult = Stream.iterate(1L, i->i+1) .limit(n) .reduce(0L, Long::sum); // when Long par.. 더보기

반응형