final 참조형 변수
[질문 내용]
섹션9 final 변수와 참조 에서 final을 참조형 변수에 붙었을 때 참조 대상 자체를 다른 대상으로 변경하지 못한다는 점에서 이 참조형 변수는 싱글톤(singleton) 패턴이라고 동일시해도 되는 것인가요?
답변 2
0
안녕하세요. soojinkimss님, 공식 서포터즈 코즈위버입니다.
final 참조형 변수는 변수에 할당된 인스턴스를 더이상 변경할 수 없음을 의미합니다.
반면 싱글톤 패턴은, 프로그램 전역에서 인스턴스를 단 한번만 생성하도록 하는 방법입니다. 가령 어떤 싱글톤 객체 Banana가 있을 때 new 연산자로 바나나 인스턴스를 계속 생산하여도 단 하나의 인스턴스만 사용하게 하자는 것입니다.
아래의 예시코드를 참고하시면 불변변수와 싱글톤의 차이를 아실 수 있을거에요.
// Banana가 싱글톤 객체게 아닐 경우
// banana1, banana2 는 서로 다른 인스턴스를 참조
// banana1, banana2 는 불변 참조형 변수
private final Banana banana1 = new Banana();
private final Banana banana2 = new Banana();
public class Banana() {}
// Banana가 싱글톤 객체일 경우
// banana1, banana2 는 같은 인스턴스 참조
// banana1, banana2 는 불변 참조형 변수
private final Banana banana1 = Banana.getInstance();
private final Banana banana2 = Banana.getInstance();
public static class Banana() {
private static Banana banana;
public static Banana getInstance() {
if (banana == null) {
banana = new Banana();
}
return banana;
}
}
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다. soojinkimss님!
final 키워드와 싱글톤 패턴에 대한 질문을 해주셨군요. final과 싱글톤은 각각 다른 개념이며, 동일시할 수 없습니다.
final 키워드: 자바에서 final은 변수, 메서드, 클래스에 사용될 수 있습니다. final을 변수에 사용하면, 그 변수에 다른 값을 재할당할 수 없게 됩니다. 하지만, 참조형 변수에 final을 사용할 경우 그 변수의 참조 대상을 변경할 수 없게 되지만, 참조 대상 객체의 상태를 변경할 수 있는 것은 여전히 가능합니다.
싱글톤 패턴: 디자인 패턴 중 하나로, 클래스의 인스턴스가 하나만 생성되도록 보장하는 패턴입니다. 정적인 방법을 사용하여 인스턴스를 관리하며, 주로 전역 상태를 관리하거나 로깅, 설정 관리 등에 사용됩니다.
두 개념 모두 객체의 상태나 참조를 변경하지 못하게 하는 데 도움을 줄 수 있지만, 그 목적과 작동 방식이 다르기 때문에 같은 것으로 볼 수는 없습니다.
관련된 질문과 답변은 아래에서 확인하실 수 있습니다:
- 사실상 final 변수에 관하여 (값의 변경에 관한 질문입니다)
- 싱글톤 패턴 관련 질문있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
질문있습니다
0
26
1
1번 문제 질문입니다.
0
31
1
음악플레이어 문제 중 코드질문
0
26
1
9장 상속 문제와 풀이 질문
0
38
1
강의 자료에 사소한 오타가 있습니다.
0
48
2
매서드 참조값 반환??
0
66
1
접근제어자 - 쇼핑카트 문제에서 상품출력 부분 메서드
0
69
1
자바 기본편 - .(dot)에 관한 질문입니다!
0
85
1
공부방법
0
74
2
상속관계에서 멤버 변수는 오버라이딩 되는 개념이 아닌가요?
0
82
1
static method 질문
0
66
1
캡슐화 문제풀이 ShoppingCart 요구사항에 문제가 있어보입니다. 피드백 주세요
0
95
1
Method1에서 Student 객체
0
73
1
3강 18. null 질문
0
67
1
this 와 super의 호출 순서는 부모-자식관계 떄문만인가요?
0
75
1
팩토리 메서드 패턴과 일반 생성자 사용의 장단점
0
97
1
문의
0
104
1
9장 상속 문제와 풀이 부분 궁금한게 있어서 질문드립니다
0
89
1
상속과 그에 따른 메모리 구조 질문
0
62
1
call메소드에서 멤버에 접근하는 방식을 이해 못 했습니다
0
74
1
수강기한
0
135
1
기본편 객체지향 프로그래밍에 대한 정의
0
86
1
섹션10 상속 메모리 구조 및 문제 관련 질문
0
87
1
추가 지식 학습
0
152
2





