본문 바로가기

전체 글163

array partition https://leetcode.com/problems/array-partition/ LeetCode - The World's Leading Online Programming Learning Platform Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com Given an integer array nums of 2n integers, group these integers into n pairs (a1, b1), (a2, b2), ..., (an, bn) such that the su.. 2023. 9. 30.
개인 프로젝트 플랜잇 2일차 오늘 한 일 1. DB 구조 설계 및 ERD 생성 2023. 9. 26.
개인 프로젝트 플랜잇 1일차 오늘 한 일 1. 프로젝트 시작 2. DB 구조 설계 시작 2023. 9. 25.
item 3 아이템 3. 생성자가 열거 타입으로 싱글턴임을 보증하라. 방법 1. private 생성자 + public static final 필드 public class Elvis { /** * 싱글톤 오브젝트 */ public static final Elvis INSTANCE = new Elvis(); private Elvis() {} public void leaveTheBuilding() { System.out.println("Whoa baby, I'm otta here!"); } public void sing() { System.out.println("I'll have a blue~ Christmas without you~"); } } 이 방식의 장점이라면 굉장히 간결하고, 싱글턴임을 API에 드러낼 수 있다... 2023. 9. 21.
item 2 아이템 2. 생성자에 매개변수가 많다면 빌더를 고려하라. 대안 1. 점층적 생성자 패턴 또는 생성자 체이닝 public class NutritionFacts { private int servingSize; //필수 private int servings; //필수 private int calories; //옵션 private int fat; //옵션 private int sodium; //옵션 private int carbohydrate; //옵션 public NutritionFacts(int servingSize, int servings) { this.servingSize = servingSize; this.servings = servings; this.calories = 0; this.fat = 0; .. 2023. 9. 21.
item 1 아이템 1. 생성자 대신 정적 팩터리 메서드를 고려하라. 장점 1 이름을 가질 수 있다. public class Order { private Product product; private boolean prime; private boolean urgent; **public Order(Product product, boolean prime) { this.product = product; this.prime = prime; }** **public Order(Product product, boolean urgent) { this.product = product; this.urgent= urgent; }** } 위의 예시는 Order에 대한 두개의 생성자를 가지고 있다. 하나는 prime한 order, 또 하나는.. 2023. 9. 9.
리팩터링 4 4장 테스트 구축하기 리팩터링만으로는 부족하다. 뒷받침 해줄 테스트가 없다면 불가피하게 저지르는 실수를 잡아줄 수 없다. 4.1 자가 테스트 코드의 가치 테스트가 잘 확립되어 있으면 생산성이 급상승 한다. 테스트를 작성하기 가장 좋은 시점은 프로그래밍 시작 전이다. 테스트를 작성하면서 원하는 기능을 추가하기 위해 무엇이 필요한지 고민하게 되어 구현보다는 인터페이스에 집중하게 된다. 테스트를 모두 통과한 시점이 개발 완료 시점임을 확실히 할 수 있다. 4.2 테스트할 샘플 코드 4.3 첫 번째 테스트 import org.junit.Test; import static org.junit.Assert.*; public class ProvinceTest { @Test public void testShortfall.. 2023. 8. 31.
리팩터링 3 코드에서 나는 악취 3.1 기이한 이름 코드를 간단명료하게 표현하는 데 가장 중요한 요소 하나는 바로 ‘이름’이다. 이름을 명확하게 지어 각각이 무슨 일을 하고 어떻게 사용해야 하는지 알 수 있어야 한다. 만약 마땅한 이름이 떠오르지 않는다면 설계에 더 근본적인 문제가 숨어 있을 가능성이 높다. 혼란스러운 이름을 정리하다 보면 코드가 훨씬 간결해질 때가 많다. 3.2 중복 코드 중복 코드는 서로 미묘한 차이점은 없는지 세심하게 확인해야 하고 그 중 하나에 변화가 생기면 다른 비슷한 코드들 역시 세심하게 살펴보고 적절히 수정해야 한다. 3.3 긴 함수 오랜 기간 잘 활용되는 코드는 짧은 함수로 구성되어 있다. 코드가 끝없이 위임하는 방식으로 작성되면 코드를 이해하고, 공유하고, 선택하기 쉬워진다. 짧은 함.. 2023. 8. 31.
리팩터링 2 2장 리팩터링 원칙 리팩터링 전반에 적용되는 원칙 몇 가지를 알아봅시다. 2.1 리팩터링 정의 동사 명사 둘 다 결국 겉보기 동작은 그대로 유지한 채, 코드를 이해하고 수정하기 쉽도록 특정한 방식에 따라 내부 구조를 변경하는 것이다. 리팩터링하는 동안에는 코드가 항상 정상 작동하기 때문에 전체 리팩터링이 끝나지 않았더라도 언제든 멈출 수 있다. 리팩터링 전 후로 코드가 똑같이 동작해야 하는데 이는 항상 똑같을 수는 없다. 가령 함수 추출하기 를 사용하면 콜스택이 달라져 성능이 변할 수 있다. 하지만 사용자 관점에서는 달려져서는 안된다. 함수 선언 바꾸기 혹은 함수 옮기기 같은 리팩터링을 하면 모듈의 인터페이스가 바뀔 수 있다. 심지어 리팩터링 과정에서 발견된 버그는 리팩터링 후에도 남아 있어야 한다. (.. 2023. 8. 31.
728x90