4️⃣ 인스턴스화를 막으려거든 private 생성자를 사용하라 💁🏻♀️ 언제 인스턴스화를 막아야 하나요? static 필드와 메서드만을 담은 클래스를 만들고 싶을 때 (ex. java.lang.Math, java.lang.Arrays, java.lang.Collections) → 이런 클래스를 utility 클래스라함 final 클래스와 관련된 메서드들을 모아놓을 때 🔎 생성자를 private으로 하지 않는다면? 생성자를 명시하지 않으면 컴파일러가 자동으로 기본 생성자를 만들어줌 → 실수로라도 인스턴스가 만들어질 가능성⭕ (API 사용자는 이게 자동으로 만들어진 기본 생성자인지, 개발자가 의도한 기본 생성자인지 구분할 수 없음!) public class UtilityClass { // 기본 생성자 방지..

https://www.acmicpc.net/problem/11726 11726번: 2×n 타일링 2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다. www.acmicpc.net 0️⃣ 문제 2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다. 입력 첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000) 출력 첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다. 1️⃣ 어떻게 문제를 풀까? 즉 간단한 점화식으로 풀 수 있음 1) 첫번째 풀이 ..
https://www.acmicpc.net/problem/10971 10971번: 외판원 순회 2 첫째 줄에 도시의 수 N이 주어진다. (2 ≤ N ≤ 10) 다음 N개의 줄에는 비용 행렬이 주어진다. 각 행렬의 성분은 1,000,000 이하의 양의 정수이며, 갈 수 없는 경우는 0이 주어진다. W[i][j]는 도시 i에서 j www.acmicpc.net 0️⃣ 문제 외판원 순회 문제는 영어로 Traveling Salesman problem (TSP) 라고 불리는 문제로 computer science 분야에서 가장 중요하게 취급되는 문제 중 하나이다. 여러 가지 변종 문제가 있으나, 여기서는 가장 일반적인 형태의 문제를 살펴보자. 1번부터 N번까지 번호가 매겨져 있는 도시들이 있고, 도시들 사이에는 길이..
3️⃣ private 생성자나 열거 타입으로 싱글턴임을 보증하라 💁🏻♀️ 싱글턴? 💡 인스턴스를 오직 하나만 생성할 수 있는 클래스 (ex. 함수, 무상태 객체, 설계상 유일해야 하는 시스템 컴포넌트) ➕ 클래스가 하나의 인스턴트만 갖는다는 것을 보증 (싱글턴 설계를 잘 했을 경우) ➕ 이 인스턴스에 대한 전역 접근 지점을 얻음 ➕ 싱글턴 객체는 처음 요청될 때만 초기화 ➖ 단일 책임 원칙 위반 (자신의 생성에 대한 책임 + 원래 그 클래스가 해야 하는 기능에 대한 책임) ➖ 잘못된 디자인을 가릴 수 있음 ➖ 다중 스레드 환경에서 여러 스레드가 싱글턴 객체를 여러 번 생성하지 않도록 특별한 처리가 필요 ➖ 싱글턴 객체를 사용하는 클라이언트를 테스트하기 어려워짐 (보통 Mock(가짜) 객체들을 생성할 때..

📌 목차 1️⃣ 의존 관계 2️⃣ 의존 역전 3️⃣ 의존 주입 패턴 4️⃣ 의존성을 주입 해주는 주체 1️⃣ 의존 관계 💁🏻♀️ 의존이 뭔데? 💡 한쪽(B)의 변경사항이 다른 한쪽(A)에도 영향을 미칠 때, A는 B에 의존한다고 말함 🔎 의존 관계가 형성되는 경우 : 어떤 클래스가 다른 클래스(or 인터페이스)를 사용할 때 (1) 다른 클래스의 레퍼런스 변수를 사용하는 경우 (ex. B b;) public class A { private B b; } (2) 다른 클래스의 인스턴스를 생성하는 경우 (ex. new B()) public class A { private InterfaceB b = new B(); // B는 InterfaceB 인터페이스를 구현 } (3) 다른 클래스를 상속받는 경우 publi..
📌 목차 1️⃣ if문 제거하기 2️⃣ getter와 setter 3️⃣ stream API 4️⃣ stream API와 Optional 1️⃣ if문 제거하기 ❗ 너무 많은 if문은 코드 가독성을 해침 → 수정, 디버깅이 어려워짐 👩🏻🏫 중구난방 IF문 개선해보자! CalculateType calculateType = calculateCommand.getCalculateType(); int num1 = calculateCommand.getNum1(); int num2 = calculateCommand.getNum2(); int result = 0; if(calculateType != null && calculateType.equals(CalculateType.ADD)) { result = num1 +..
2️⃣ 생성자에 매개변수가 많다면 빌더를 고려하라 ❗ 객체를 생성할 때 사용하는 (1) 생성자와 (2) 정적 팩터리 메서드는 매개변수가 많을 때 대응하기 어렵다. (예시) 아래와 같이 필드를 가진 User 클래스가 있다고 해보자. 회원가입할 때 사용자는 필수값인 [닉네임 + 비밀번호 + 이메일]과 함께 여러 선택정보를 등록할 수 있다. 즉, 회원가입 요청에는 수많은 경우의 수가 올 수 있다! 그리고 그 우린 수많은 경우의 수에 대응해야 된다.. public class User { // NonNull Fields private String nickname; private String password; private String email; // Nullable private Image profileImag..

https://www.acmicpc.net/problem/4963 4963번: 섬의 개수 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 지도의 너비 w와 높이 h가 주어진다. w와 h는 50보다 작거나 같은 양의 정수이다. 둘째 줄부터 h개 줄에는 지도 www.acmicpc.net 0️⃣ 문제 정사각형으로 이루어져 있는 섬과 바다 지도가 주어진다. 섬의 개수를 세는 프로그램을 작성하시오. 한 정사각형과 가로, 세로 또는 대각선으로 연결되어 있는 사각형은 걸어갈 수 있는 사각형이다. 두 정사각형이 같은 섬에 있으려면, 한 정사각형에서 다른 정사각형으로 걸어서 갈 수 있는 경로가 있어야 한다. 지도는 바다로 둘러싸여 있으며, 지도 밖으로 나갈 수 없다. 입력 입력은 여러 ..