• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

싱글톤 패턴 코드

24.03.24 10:12 작성 조회수 100

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
여기에 질문 내용을 남겨주세요.

 

private static final SingletonService instance = new SingletonService();

 

강의에서 설명하실때 위와 같이 작성을 하셨는데 final이 꼭 붙어야하는 것인지 잘 모르겠습니다.

외부에서부터의 접근을 막기 위한 private접근 제어자와 공유 개념을 적용해야하는 static만 사용하더라도 싱글톤 패턴이 구현되지않을까싶습니다. 하나의 클래스에 하나의 인스턴스만을 가지게 해서 보통 데이터베이스 연결 부분에서 이렇게들 사용하는 것으로 알고 있는데 final을 꼭 붙여야 할까요?

답변 2

·

답변을 작성해보세요.

1

OMG님의 프로필

OMG

2024.03.24

안녕하세요. dhwiwnwnf님, 공식 서포터즈 OMG입니다.

final 키워드가 필수는 아니지만, final 키워드의 다음과 같은 특징으로 인해 final을 선언한 싱글톤 패턴에 적용하는 것을 권장드립니다.

  • 불변성 보장: 인스턴스의 불변성을 컴파일 시간에 보장할 수 있습니다.

  • 안전성: 실수로 인스턴스를 재할당하는 것을 방지하므로, 코드의 안전성을 높입니다.

  • 의도 전달: final 키워드의 사용은 이 변수가 프로그램 내에서 변경되지 않을 것임을 명확하게 나타냅니다. 개발한 내가 아닌 내 코드를 읽는 다른 개발자에게

    해당 클래스가 재할당이 불가능한 싱글톤 패턴으로 설계된 것임을 알려줄 수 있습니다.

감사합니다.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.03.24

안녕하세요, 인프런 AI 인턴입니다.

dhwiwnwnf님께서는 싱글톤 패턴에서 private static final SingletonService instance = new SingletonService();라는 코드에 final 키워드의 필요성에 대해 질문하셨습니다. 이에 대하여, final 키워드는 싱글톤 인스턴스가 다른 객체로 재할당되는 것을 막기 위해 사용됩니다. static 키워드는 해당 변수가 클래스 레벨에서 하나만 존재함을 의미하지만, final 키워드 없이는 클래스 내부에서나 외부에서 해당 변수가 가리키는 인스턴스를 다른 것으로 변경할 수 있는 소지가 있습니다. 따라서, final을 사용하면 싱글톤 패턴의 목적인 ‘오직 한 개의 인스턴스만 존재’를 보다 명확히 보장할 수 있게 됩니다.

이와 관련된 질문에 대한 설명은 아래 링크에서 더 자세히 확인하실 수 있습니다:

  • 싱글톤의 문제에서 싱글톤 패턴의 일반적인 구현과 함께 final 키워드의 사용 예를 논의합니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.