EdgeSecu

final에 관하여 본문

공부/JAVA

final에 관하여

Edgemine 2025. 5. 17. 16:13

좋은 질문이야! 결론부터 말하자면 sessions를 final로 선언해도 add, remove 함수는 전혀 문제없이 작동해.


🔍 왜 그런가?

private final List<Session> sessions = new ArrayList<>();
  • 여기서 final은 참조(Reference) 자체가 바뀌지 않는다는 의미야.
  • 즉, sessions = new ArrayList<>(); 이런 식으로 다른 리스트를 다시 할당하는 것만 금지되는 거고,
  • 그 안에 있는 요소들을 추가하거나 제거하는 것은 가능해.

📌 예시로 쉽게 설명하면:

final List<String> list = new ArrayList<>();
list.add("a");      // ✅ 가능
list.remove("a");   // ✅ 가능
list = new ArrayList<>(); // ❌ 컴파일 에러 (final이므로 재할당 불가)

💡 정리

  • final은 **"sessions라는 변수에 다른 List를 할당하지 못하게 하겠다"**는 의미일 뿐이야.
  • 리스트의 내용 변경(add/remove) 은 전혀 문제 없어.
  • 그래서 SessionManager 클래스에서 add, remove, clear, getAllUsername 모두 제대로 작동함.