메소드 스코프 리뷰

CODE Link

  1. public class MethodScope {
  2. public static void main(String[] args) {
  3. // main 메소드의 지역변수 score
  4. int score = 88;
  5. System.out.printf("score = %d in main()\n", score);
  6. // Record 클래스의 메소드 수행
  7. Record.foo(score);
  8. // main 메소드의 지역변수 score 출력
  9. System.out.printf("score = %d in main()\n", score);
  10. Record.foo(score); //
  11. > 이때 한번 foo 사용하면 78 아닌 68 나오게 하려면 어떻게 해야하나요..? super 이용해 변수를 따로
  12. > 관하면 되는 건가요..?
  13. }
  14. }
  15. class Record {
  16. // 클래스 메소드
  17. public static void foo(int score) {
  18. // printMinus10 메소드의 파라미터 score의 값을 10 감소
  19. score -= 10;
  20. // printMinus10 메소드의 파라미터 score의 값을 출력
  21. System.out.printf("score = %d in foo()\n", score);
  22. }
  23. }

INPUT

OUPUT

  1. score = 88 in main()
  2. score = 78 in foo()
  3. score = 88 in main()

Record.foo(score); 이때 호출되는 foo메소드의 반환타입을 int로 선언합니다.

class Record {
// 클래스 메소드
public static int foo(int score) {

  1. score -= 10;
  2. 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) {

  1. int score = 88;
  2. System.out.printf("score = %d in main()\n", score);
  3. score = Record.foo(score);//여기서 score의 값은 88

//메소드 실행이 완료된후 score의 값은 78

  1. System.out.printf("score = %d in main()\n", score);//78이 출력됨
  2. score = Record.foo(score); // score의 값은 78
  3. //메소드 실행이 완료된후 score의 값은 68
  4. System.out.printf("score = %d in main()\n", score);//68이 출력됨
  5. }

}

class Record {

public static int foo(int score) {

  1. score -= 10;
  2. System.out.printf("score = %d in foo()\n", score);
  3. return score;//계산 완료한 값을 메소드가 호출된 곳으로 반환해줌
  4. }

}

이렇게 됩니다.

score = Record.foo(score);

  1. System.out.printf("score = %d in main()\n", score);
  2. score = Record.foo(score);
  3. System.out.printf("score = %d in main()\n", score);

정리하면 첫번째로 호출되는 foo메소드의 반환값을 score변수에 저장한후 foo메소드가 두번째로 호출될때 score를 전달값으로 넘겨주면 두번째 foo메소드가 실행되기 전에 score변수에 저장된 값은 78이었지만 두번째 foo메소드가 실행된후 score의 값은 68이 됩니다.

메소드의 결과값을

반환 받아 다시 출력하는 방법이 있겠습니다.

  1. public class MethodScope {
  2. public static void main(String[] args) {
  3. int score = 88;
  4. System.out.printf("score = %d in main()\n", score);
  5. // 결과를 value에 저장
  6. int value = Record.foo(score);
  7. System.out.printf("score = %d in main()\n", score);
  8. // value 값을 전달
  9. Record.foo(value);
  10. }
  11. }
  12. class Record {
  13. // 클래스 메소드
  14. public static int foo(int score) {
  15. score -= 10;
  16. System.out.printf("score = %d in foo()\n", score);
  17. return score;
  18. }
  19. }

PS.

질문 감사합니다!

[Markdown Preview]