우테코 7기/1주차

메소드 파라미터에 final 사용하기

gilbert9172 2024. 10. 22. 14:11

 

❐ Description


1주차 과제 제출 후 코드 리뷰 과정에서 파라미터에 final을 선언하는 코드를 봤다.

그래서 왜 선언하는지 정리해보려고 한다.

 

 

 

 

 

❐ Call by value & Call by reference


1. Call by value

call by value는 메서드에 인자로 전달된 값의 복사본이 메서드에 전달된다는 것을 의미한다. 즉, 메서드 내에서

해당 파라미터를 변경해도 원래 값에는 영향을 미치지 않는다. 자바는 Call  by value 방식을 채택한 언어이다. 

public class Main {
    public static void main(String[] args) {
        int original = 10;
        modifyValue(original);
        System.out.println("Original value: " + original); // 10 출력
    }

    public static void modifyValue(int value) {
        value = 20;  // 복사된 값만 수정
    }
}

 

2. Call by reference

call by reference 호출 방식은 함수 호출 시 인자로 전달되는 변수의 레퍼런스를 전달한다.

따라서 함수 안에서 인자 값이 변경되면, 파라미터로 전달된 객체의 값도 변경된다.

public class Main {
    public static void main(String[] args) {
        Person person = new Person("John");
        modifyPerson(person);
        System.out.println("Person name: " + person.getName()); // "Doe" 출력
    }

    public static void modifyPerson(Person person) {
        person.setName("Doe");  // 객체 내부의 값을 수정
    }
}
}

 

 

 

 

 

❐ 왜 쓸까?


메서드 파라미터에 final을 붙이는 이유는 주로 코드의 안정성가독성을 높이기 위해서라고 한다.

public void doSomething(String input) {
    input = "new value"; // 정상 동작
}
public void doSomething(final String input) {
    input = "new value"; // 컴파일 에러
}

이렇게 보니깐 명확한 의미전달이 이루어지는 것 같다.

 

 

 

 

 

❐ 인스턴스의 상태는 변경할 수 있다. 


public void addItem(final List<Item> items, final Item item) {
    items.add(item);
}

위와 같이 Collection을 final로 선언하여도 상태를 변경하는데는 문제 없다.(당연한 결과)

 

 

 

 

 

❐ Intellij setting


 우테코에서 참 여러모로 많이 배운다.