뉴스경산

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 함수의 반환값은 운영체제한테 전달됩니다.

​

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

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

​

​

글 목록으로 돌아가기