반응형
코딩 테스트 문제를 풀면서 나오는 문제 중 하나입니다.
- 해당 코드
|
1
2
3
4
5
6
7
8
9
|
func solution(_ n:Int64) -> [Int] {
var result: [Int] = []
while n > 0{
result.append(n % 10)
n /= 10
}
return result
}
|
cs |
- error code
error: left side of mutating operator isn't mutable: 'n' is a 'let' constant
n /= 10
해당 error의 경우에는 단순히 n이라는 값이 상수로 선언되어 변경을 할 수 없다고 나와있다.
하지만 error의 n이라는 값은 단순한 파라미터로 넘어온 값이라 let으로 선언이 된것이 이해가 되지 않았다.
물론 정답은 생각보다 간단하다. 파라미터를 다른 var변수를 만들어 복사하여 사용하면 된다.
- 원인 해결
|
1
2
3
4
5
6
7
8
9
|
func solution(_ n:Int64) -> [Int] {
var result: [Int] = []
var reN = n
while reN > 0{
result.append(reN % 10)
reN /= 10
}
return result
}
|
cs |
- 원인
그러나 문제는 왜? 인가다
다른언어에서는 파라미터가 변경할 수 없는 경우를 생각해보지 못하였다.
charGpt의 도움을 받으면서 찾아본 결과
'Swift에서는 함수 매개변수로 전달된 값이 기본적으로 상수(let)로 취급됩니다. 즉, 함수 매개변수(파라미터)는 기본적으로 수정할 수 없다' 라고 나온다.
Swift에서는 가독성과 안전상의 이유로 파라미터를 수정하지 못하도록 막고 있다.
반응형