[개발일지] 230529 인스턴스화를 막기 위해 private 생성자를 사용하자

2023. 5. 29. 23:09·성장이야기/TIL

오늘 새로 배운 내용

이펙티브 자바 아이템 4를 읽던 중 처음 알게 된 사실이 있다.

 

자바 클래스에 생성자를 명시해주지 않을경우에 컴파일러가 자동으로 매개변수를 받지 않는 public 기본 생성자를 만들어 준다는 사실을 전혀 모르고 있었다.

 

public 한 기본 생성자가 있을 경우 의도치 않게 클래스가 인스턴스화될 가능성이 존재한다.

문제가 되는건 인스턴스로 만들어 쓰려고 설계한 클래스가 아닌데 인스턴스화가 되면 안 되기 때문에 인스턴스화를 막아야 한다. 

 

인스턴스화할 필요가 없는 클래스들이 존재하는데 (예를 들어 java.lang.Math나 java.util.Array처럼 기본 타입값이나 배열 관련 메서드만 모아놓은 클래스들) 이러한 클래스들은 private 생성자를 추가해 인스턴스화를 막고 있다.

 

컴파일러가 자동으로 public 생성자를 만드는 경우는 클래스에 명시된 생성자가 없을 경우에만 만들기 때문에 private 생성자를 추가하면 된다.

 

실제로 Math 클래스와 Collections 클래스안에 들어가 보니 private로 선언된 기본 생성자가 존재하고 있었다.

그리고 친절하게 주석으로 인스턴스화를 막는다는 목적으로 사용되는 생성자라고 알려주고 있다.

 

java.lang.Math

 

java.util.Collections

 

이렇게 private로 생성자를 선언하면 클래스 바깥에서 접근할 수 없어 의도치 않게 클래스의 인스턴스화를 막을 수 있다.

 

결론

인스턴스화할 필요가 없는 클래스들은 자동으로 public 기본생성자가 만들어지는걸 막기 위해 private 생성자를 만들어 인스턴스화를 막자.

'성장이야기 > TIL' 카테고리의 다른 글

[개발일지] 230602 Java Varargs(가변인자)란?  (0) 2023.06.02
[개발일지] 230531 직렬화 중 만난 Jackson 버전 문제  (0) 2023.05.31
[개발일지] 230526 정적 멤버 클래스를 이용해 불필요한 중복을 제거하자  (0) 2023.05.26
[개발일지] 230524 제네릭 상속 (with 와일드카드)  (0) 2023.05.24
[개발일지] 230516 Java Map.Entry 사용하기  (0) 2023.05.16
'성장이야기/TIL' 카테고리의 다른 글
  • [개발일지] 230602 Java Varargs(가변인자)란?
  • [개발일지] 230531 직렬화 중 만난 Jackson 버전 문제
  • [개발일지] 230526 정적 멤버 클래스를 이용해 불필요한 중복을 제거하자
  • [개발일지] 230524 제네릭 상속 (with 와일드카드)
seungjjun
seungjjun
  • seungjjun
    개발이야기
    seungjjun
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 성장이야기
        • TIL
        • 주간회고
      • Java
        • Spring
        • Spring Security
      • 트러블슈팅
      • Kafka
      • OS
      • Network
      • 메가테라
      • Database
      • Algorithm
      • Git
      • HTML
      • CSS
      • 독서
      • 컴퓨터 이해하기
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    메가테라
    주간회고
    개발일지
    graphQL
    항해플러스
    항해99
    이커머스 프로젝트
    Til
    redis
    메가테라 주간회고
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
seungjjun
[개발일지] 230529 인스턴스화를 막기 위해 private 생성자를 사용하자
상단으로

티스토리툴바