Skip to content

Latest commit

 

History

History
16 lines (14 loc) · 1.82 KB

File metadata and controls

16 lines (14 loc) · 1.82 KB

메소드의 파라미터로 전달한 객체를 메소드 내에서 마음대로 바꾸지 못 하게 하려면 어떻게 코딩하는게 좋을까요? 왜 메소드가 파라미터를 조작하는 것이 문제가 될까요? 문제가 아닐 수도 있지 않을까요?

메서드(함수)의 파라미터로 전달한 객체를 메서드 내부에서 변경되지 못하도록 하려면, 메서드 파라미터에 변수를 선언할 때 자바의 final이나 C++의 const 등 변경을 하지 못하도록 해주는 키워드를 사용해주어야 합니다. 이 키워드들을 붙여주면 해당 변수가 참조하는 실제 객체가 실제로는 불변이든 아니든, 재할당이 가능하든 아니든에 상관없이 메서드 내에서는 재할당이 불가능하게 됩니다.

public void foo(final int bar) {
    ...
}
void foo(const int bar) {
    ...
}

그렇다면 메서드 파라미터를 왜 조작하면 안될까요? 사실 어차피 메서드 파라미터에 값을 재할당 하더라도 원본 객체에는 영향을 끼치지 않아서 큰 문제가 되지 않기는 합니다. 하지만 메서드 파라미터를 조작하지 않는 것이 해당 파라미터가 메서드 스코프 내에서 변하지 않고 원래 전달된 값으로 사용되도록 하여 파라미터를 전달한 의도대로 사용하도록 할 수 있습니다.

또한 C++ 같이 포인터를 사용하는 언어에서는, 함수 파라미터로 포인터를 전달했을 때 해당 포인터 값이 재할당 가능하다면 메모리 주소 조작이 가능해지기 때문에 함수 내에서의 변수 변경이 함수 외부에도 영향을 끼치게 됩니다. 따라서 이런 경우에 의도하지 않았다면 반드시 const 키워드를 이용해 포인터의 변경을 불가능하게 만들어줘야 합니다.