웹개발/Java

14 - 4. Java - Object 생성자

lukeit 2024. 11. 4. 13:04

Object

  • 객체 생성하는 방법 3가지

    1. @NoArgsConstructor + @Setter

      1. 먼저 빈 객체를 생성 한 뒤, 필요에 따라 원하는 필드 값을 주입하는 방식

        public class Member {
         private String name;
         private String email;
        
         public Member() {}
        
         public void setName(String name) { this.name = name; }
         public void setEmail(String email) { this.email = email; }
        }
        
        // main
        Member aaron = new Member();
        aaron.setName("Aaron");
        aaron.setEmail("aaron@example.com");
      • @NoArgsConstructor : Literally No Arguement Constructor gets created
        • in the above example, NoArgsConstructor is public Member() {}
  1. Custom Constructor 만들기

    1. 필요한 필드 값만 주입받는 생성자

      public class Member {
       private String name;
       private String email;
      
       public Member(String name) { this.name = name; }
      
       public void setEmail(String email) { this.email = email; }
      }
      
      //main
      Member aaron = new Member("Aaron");
      aaron.setEmail("aaron@example.com");

      b. DTO (데이터 전달용 객체)를 통한 생성자

      public class Member {
           private String name;
       private String email;
      
       public Member(MemberRequestDto dto) {
           this.name = dto.getName();
           this.email = dto.getEmail();
       }
      }
      
      // main
      MemberRequestDto dto = new MemberRequestDto("Aaron", "aaron@example.com");
      Member aaron = new Member(dto);
  1. @AllArgsConstructor

    • 모든 필드값을 다 주입해주는 생성자를 만들어준다

      public class Member {
            private Integer id;
            private String name;
            private int age;
        private String email;
      
            // this would be created by calling @AllArgsConstructor
        public Member(Integer id, String name, int age, String email) {
            this.id = id;
            this.name = name;
            this.age = age;
            this.email = email;
        }
      }
  • 생성자는 어떻게 만드는게 좋은가?

    • 필드값을 어떤 시점에서 세팅할것인가의 기준으로 분리하는게 좋다
  • 객체 종류

    • DTO: 가변 객체 = 객채 내 데이터를 Getter 로 불러다가 쓸 수 있고, 객체 내 데이터를 Setter 로 조작이 가능하다
    • VO: 불변 객체 = 객체 내 데이터를 Getter 로 불러다가 쓸수만 있음 (조작 불가)

    Final

    • 메서드에 final 이 사용된다면 상속되지 않는다는 의미이다: @Override를 사용할 수 없다
      • 해당 메서드가 꼭 한가지의 구현으로만 다양한곳에서 사용되는 경우 final 을 붙인다
    • 클래스에 final이 사용된다면 상속되지 않는다는 의미이다: extends 를 사용할 수 없다
      • 극단적으론 모든 Class를 정의할때 final 을 붙여도 된다고 한다
    • final 을 통해 한번 initialize 된다면, 변경되지 않는다
      • 한번에 객체 생성 후 사용까지 가능하다
      • 무조건 생성자를 통해 initialize해야한다
      • 불변성 (Immutability)
        • 한번 만든 객체는 변경할 수 없다
      • 완전성 (Completeness)
        • 초기화 후, 객체가 완전한 상태가 되도록 하는 것
    반응형