4. 객체 생성을 막을 때는 private 생성자를 사용하라 정적 메소드나 필드를 모아놓고 사용하는 유틸리티 클래스의 경우는 객체를 만들 목적의 클래스가 아니다 - 대표적으로 java.lang.Math, java.util.Arrays, java.util.Collections 객체를 만들 생각이 없다고 생성자를 만들지 않으면.. 객체 생성을 막을 수 있는 것이 아니라 디폴트 생성자가 만들어진다. * 디폴트 생성자: 객체가 생성될 때 사용자가 초깃값을 명시하지 않으면 컴파일러가 자동으로 생성해주는 생성자 - NoArgsConstructor와 같음 클래스를 abstract로 추상 클래스로 만든다고 해도 소용없다. -> 하위 클래스를 정의하면 객체 생성이 가능해지기 때문. 그럼 어떻게? => private 생성..
3. private 생성자나 enum 자료형은 싱글톤 패턴을 따르도록 해라 (중요) 여기서의 싱글톤 패턴은 스프링 컨테이너에 의해 관리되는 싱글톤이 아니기에, 안티패턴의 문제점을 갖고있는 싱글톤임을 참고!! # 싱글톤 패턴이 안티패턴으로 불리는 이유 ========= 1. private 생성자를 갖고있어 상속 불가 2. 테스트 하기 어려움 (목 객체로 대체할 수 없음) 3. 객체지향의 의도와 전혀 맞지않음 => 위 문제점들은 스프링에서는 "스프링 컨테이너"의 활약으로 모두 해결된다 ========================================== 싱글톤은 생성자를 private로 선언해두고, 싱글톤 객체는 정적 팩토리 메서드( getInstance() )를 이용하거나, 정적 필드를 통해 얻어오..
2. 생성자 인자가 많을때는 빌더 패턴 생성자에 들어가는 파라미터 개수가 많을 경우 사용해볼만한 패턴은 다음과 같다 1. 점층적 생성자 패턴 - 필수 인자만 받는 생성자 하나 정의 - 그 이후부터 선택적 인자를 추가해가면서 생성자를 계속 쌓아나가는 방식 - 각 파라미터가 무슨 값인지 의미를 알기 어렵고, 자료형이 같은 인자들끼리 순서를 잘못 넣어 문제를 일으킬 가능성이 상당히 높다. 2. 자바빈 패턴 - 일단 인자 없는 생성자(NoArgsConstructor)를 호출해서 빈 객체를 만듬 - 그 다음에 setter 프로퍼티를 이용해서 값을 하나하나 채워주는 방식 - 1회의 함수 호출로 객체 생성을 끝낼 수 없으므로, 객체의 일관성이 일시적으로 깨질 수 있다. - 변경 불가능(immutable)한 클래스를 ..
1. 생성자 대신 정적 팩토리 메서드를 사용할 수 없는지 생각해보자 일반적으로 클래스를 통해 객체를 만드는 것은 public으로 선언된 생성자(Constructor)로 이뤄진다. 하지만 이외에도 방법이 하나 더 있는데, 바로 public으로 선언된 정적 팩토리 메소드(static factory method)를 사용하는 것. 1. 이름이 있다. - 생성자 메서드의 이름은 클래스 이름으로 고정되기 때문에 이름 그 자체로 의미를 주기 어렵고, 생성자에 전달되는 파라미터만으로는 어떤 객체가 생성되는지를 설명할 수 없다. - 정적 팩토리 메서드는 이름만 잘 지으면 사용하기도 쉽고 코드의 가독성도 좋아진다. - 같은 시그니처(signature)를 갖는 생성자를 여러개 정의할 필요가 있을 때는 생성자를 사용하기보다는..
# 이 게시글은 "토비의 스프링" 책을 보고 정리를 위해 기록해둔 게시글입니다. [이전 글] 더보기 볶음밥 1장 - 1,2,3: 자바빈, 디자인 패턴(템플릿 메소드, 팩토리 메소드, 전략 패턴), 관심사의 분리, SOLID 및 객체지향 약간 볶음밥 1장 - 4,5,6: 제어의 역전, 프레임워크 vs 라이브러리, 스프링 IoC 및 용어 정리, 싱글톤, 동일성 vs 동등성, 빈의 스코프 볶음밥 1장 - 7: 의존관계 주입(DI), DL, IoC 볶음밥 2장: 테스트, TDD, jUnit 볶음밥 3장: 템플릿/콜백 볶음밥 4장: 예외 볶음밥 5장: 서비스 추상화, 테스트 대역 볶음밥 6장 - 1: AOP (1) 볶음밥 6장 - 2: AOP (2) 볶음밥 7장 [8장] 스프링이란 무엇인가? 무려 713페이지 동..
# 이 게시글은 "토비의 스프링" 책을 보고 정리를 위해 기록해둔 게시글입니다. [이전 글] 더보기 볶음밥 1장 - 1,2,3: 자바빈, 디자인 패턴(템플릿 메소드, 팩토리 메소드, 전략 패턴), 관심사의 분리, SOLID 및 객체지향 약간 볶음밥 1장 - 4,5,6: 제어의 역전, 프레임워크 vs 라이브러리, 스프링 IoC 및 용어 정리, 싱글톤, 동일성 vs 동등성, 빈의 스코프 볶음밥 1장 - 7: 의존관계 주입(DI), DL, IoC 볶음밥 2장: 테스트, TDD, jUnit 볶음밥 3장: 템플릿/콜백 볶음밥 4장: 예외 볶음밥 5장: 서비스 추상화, 테스트 대역 볶음밥 6장 - 1: AOP (1) 볶음밥 6장 - 2: AOP (2) [7장] 스프링 핵심기술의 응용 스프링의 3대 핵심기술인 IoC..
# 이 게시글은 "토비의 스프링" 책을 보고 정리를 위해 기록해둔 게시글입니다. [이전 글] 더보기 볶음밥 1장 - 1,2,3: 자바빈, 디자인 패턴(템플릿 메소드, 팩토리 메소드, 전략 패턴), 관심사의 분리, SOLID 및 객체지향 약간 볶음밥 1장 - 4,5,6: 제어의 역전, 프레임워크 vs 라이브러리, 스프링 IoC 및 용어 정리, 싱글톤, 동일성 vs 동등성, 빈의 스코프 볶음밥 1장 - 7: 의존관계 주입(DI), DL, IoC 볶음밥 2장: 테스트, TDD, jUnit 볶음밥 3장: 템플릿/콜백 볶음밥 4장: 예외 볶음밥 5장: 서비스 추상화, 테스트 대역 볶음밥 6장 - 1: AOP (1) [6.4] 스프링의 프록시 팩토리 빈 스프링은 프록시 기술에 대해서도 서비스 추상화를 적용해준다. ..
# 이 게시글은 "토비의 스프링" 책을 보고 정리를 위해 기록해둔 게시글입니다. [이전 글] 더보기 볶음밥 1장 - 1,2,3: 자바빈, 디자인 패턴(템플릿 메소드, 팩토리 메소드, 전략 패턴), 관심사의 분리, SOLID 및 객체지향 약간 볶음밥 1장 - 4,5,6: 제어의 역전, 프레임워크 vs 라이브러리, 스프링 IoC 및 용어 정리, 싱글톤, 동일성 vs 동등성, 빈의 스코프 볶음밥 1장 - 7: 의존관계 주입(DI), DL, IoC 볶음밥 2장: 테스트, TDD, jUnit 볶음밥 3장: 템플릿/콜백 볶음밥 4장: 예외 볶음밥 5장: 서비스 추상화, 테스트 대역 그 어렵다는 AOP.. 열심히 알아보자... [6장] AOP - AOP는 IoC/DI, 서비스 추상화와 더불어 스프링의 3대 기반 기술..