본문 바로가기
반응형

생성자6

[엘레강트 오브젝트] 1.3 생성자에 코드를 넣지 마세요 이 내용은 엘레강트 오브젝트 를 읽으면서 정리한 내용을 포함하고 있습니다. 다음 목차로 진행합니다. 생성자의 역할 생성자의 코드가 없어야 하는 이유 생성자의 역할 생성자는 객체의 초기화를 시작하는 장소 초기화 시 생성자안에는 코드가 없어야 하고 인자를 건드려서는 안된다. 코드가 필요하다면 인자들을 다른 타입의 객체로 감싸거나 가공하지 않은 형식으로 캡슐화한다. 생성자는 코드가 없어야하고 오직 할당문만 포함해야 한다. 생성자의 코드가 없어야 하는 이유 문자열을 정수로 파싱하는 클래스가 있다고 가정하고 예시를 통해 알아보자. 아래 코드는 intValue() 를 호출할 때마다 매번 텍스트를 정수로 파싱한다. class StringAsInteger implements Number { private String .. 2023. 2. 19.
[엘레강트 오브젝트] 1.2 생성자 하나를 주 생성자로 만드세요. 이 내용은 엘레강트 오브젝트 를 읽으면서 정리한 내용을 포함하고 있습니다. 다음 목차로 진행합니다. 생성자 올바른 클래스 설계 연습해보기 생성자 순서 고려 정리 생성자 새로운 객체에 대한 진입점 객체를 생성할 때 호출하는 메서드 제공된 인자를 사용해서 캡슐화하고 있는 프로퍼티를 초기화 public class LottoNumber { private final int number; public LottoNumber(final int number) { this.number = number; } } 생성자 예시 올바른 클래스 설계 클래스에는 많은 수의 생성자와 적은 수의 메서드를 포함 생성자의 개수가 더 많을수록 클래스는 더 개선되고, 사용자 입장에서 클래스를 더 편하게 사용 메서드가 많아지면 클래스의 초점이 .. 2023. 2. 19.
[아이템4] 인스턴스화를 막으려거든 private 생성자를 사용하라 이 내용은 이펙티브 자바 Effective Java 3/E 를 읽으면서 정리한 내용을 포함하고 있습니다. 정적 메소드와 정적 필드 정적 메소드와 정적 필드만을 담은 클래스를 사용할때가 있습니다. java.lang.Math , java.util.Arrays 처럼 기본 타입 값이나 배열 관련 메서드들을 모아놓았습니다. java.util.Collections 특정 인터페이스를 구현하는 객체를 생성해주는 정적 메소드를 모아놓았습니다. 자바 8부터는 정적 메소드를 인터페이스로 생성 가능합니다. final 클래스와 관련한 메소드들을 모아놓았습니다. 정적 멤버만 담은 유틸리티 클래스는 인스턴스로 만들어 쓰려고 설계한 게 아닙니다. 하지만 생성자를 명시하지 않으면 컴파일러가 자동으로 기본 생성자를 만들어줍니다. 즉, .. 2022. 8. 7.
[아이템2] 생성자에 매개변수가 많다면 빌더를 고려하라 이 내용은 이펙티브 자바 Effective Java 3/E 를 읽으면서 정리한 내용을 포함하고 있습니다. 정적 팩토리 메소드와 생성자를 이용하다 보면 제약사항이 생겨지게 됩니다. 매개변수가 많아지면 적절히 대응을 하기가 어려워집니다. 생성자에 매개변수가 많아졌을 경우 어떠한 패턴들을 통해서 처리할 수 있는지 알아보도록 하겠습니다. 점층적 생성자 패턴 주문 아이템 도메인은 테스트용 정적 팩토리 메소드를 포함하여 아래와 같이 사용하고 있습니다. 여기에서 필드가 추가된다면 정적 팩토리 메소드는 점점 추가될 수 있습니다. public class OrderItem { private Long seq; private Long orderId; private Long menuId; private Long quantity.. 2022. 8. 7.
[아이템1] 생성자 대신 정적 팩터리 메서드를 고려하라 이 내용은 이펙티브 자바 Effective Java 3/E 를 읽으면서 정리한 내용을 포함하고 있습니다. 객체를 생성하기 위해서는 객체의 생성자(public) 를 통해서 얻을 수 있습니다. 하지만 생성자 이외에도 객체를 생성하기 위해서 사용하는 방법이 하나 더 있는데, 그것은 정적 팩터리 메서드 입니다. 정적 팩토리 메소드란? 객체 생성의 역할을 하는 클래스 메서드입니다. 많이 사용하는 클래스를 통해서 살펴보도록 하겠습니다. 날짜를 이용하기 위해서LocalDateTime.class 객체를 사용합니다. 이 클래스를 생성하기 위해서는 아래 일부 예시와 같이 사용하고 있습니다. // LocalDateTieme.class ... // 정적 팩토리 메소드 사용 public static LocalDateTime o.. 2022. 8. 7.
[Lombok] Constructor 정리 Lombok은 도메인 개발시 불필요한 코드의 사용을 줄여주고 강력한 기능을 제공하여 줍니다. 그만큼 잘 알고 써야 하는 것이 맞고 개인적으로는 잘 사용하지 못할것 같으면 사용을 하지 말고 직접 개발하는 것이 맞다고 생각합니다. 그래서 잘 사용하기 위해서 하나씩 정리해보려고 합니다. 자바로 개발을 진행하면서 생성자를 통하여 많은 내용을 진행하게 됩니다. Lombok 에서는 생성자를 생성하여 주는 기능 또한 제공하여 주는데 다음과 같은 어노테이션을 제공합니다. @NoArgsConstructor : 기본 생성자를 만드는데 사용합니다. @AllArgsConstructor : 모든 필드의 생성자를 만드는데 사용합니다. @RequiredArgsConstructor : 필수 생성자를 만드는데 사용합니다. 각각의 기본.. 2022. 2. 1.
반응형