뉴스경산

C,Java 코드 리턴값 체크 팁??

2025. 3. 23. 오전 2:53:03

C,Java 코드 리턴값 체크 팁??

제어 흐름을 제대로 이해해야 리턴값을 정확하게 맞추실 수 있습니다.

프로그램 동작 원리를 제대로 이해해야 합니다.

1번 같은 경우는 for 첫 번째 루프에서 리턴을 만나고 함수가 바로 끝나는 케이스죠.

리턴에 대해서 설명할게요.

리턴은 누적이 되는 개념이 아닙니다.

1번에서 리턴을 루프가 돌 동안에 값이 계속 누적되서 마지막에 누적 합계를 리턴해 주는 것으로 예상을 하신 것 같은데요.

리턴은 함수의 반환값으로 만나는 즉시, 함수가 종료됩니다. for 반복 횟수가 어떻게 되든간에 결국, 첫 번째 루프만 돌죠. 이해를 돕기 위해서 비유를 들자면, main 함수도 함수죠. main 함수 맨 윗 줄에다가 return 0; 이렇게 main 함수의 반환값을 적어주면 그 밑에다가 아무리 코드를 길게 적어놔도 아무것도 실행 안 되죠. 똑같은 겁니다. 리턴을 만나는 순간, 그 밑에 있는 코드들은 실행될 수가 없죠.

함수 자체가 끝나는 것이므로 루프도 당연히 탈출하는 거고요.

1번처럼 2번도 함정 문제죠.

사용자 정의 함수가 void 타입이라서 리턴문이 명시되지 않았죠.

그리고 리턴 타입이 void가 아니라 int이고 리턴을 해줬어도 결과는 달라지지 않습니다.

왜냐고요? 리턴값을 받아주는 그릇이 없잖아요.

리턴값을 받아주는 그릇이 없으면 함수의 리턴값은 소멸합니다. 여기서 사용자 정의 함수가 int이고 리턴값으로 파라미터로 받은 값에 1을 더한 값을 리턴해주고 다시 main 메소드로 돌아와서 int n = 10; 이 다음 줄에 n = increase(n); 이렇게 함수의 리턴값을 받아줘야 10이 아니라 11이 나옵니다.

1번이랑 3번은 완전히 다른 케이스입니다.

for 문의 반복이 종료되야지만 다음 줄로 넘어갑니다.

for 문의 루프가 끝나야 다음 줄인 리턴으로 넘어가기 때문에 1번처럼 바로 종료되는 케이스랑은 다릅니다.

3번은 for 문으로 반복할 코드만 지정하지 않은 것이고 증감은 조건식 그대로 수행합니다. 파라미터로 받은 포인터의 첫 번째 요소가 바로 null 문자가 아닌이상, 바로 리턴하는 게 아니고 null을 만날 때까지 계속 증감식을 수행합니다.

\0 이건 널(null) 문자인데 널 문자는 C에서 문자열의 끝을 구분하기 위해 존재합니다. char 배열이나 char 포인터 문자열의 끝에 자동으로 들어갑니다.

크기가 10인 배열에 HelloW 이렇게 할당을 해줬는데 그러면 6글자가 아니라 끝에 널 문자가 붙어서 총 7글자가 됩니다. 배열에서 크기가 6이 아닌 7을 차지하죠. 보통 배열 크기에서 남은 칸들은 전부 널 문자가 들어갑니다. 5번 인덱스가 W고 6번 인덱스부터 9번 인덱스까지는 전부 널로 채워집니다.

for 문이 만나는 가장 첫 번째 널 문자는 6번 인덱스입니다.

배열의 인덱스는 0부터 시작하니까 첫 번째 널 문자가 있는 인덱스는 6 입니다.

널 문자가 없는 0부터 5까지 증감이 6번 수행되므로 결과는 6이 나오죠. 널 문자를 제외한 문자열의 길이가 6이되죠. 0 1 2 3 4 5

이렇게 나열해 보시면 6번이죠.

다시 한 번, 강조드립니다.

보여주신 문제들은 전부 수험자가 함수(function)에 대한 이해도를 시험하는 문제들입니다.

리턴이라고 하는건 함수의 반환값을 함수를 호출한 함수 바깥으로 전달해주는 구문입니다.

main 메소드에서 사용자 정의 함수를 호출했으니까 사용자 정의 함수의 반환값은 main 함수로 전달됩니다.

그리고 main 함수를 호출한 곳은 시스템, 즉 운영체제기 때문에 main 함수의 반환값은 운영체제한테 전달됩니다.

리턴에 대해서 완전히 이해를 하셨으리라고 믿습니다.

궁금하신 부분 있으면 추가 질문 주세요.

글 목록으로 돌아가기