답변 1
1
안녕하세요. cu_bot님. 짧지만 굵은 중요한 질문 감사드립니다! 😄
우선 질문에 대한 답변을 드리자면 'val
을 사용할 수 없는 부분에서만 최소한으로' 입니다.
백엔드 개발자를 위한 Spring Boot + JPA 조합의 프로젝트에서는 entity class의 값 변경이 필요한 프로퍼티(Account
(계좌) Entity의 balance
(잔액) 프로퍼티 같은 부분입니다.) 가 이에 해당됩니다.
참고로 저도 실무의 코드를 다시 한번 살펴보니 해당 엔티티 프로퍼티 부분을 제외하고는 거의 var을 사용하지 않고 있네요. 🙂
조금 더 근본적으로 왜 var
대신 val
을 사용하라고 했는지 설명도 드리면 좋을 것 같습니다.
변경 가능한 변수는 여러가지 어려움을 야기합니다.
코드가 짧지 않고, 케이스에 따라 변수의 값을 변경하는 경우 어떤 값이 되어 있을지 파악이 어렵고 그에 따라 로직 수정도 어려움
여러 스레드가 공유하는 영역에 변경 가능한 변수가 존재하는 경우의 문제
여러 스레드가 동시에 값을 수정하게 되면 특정 스레드의 변경이 적용되지 않을 수 있음
여러 스레드가 동시에 접근하고 값을 변경하려고 할 때 값 변경의 순서가 뒤섞이며 예기치 않은 결과가 나올 수 있음
과거에 C언어나 Java 언어가 만들어졌던 시대에는 컴퓨터의 메모리가 비쌌고, 리소스를 최대한 아껴쓰는 방향으로 언어의 설계가 되었으며 따라서 변수를 한번 만들면 계속 재활용하는 방식으로 코딩을 많이 했습니다. 위의 문제들은 여러 방법을 활용하여 회피하는 방식으로 진행하였습니다.
변경 불가능한 변수의 장점과 단점
최근에는 함수형 프로그래밍 기법이 각광받고 있으며 기본적으로 변경 불가한 변수(immutable variable)이 선호되며, 변경 가능한 변수가 없는 언어도 있습니다. (Haskell과 같은 순수 함수형 프로그래밍 언어 등) 변경 불가능한 변수만 사용하면 위에 나온 어려움을 반대로 로직의 파악이 쉬워지고, 쓰레드 공유에 대한 고민을 할 필요가 없어집니다.
하지만 변경 불가능한 변수만 제공하는 경우 필요할 때마다 변수를 계속 새로 만들어야 하기 때문에 기본적으로 메모리 사용량이 큰 편이고 그래서 컴퓨팅 성능과 메모리의 크기가 커진 최근에 와서 다시금 주목받기 시작했다는 분석도 있습니다. (컴퓨팅 리소스 사용량 ⤴ 개발자의 편의성⤴)
제 강의에 첫 질문을 남겨주셔서 정말 감사드립니다 😀
위 답변이 도움이 되었으면 좋겠습니다~!
언제든 추가 질문 있으시면 편하게 남겨주세요.
감사합니다. 🕺