본문 바로가기
  • 시 쓰는 개발자
1일 1개념정리 (24년 8월~)/Java

1일1개 (25) - 생성자

by poetDeveloper 2024. 9. 4.

1일 1개념정리 24.08.09.금 ~ 

 

큰 결정에 큰 동기가 따르지 않을 때도 있다. 하지만 큰 결심이 따라야 이뤄낼 수 있다.

무조건 무조건 1일 1개의 개념 정리하기 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!


#25. 생성자

생성자를 왜 쓸까? 생성자라는 개념은 왜 있는 것인가 ?? 생성자에 대해 알아봅시다. 사실 Java말고도 Spring에서 어노테이션으로 생성자 관리를 잘 해줘야하므로, 알아두면 요긴하게 쓴다.

 

 

1. 쉬운 초기화 & 직관적이다

생성자를 사용하면 객체를 생성하면서 동시에 필드 값을 초기화할 수 있다. 예를 들어 필드가 3개인 경우, 생성자에서는 한 줄로 객체를 생성하며 모든 필드를 초기화할 수 있다. 사실 아래 코드는 1줄이고 Person 클래스 정보도 모르지만, 김씨에다가 22살, 키가 170.1 이라고 유추할 수 있지 않는가? 바로 그것이다.

// 객체 생성 시 필드 초기화
Person person = new Person("Kim", 22, 170.1);

2. 객체의 유효성 보장 & 에러 방지

유효성이란 뭐냐면, 생성자를 씀으로써 필수적인 값을 강제로 설정하게 되므로 객체가 항상 유효한 상태로 생성될 수 있다는 의미이다. 예를 들어 Person 객체를 생성할 때 이름, 나이, 키가 반드시 필요하다면 생성자는 이를 강제하여 필드의 누락을 방지할 수 있다. 이를 통해 의도치않은 버그도 방지할 수 있다.

public class Person {
    private String name;
    private int age;
    private double height;

    // 필수 필드만 설정하는 생성자
    public Person(String name, int age, double height) {
        this.name = name;
        this.age = age;
        this.height = height;
    }
}

Person person = new Person("Kim", 22, 170.1); // 3개 필드 모두 초기화된 유효한 객체

3. 생성자 오버로딩

생성자 오버로딩을 통해 다양한 방법으로 객체를 생성할 수 있다. 예를 들어 아래 코드처럼 2개의 필드만 받는 생성자와 모든 필드를 받는 생성자를 각각 정의할 수 있다. 이를 통해 개발자는 객체를 생성할 때 좀 더 유연하게 생성할 수 있게 된다.

public class Person {
    private String name;
    private int age;
    private double height;

    // 필수 필드만 초기화하는 생성자
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 모든 필드를 초기화하는 생성자
    public Person(String name, int age, double height) {
        this.name = name;
        this.age = age;
        this.height = height;
    }
}

4. 불변성 (Immutable)

객체를 불변으로 만들기 위해서는 생성자를 사용하여 초기화하는 것이 중요하다. 생성자를 통해 객체의 모든 필드를 초기화하고, 이후 외부에서 필드를 변경할 수 없도록 setter 메소드 자체를 제공하지 않을 수 있다. 또는 final 키워드를 사용하여 필드를 선언함으로써 객체의 불변성을 보장할 수도 있다.

public class ImmutablePerson {
    private final String name;
    private final int age;

    public ImmutablePerson(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 필드를 변경하지 못하도록 의도할 것이라 setter 메소드가 없음
}

5. 의존성 주입 (Dependency Injection)과 생성자 주입

의존성 주입에서 생성자 주입(Constructor Injection)은 객체의 의존성을 주입하는 가장 일반적이고 권장되는 방법이다.

https://100won-developer.tistory.com/entry/1%EC%9D%BC1%EA%B0%9C-8-Spring-%EC%99%9C-%EC%93%B8%EA%B9%8C

 

1일1개 (8) - Spring 왜 쓸까 ?

1일 1개념정리 24.08.09.금 ~  큰 결정에 큰 동기가 따르지 않을 때도 있다. 하지만 큰 결심이 따라야 이뤄낼 수 있다.무조건 무조건 1일 1개의 개념 정리하기 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!#8. Spring 왜 쓸까

100won-developer.tistory.com

이를 통해 객체가 생성될 때 필요한 의존성을 명확하게 지정할 수 있고 객체의 일관성을 보장할 수 있다. 생성자 주입은 특히 스프링에서 권장되는 방식이다.

public class Service {
    private final Repository repository;

    // 의존성 주입을 통한 생성자
    public Service(Repository repository) {
        this.repository = repository;
    }
}