[Java] 매개 변수를 이용한 함수 고립

노현남·2023년 7월 17일
0

Java

목록 보기
5/11

함수의 고립

함수가 매개 값을 가지지 않으면 그 함수의 지역자체가 고립되지 않아 외부의 변화에 영향을 받게 된다.

또한, 함수가 외부의 변화에 영향을 받게 될 때, 함수가 가지는 독립적인 공간의 자율도가 떨어진다.

코드 예시

public class isolation {
    
    static int[] scores = new int[3];
    
    public static void main (String[] args) {
    	
   		inputList();        
    
    }
        
        private static void inputList() {
        	System.out.printf("성적은 %d점입니다" , scores[0]);
    	}
    }
    
	

국어, 영어, 수학 성적을 받기 위한 배열 scores를 선언하고, 크기가 3인 배열을 생성한다.

이때 만약 전역변수로 선언 된 scores 변수명을 scoreList로 변경하면 어떻게 될까? 실제 실제 해당 코드를 실행한 결과 아래와 같이 "Cannot resolve symbol" 오류가 발생하게 된다.

오류가 발생한 이유는?

inputList 메서드의 실행 로직에서 외부 변수인 scores를 사용해서 프로그램을 만들었다.

이후, scores 변수명을 scoreList 로 변경하자 주소를 참조할 수 없어 오류가 발생했다.

이러한 현상을 함수가 외부의 변화에 영향을 받았다. 라고 표현한다. 함수 내부 로직에는 어떠한 변화도 없엇는데 말이다.

개선 방법은?

자바에서는 static의 사용을 지양해야 하는 것으로 알고 있다. 해당 주제를 상세히 다룬 칼럼으로 https://unabated.tistory.com/1041 해당 블로그를 참고 했다.

static은 별도로 객체를 생성할 필요없다. static은 class 수준에 속하기 때문에 객체를 생성하지 않고 해당 클래스의 이름을 사용하여 호출하는 것이 가능하기 때문이다.

때문에, 편리하게 접근 가능 하다는 장점이 있지만, 여러 곳에서 동시에 접근하고 변경할 수 있기때문에, 코드의 복잡도를 증가시키는 주요한 원인이 될 수 있다.

상기 내용을 토대로 앞서 전역 변수로 선언 했던 scores 변수를 main 함수 내부의 지역변수로 선언하도록 하겠다.

public class isolation {
    
    public static void main (String[] args) {
    	int[] scores = new int[3];
   		inputList();        
    
    }
        
        private static void inputList() {
        	System.out.printf("성적은 %d점입니다" , scores[0]);
    	}
    }

이렇게 되면 inputList의 실행 로직에서 scores 변수를 참조하지 못하게 된다.

매개 변수의 사용

매개 변수를 통해 함수 내부로 데이터를 전달하면, 함수는 외부에서 독립적인 데이터를 사용할 수 있게 된다.

이로 인해 함수가 외부의 변화에 영향을 받지 않고 독립적인 공간을 갖게 된다. 이러한 방식으로 매개 변수를 사용하면 함수의 재사용성과 테스트 용이성을 높일 수 있다.

public class isolation {
    
    public static void main (String[] args) {
    	int[] scores = new int[3];
   		inputList(scores);        
    
    }
        
        private static void inputList(int[] score) {
        	System.out.printf("성적은 %d점입니다" , score[0]);
    	}
    }
profile
겸손하게 독학하기

0개의 댓글