본문 바로가기

전체 글221

[Effective Java 3/E] 아이템4. 인스턴스화를 막으려거든 private 생성자를 사용하라 단순히 정적 메서드와 정적 필드만을 담은 클래스를 만들어야 할 때가 있다. 예를 들어 java.lang.Math, java.util.Arrays와 같이 기본 타입 값이나 배열 관련 메서드들을 모아둘 때 java.util.Collections처럼 특정 인터페이스를 구현하는 객체를 생성해주는 정적 메서드(혹은 팩터리)를 모아 놓을 때. -> 자바 8부터는 인터페이스에 넣을 수 있다. final 클래스와 관련한 메서드들을 모아놓을 때(final 클래스를 상속할 수 없기 때문에) 문제점 예시와 같이 정적 멤버만을 가지고있는 유틸리티 클래스는 인스턴스로 만들어 사용하려고 설계한 클래스가 아니다. 생성자를 명시하지 않으면 컴파일러가 매개변수가 없는 public 생성자를 자동으로 생성해주기 때문에, 인스턴스화가 가능.. 2021. 5. 25.
[알고리즘] 3-5 연속된 자연수의 합 - two pointers 알고리즘(인프런 자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비 강의) 인프런의 자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비 강의를 수강하며 간략한 문제 설명, 예습 풀이 코드, 강의에서 설명하는 풀이 코드를 정리하고 있습니다. 문제 링크 : https://cote.inflearn.com/contest/10/problem/03-05 문제 설명 : n입력으로 양의 정수 n이 입력되면 2개 이상의 연속된 자연수의 합으로 정수n을 표현하는 방법의 가짓수를 출력하는 문제 예습 풀이 two pointers 알고리즘 사용 반복문의 종료 조건 : 2개의 수가 연속될 때 합이 n보다 큰 경우 package inflearn.tow_pointers_sliding_window; import java.io.BufferedReader; import java.io.IOException; i.. 2021. 5. 25.
[알고리즘] 3-4 연속 부분수열 - two pointers 알고리즘(인프런 자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비 강의) 인프런의 자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비 강의를 수강하며 간략한 문제 설명, 예습 풀이 코드, 강의에서 설명하는 풀이 코드를 정리하고 있습니다. 문제 링크 : https://cote.inflearn.com/contest/10/problem/03-04 문제 설명 : n개의 수로 이루어진 수열이 주어졌을때, 연속부분수열의 합이 숫자 m이 되는 경우가 몇 번인지 구하는 문제 예습 풀이 Two pointers 알고리즘을 사용하여 풀이 중복되는 코드가 신경 쓰인다 package inflearn.tow_pointers_sliding_window; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStre.. 2021. 5. 25.
[Effective Java 3/E] 아이템3. private 생성자나 열거 타입으로 싱글턴임을 보증하라 싱글턴이란? 싱글턴(Singleton) 이란 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말한다. 클래스를 싱글턴으로 만들면 이를 사용하는 클라이언트를 테스트하기 어려워질 수 있다. 인터페이스를 구현한 싱글턴이 아니라면 Mock 구현으로 대체할 수 없기 때문에 싱글턴 생성 방식 1. public static final 필드 private 생성자는 public static final 필드인 Elvis.INSTANCE를 초기화할 때 딱 한번 호출 예외 : 권한이 있는 클라이언트는 리플렉션 API인 AccessibleObject.setAccessible을 사용해 private 생성자를 호출할 수 있다. 생성자에서 두번째 객체가 생성되려 할 때 예외를 던지게 하면 이러한 공격을 방어할 수 있다. public.. 2021. 5. 24.
[알고리즘] 3-3 최대 매출 - sliding window 알고리즘(인프런 자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비 강의) 인프런의 자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비 강의를 수강하며 간략한 문제 설명, 예습 풀이 코드, 강의에서 설명하는 풀이 코드를 정리하고 있습니다. 문제 링크 : https://cote.inflearn.com/contest/10/problem/03-03 문제 설명 : N일 동안의 제과점 일매출 기록에서 연속된 K일 동안의 최대 매출액이 얼마인지 구하는 문제 예습 풀이 단순하게 이중 for 문을 사용하여 풀이 package inflearn.tow_pointers_sliding_window; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.St.. 2021. 5. 23.