전체 글 573

[Effective Java] 3.private 생성자나 열거 타입으로 싱글턴임을 보증하라

싱글턴이란 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말한다. 스프링에서 빈을 관리하는 방식이 싱글턴이다. 그런데 클래스를 싱글턴으로 만들면 이를 사용하는 클라이언트가 테스트하기가 어려워질 수 있다. 타입을 인터페이스로 정의한 다음 그 인터페이스를 구현해서 만든 싱글턴이 아니라면 싱글턴 인스턴스를 가짜(mock) 구현으로 대체할 수 없기 때문이다. 싱글턴을 만드는 방식을 보통 둘 중 하나이다. 두 방식 모두 생성자는 private으로 감춰두고 유일한 인스턴스에 접근할 수 있는 수단으로 public static 멤버를 하나 마련해둔다. 우선 public static 멤버가 final 필드인 방식을 살펴보자. // 코드 3-1 public static final 필드 방식의 싱글턴 (23쪽) publi..

Book/Effective Java 2022.06.03

[Effective Java] 2. 생성자에 매개변수가 많다변 빌더를 고려하라

정적 팩터리와 생성자에는 똑같은 제약이 하나 있다. 선택적 매개변수가 많을 때 적절히 대응하기 어렵다는 점이다. 점층적으로 생성자 패턴을 쓸 수는 있지만 매개변수의 갯수가 많아지면 많아질수록 코드를 작성하거나 읽기가 어렵다. 이렇게 선택 매개변수가 많을 때 활용할 수 있는 방법 중 하나로 자바빈즈 패턴이 있다. 매개변수가 없는 생성자로 객체를 만든 후 setter 메서드를 호출해서 값을 설정하는 방식이다. 하지만 이 방식도 객체 하나를 만드려면 메서드를 여러개 호출해야 하고 객체가 완전히 생성되기 전까지는 일관성이 무너진다. 이처럼 일관성이 무너지는 문제 때문에 자바빈즈 패턴에서는 클래스를 불변(아이템 17)으로 만들 수 없으며 스레드 안정성을 얻으려면 프로그래머가 추가 작업을 해줘야만 한다. 이러한 단..

Book/Effective Java 2022.06.03

[Effective Java] 1.생성자 대신 정적 팩터리 메서드를 고려하라

예전에 읽다가 난이도가 높아서 미뤄두고 다른 공부했는데 눈으로만 읽으면 그냥 넘어가게 되는 부분이 있는 것 같아서 다시 읽고 아이템 별로 글을 작성하려한다. 완벽하게 익히려면 여러번 읽어야겠지만 이해가 닿는데까지 이해하고 일단 1회독을 목표로 하자. 클라이언트가 클래스의 인스턴스를 얻는 전통적인 수단은 public 생성자다. 생성자와 별도로 정적 팩터리 메서드를 제공할 수 있다고 한다. 이 방식은 장점과 단점이 모두 존재하는데, 장점/단점을 알아보면 왜 사용하는지 답이 나오겠다. 장점 1. 이름을 가질 수 있다. 생성자에 넘기는 매개변수와 생성자 자체로는 반환될 객체의 특성을 제대로 설명하지 못한다. 예를들어 생성자인 BigInteger(int, int, Random)과 정적 팩터리 메서드인 BigInt..

Book/Effective Java 2022.06.03

ZOAC 3

📍 문제 설명 https://www.acmicpc.net/problem/20436 20436번: ZOAC 3 첫 번째 줄에는 두 알파벳 소문자 sL, sR이 주어진다. sL, sR은 각각 왼손 검지손가락, 오른손 검지손가락의 처음 위치이다. 그 다음 줄에는 알파벳 소문자로 구성된 문자열이 주어진다. 문자열의 www.acmicpc.net 💡 접근 꽤나 시간을 많이 쏟은 문제였다... 1.오른쪽/왼쪽으로 나눌 수 있는 부분으로 나누어 맵에 담았는데 오른쪽 부분을 담을 때 처음에 좌표값을 제대로 넣지 못했었다. 2.여러 케이스에 대해서는 통과를 했는데 다른 케이스에서 해당 객체에 대한 값 참조를 제대로 하지 못하는 경우가 있었던 것 같다..? 아래 때문에 에러났던게 아니고 값만 리턴하고 출력은 따로 안해줘서 ..

Algorithm/baekjoon 2022.05.07

오리

📍 문제 설명 https://www.acmicpc.net/problem/12933 12933번: 오리 첫째 줄에 영선이가 녹음한 소리가 주어진다. 소리의 길이는 5보다 크거나 같고, 2500보다 작거나 같은 자연수이고, 'q','u','a','c','k'로만 이루어져 있다. www.acmicpc.net 💡 접근 각 인덱스에서 울고 있는 오리의 울음소리를 최대한 구한다음 다음 인덱스로 넘어가면 최소 오리 수가 나온다. 울음소리가 아닌 경우는 울음소리의 길이가 1.5의 배수가 아니거나 2.'q'로 시작하지않거나 3.1회전 후 idx가 0이 아닐 때 이다. 👩‍💻 코드 import java.io.*; import java.util.*; public class Main { public int solution(S..

Algorithm/baekjoon 2022.05.04

[2022 카카오 블라인드]주차 요금 계산

📍 문제 설명 https://programmers.co.kr/learn/courses/30/lessons/92341 코딩테스트 연습 - 주차 요금 계산 [180, 5000, 10, 600] ["05:34 5961 IN", "06:00 0000 IN", "06:34 0000 OUT", "07:59 5961 OUT", "07:59 0148 IN", "18:59 0000 IN", "19:09 0148 OUT", "22:59 5961 IN", "23:00 5961 OUT"] [14600, 34400, 5000] programmers.co.kr 💡 접근 차 번호순으로 정렬 시킨다음 차번호, 주차시간으로 맵에 담아서 주차요금을 계산했다. 마지막 테스트케스트가 계속 틀렸다고 나와서 해당 부분은 다른 자료를 참고했다...

[2022 카카오 블라인드]k진수에서 소수 개수 구하기

📍 문제 설명 https://programmers.co.kr/learn/courses/30/lessons/92335 코딩테스트 연습 - k진수에서 소수 개수 구하기 문제 설명 양의 정수 n이 주어집니다. 이 숫자를 k진수로 바꿨을 때, 변환된 수 안에 아래 조건에 맞는 소수(Prime number)가 몇 개인지 알아보려 합니다. 0P0처럼 소수 양쪽에 0이 있는 경우 P0처럼 소 programmers.co.kr 💡 접근 진수 변환 후 소수 판별하여 answer를 증가시켜주면 되는 문제였다. String의 범위가 int 범위를 넘을 수 있으니 long으로 받았다. 👩‍💻 코드 import java.io.*; public class Solution { public int solution(int n, int ..