3. private 생성자나 열거 타입으로 싱글턴임을 보장하라.싱글턴인스턴스를 오직 하나만 생성할 수 있는 클래스ex ) 함수와 같은 무상태 객체, 설계상 유일해야하는 시스템 컴포넌트클래스를 싱글턴으로 만들면 클라이언트를 테스트하기 어렵다.싱글턴 인스턴스는 private 생성자를 가지므로 새로 생성하여 테스트할 수 없기 때문이다.실제 싱글턴 인스턴스에 접근하여 테스트할 경우 전역상태이므로 테스트 독립성을 깨뜨린다.인터페이스를 구현해 만든 싱글턴일 경우 테스트가 가능하다.현재는 static에 대해 mocking이 가능하지만 권장하지 않는다. 인터페이스를 통해 의존성을 주입하자. 인터페이스를 구현한 싱글턴// 인터페이스 정의public interface DatabaseConnection { void c..
2. 생성자에 매개변수가 많다면 빌더를 고려하라.정적 팩터리와 생성자는 선택적 매개변수가 많을 때 적절히 대응하기 어렵다.위 상황을 해결하기 위해 점층적 생성자 패턴, 자바빈즈 패턴, 빌더 패턴을 알아보자. 점층적 생성자 패턴// 코드 2-1 점층적 생성자 패턴 - 확장하기 어렵다! (14~15쪽) public class NutritionFacts { private final int servingSize; // (mL, 1회 제공량) 필수 private final int servings; // (회, 총 n회 제공량) 필수 private final int calories; // (1회 제공량당) 선택 private final int..
Item 1. 생성자 대신 정적 팩터리 메서드를 고려하라.정적 팩토리 메서드클래스의 인스턴스를 반환하는 정적 메서드클라이언트는 클래스의 인스턴스를 public 생성자로 얻는다.생성자와 별도로, 정적 팩터리 메서드를 제공하여 인스턴스를 반환할 수 있다.public class Car { private final String make; private final String model; private final int year; private final String color; private final boolean isElectric; // 생성자 public Car(String make, String model, int year, String color, boolean ..
Javajava는 단일 상속 방식의 객체 지향 언어이다.java의 메서드 안의 코드는 명령형(문장 지향) 방식으로 동작한다. 효과적인 java 코딩법?코드는 단순히 효과적으로 작동하고 다른 사람이 쉽게 이해할 수 있기만 하면 되는게 아니다.프로그램은 계속 수정할 수 있기 때문에, 구조가 수정하기 쉬워야한다.처음부터 기능 T가 어떻게 개선될지까지 고려해 구현 방식을 선택하는 것이 좋다.잘 작동하고, 다른 이가 쉽게 이해할 수 있고 미래의 수정과 개선 작업도 수월한 코드를 작성하는 것이 좋다.단순함이 쉬움을 뜻하지는 않는다.리팩토링의 핵심 목표는 시스템 구조 개선과 중복 제거이고, 이는 잘 설계된 API를 건너뛰고는 도달할 수 없다. 1장. 들어가기핵심 규칙 : 명료성과 단순성컴포넌트는 사용자를 놀라게 하는..
[우아한테크코스] 7기 백엔드 합격 후기우아한테크코스 7기에 합류하게 되었습니다!기대를 안했어서 그런지 더욱 기쁘네요!지원서 & 프리코스때 공부했던 키워드 & 최종 코딩테스트 준비하는 방법 및 팁을 정리해 보았습니다. 지원서 작성하기입학 설명회지원서를 쓰기 전 해당 기수의 입학 설명회를 보는 것을 추천드려요. 우테코 진행 방식, 어떤 가치를 중요시하는지, 코치분들이 이야기하시는 자기소개서 팁을 들을 수 있어요.2025년 7기 입학 설명회에서 강조했던 것은 "메타인지"에요.메타인지라는 개념이 잘 와닿지 않아서, 관련 책을 보며 제 방식대로 메타인지 개념을 정리해 보았어요.읽은 책 메타인지, 생각의 기술 - 예스24최고의 회사만 아는 메타인지의 힘메타인지가 업무 능력을 높이는 열쇠다!일 잘하는 사람의 특징은..
최종 코딩테스트 연습최종 코딩테스트를 앞두고 우테코 디스코드의 동물원 채널에서 친해진 분들과 함께 스터디를 진행했다. 최종 코딩테스트 3주 전부터 매주 2번, 5시간씩 실전과 동일한 환경에서 문제를 풀었고, 문제를 푼 후에는 대화형 코드리뷰를 통해 서로의 부족한 점을 채우고 피드백을 주고받으며 실력을 향상시켰다.github repository : https://github.com/wooteco7th-study/wooteco7th/pulls GitHub - wooteco7th-study/wooteco7thContribute to wooteco7th-study/wooteco7th development by creating an account on GitHub.github.com 또한 skillswap 스터디..
인터페이스, 추상 클래스, 합성 사용 시점인터페이스 사용 시점서로 독립적으로 존재하지만 공통된 행위(계약)을 가진 객체들에게 적합하다.상호작용하지 않는 객체부모가 아닌 구현체 둘이 함께 고려되어야 하는 상황이 거의 없다면 사용하자.구현체 둘이 함께 고려되어야한다면 합성 사용하기 크리스마스) 할인 정책// 증정 정책에 대한 공통 행위(규약)을 정의interface Gift { boolean isApplicable(); BigDecimal calculateAmount(); Map provideGiftItems(); String getName(); }class ChampagneGift implements Gift { priva..
상속과 다형성상속코드를 재사용하기 위해 가장 널리 사용되는 방법클래스 사이에 관계를 설정하는 것만으로도 기존 클래스가 가지고 있는 모든 속성과 행동을 새로운 클래스에 포함시킬 수 있다.부모 클래스가 제공하고 있는 모든 인터페이스를 자식 클래스가 물려받을 수 있다.자식 클래스는 부모 클래스가 수신할 수 있는 모든 메세지를 수신할 수 있기 때문에 외부 객체는 자식 클래스를 부모 클래스와 동일한 타입으로 간주할 수 있다.상속은 두 클래스의 인터페이스를 통일하기 위해 사용된 구현 방법동일한 인터페이스를 공유하는 클래스들을 하나의 타입 계층으로 묶는다.추가할 클래스가 기존의 어떤 클래스와 매우 흡사할 경우클래스의 코드를 재사용하는 방법 -> 상속업캐스팅 : 자식 클래스가 부모 클래스를 대신하는 것 구현 상속과 인..