# 메소드 스코프 리뷰 #### CODE <a class='btn btn-default' href='/codes/26868'>Link</a> ``` public class MethodScope { public static void main(String[] args) { // main 메소드의 지역변수 score int score = 88; System.out.printf("score = %d in main()\n", score); // Record 클래스의 메소드 수행 Record.foo(score); // main 메소드의 지역변수 score 출력 System.out.printf("score = %d in main()\n", score); Record.foo(score); // > 이때 한번 더 foo 를 사용하면 78이 아닌 68이 나오게 하려면 어떻게 해야하나요..? super을 이용해 변수를 따로 > 보 관하면 되는 건가요..? } } class Record { // 클래스 메소드 public static void foo(int score) { // printMinus10 메소드의 파라미터 score의 값을 10 감소 score -= 10; // printMinus10 메소드의 파라미터 score의 값을 출력 System.out.printf("score = %d in foo()\n", score); } } ``` #### INPUT ``` ``` #### OUPUT ``` score = 88 in main() score = 78 in foo() score = 88 in main() ```
Record.foo(score); 이때 호출되는 foo메소드의 반환타입을 int로 선언합니다. class Record { // 클래스 메소드 public static int foo(int score) { score -= 10; System.out.printf("score = %d in foo()\n", score); return score; } } foo메소드가 실행완료된후 foo메소드가 호출된곳으로 score값을 반환해줍니다. score = Record.foo(score); 그러면 현재 reScore 변수에 저장된 값은 78입니다. 다시한번 foo메소드를 호출합니다. Record.foo(score); 이때 foo메소드의 파리미터(전달값)로 score를 넘겨줍니다. 이때 넘겨지는 값은 78이 넘겨집니다. foo메소드가 실행되면 score에 저장된 값이 78이기때문에 foo메소드 안에서 score -= 10; 연산을 수행하면 68이 됩니다. 그러면 return을 사용해서 score변수를 foo메소드가 호출된 곳으로 반환해줍니다. 두번째 Record.foo(score);가 수행된후 값을 저장하는 변수를 re2Score라고 하면 score에 68이 저장되 있는 상태입니다. 두번째 foo 메소드까지 실행 완료된후 score를 출력하면 68이 출력됩니다. 코드를 정리하면 public class MethodScope { public static void main(String[] args) { int score = 88; System.out.printf("score = %d in main()\n", score); score = Record.foo(score);//여기서 score의 값은 88 //메소드 실행이 완료된후 score의 값은 78 System.out.printf("score = %d in main()\n", score);//78이 출력됨 score = Record.foo(score); // score의 값은 78 //메소드 실행이 완료된후 score의 값은 68 System.out.printf("score = %d in main()\n", score);//68이 출력됨 } } class Record { public static int foo(int score) { score -= 10; System.out.printf("score = %d in foo()\n", score); return score;//계산 완료한 값을 메소드가 호출된 곳으로 반환해줌 } } 이렇게 됩니다. score = Record.foo(score); System.out.printf("score = %d in main()\n", score); score = Record.foo(score); System.out.printf("score = %d in main()\n", score); 정리하면 첫번째로 호출되는 foo메소드의 반환값을 score변수에 저장한후 foo메소드가 두번째로 호출될때 score를 전달값으로 넘겨주면 두번째 foo메소드가 실행되기 전에 score변수에 저장된 값은 78이었지만 두번째 foo메소드가 실행된후 score의 값은 68이 됩니다.
# 메소드의 결과값을 반환 받아 다시 출력하는 방법이 있겠습니다. ``` public class MethodScope { public static void main(String[] args) { int score = 88; System.out.printf("score = %d in main()\n", score); // 결과를 value에 저장 int value = Record.foo(score); System.out.printf("score = %d in main()\n", score); // value 값을 전달 Record.foo(value); } } class Record { // 클래스 메소드 public static int foo(int score) { score -= 10; System.out.printf("score = %d in foo()\n", score); return score; } } ``` ## PS. 질문 감사합니다!