책 내용 질문하기
알고리즘 128, 129 void 처리 관련
도서
2019 시나공 정보처리기사 실기(산업기사포함)
페이지
128,129
조회수
160
작성일
2019-10-05
작성자
탈퇴*원
첨부파일

안녕하세요.

  

void 명령어가 있으면 리턴값 없는걸로 이론 파트에서 학습했는데요. 

p.128~129 문제 39, 41번에는 

void 조건인데도 인수들이 변경 되었더라고요. 

   

아래와 같이 정공법은 아니지만.. 초보자용으로(?) 이렇게 이해해도 될지 문의드립니다. 

  

- main 함수에 있는 객체 이름과 (ex. a, b)

void 함수 안에 있는 객체(인수) 이름이 같으면 (a, b)

a, b 해당 값들이 직접 변경된다 (리턴값 있는 것처럼 처리한다)

  

- main 함수에 있는 객체 이름은 a, b 인데 

만약 void 함수 안에 있는 객체(인수) 이름이 i, j 이면 

리턴값 없고, a, b 값은 변하지 않는다. 

  

 

감사합니다. 

  

답변
2019-10-07 16:31:01

안녕하세요 길벗수험서 운영팀입니다.

 

조금 다르게 이해하셔야 합니다. 말씀하신 것과 같이 이해하는 경우 불상사가 발생할 수 있습니다.

 

41번은 '전역 변수'와 '지역 변수' 개념입니다.

하나의 함수 내에서 선언된 변수들은 다른 함수를 호출할 때 인수로 값을 보내거나 하는 식으로 외부로 나갈 수 있습니다. 그 외에는 해당 함수가 종료될 경우 모두 없어져버리죠. 이것이 일반적으로 사용되는 지역 변수 개념입니다.

 

41번의 a, b, c 변수들은 main() 메소드 밖에 선언되어 있습니다. 

이렇게 함수 외부에 선언되는 경우 선언된 위치에 따라 여러 메소드에서 공통적으로 사용할 수 있는 변수들이 있는데, 이것을 전역변수라고 합니다. 

 

41번의 a, b, c는 main 메소드 밖의 problem 클래스 내에서 선언되어 problem 내의 a, b, c 라는 변수명은 하나의 저장공간을 갖습니다.

a, b, c가 main() 메소드나 prnt 메소드에서 또다시 선언되는건 불가능하다는 이야기죠.

main에서 값을 바꾸었든, prnt에서 값을 바꾸었든 이 변경사항들은 problem이라는 클래스 내의 변수인 a, b, c에 그대로 적용되어 problem 클래스가 종료될 때까지 상시 유지되게 됩니다.

 

--------

 

39번의 경우 조금 다릅니다. 일종의 포인터라고 이해하셔야 합니다.

(자바에서는 포인터 개념을 사용하지 않지만, 이와같이 이해하시는 것이 편합니다.)

클래스를 인수로 전달하는 경우 메모리 위치를 전달하여, myVar가 저장되어 있는 메모리의 값을 직접 수정한 경우라고 보셔야 합니다.

때문에 main() 에서 출력할 때 변경된 myVar의 값이 출력되었다고 이해하셔야 불상사를 방지할 수 있습니다.

 

행복한 하루되세요 :)

  • 관리자
    2019-10-07 16:31:01

    안녕하세요 길벗수험서 운영팀입니다.

     

    조금 다르게 이해하셔야 합니다. 말씀하신 것과 같이 이해하는 경우 불상사가 발생할 수 있습니다.

     

    41번은 '전역 변수'와 '지역 변수' 개념입니다.

    하나의 함수 내에서 선언된 변수들은 다른 함수를 호출할 때 인수로 값을 보내거나 하는 식으로 외부로 나갈 수 있습니다. 그 외에는 해당 함수가 종료될 경우 모두 없어져버리죠. 이것이 일반적으로 사용되는 지역 변수 개념입니다.

     

    41번의 a, b, c 변수들은 main() 메소드 밖에 선언되어 있습니다. 

    이렇게 함수 외부에 선언되는 경우 선언된 위치에 따라 여러 메소드에서 공통적으로 사용할 수 있는 변수들이 있는데, 이것을 전역변수라고 합니다. 

     

    41번의 a, b, c는 main 메소드 밖의 problem 클래스 내에서 선언되어 problem 내의 a, b, c 라는 변수명은 하나의 저장공간을 갖습니다.

    a, b, c가 main() 메소드나 prnt 메소드에서 또다시 선언되는건 불가능하다는 이야기죠.

    main에서 값을 바꾸었든, prnt에서 값을 바꾸었든 이 변경사항들은 problem이라는 클래스 내의 변수인 a, b, c에 그대로 적용되어 problem 클래스가 종료될 때까지 상시 유지되게 됩니다.

     

    --------

     

    39번의 경우 조금 다릅니다. 일종의 포인터라고 이해하셔야 합니다.

    (자바에서는 포인터 개념을 사용하지 않지만, 이와같이 이해하시는 것이 편합니다.)

    클래스를 인수로 전달하는 경우 메모리 위치를 전달하여, myVar가 저장되어 있는 메모리의 값을 직접 수정한 경우라고 보셔야 합니다.

    때문에 main() 에서 출력할 때 변경된 myVar의 값이 출력되었다고 이해하셔야 불상사를 방지할 수 있습니다.

     

    행복한 하루되세요 :)

· 5MB 이하의 zip, 문서, 이미지 파일만 가능합니다.
· 폭언, 욕설, 비방 등은 관리자에 의해 경고없이 삭제됩니다.