클라이언트/ 서버/ 엔지니어 " 게임 개발자"를 향한 매일의 공부일지

반복문과 배열 그리고 예외 처리 19 - 메소드에서 배열 리턴과 main() 메소드에 대하여 본문

프로그래밍 언어/자바

반복문과 배열 그리고 예외 처리 19 - 메소드에서 배열 리턴과 main() 메소드에 대하여

huenuri 2024. 8. 14. 09:38

자바 책에 나온 메소드 관련 학습을 이어가려고 한다. 책은 메소드 개념도 아주 짧게 설명하고 있어 이 부분을 학습하려면 이 내용만으로는 많이 부족했다. 수업 시간에 메소드에 대해 기초적인 부분을 설명해주셔서 도움이 많이 되었다.


 

 

 

 

1. 메소드에서 배열 리턴

메소드에서 어떤 배열이든지 리턴하면, 배열 공간 전체가 아니라 배열 에 대한 레퍼런스만 리턴된다.

int[] makeArray() {
	int temp[] = new int[4];
    return tmep;
}

 

리턴 후 temp가 가리키는 new로 할당받은 배열 메모리른 사라지지 않고 지역 변수인 temp만 사라진다.

 

메소드는 레퍼런스만 리턴하기 때문에, 리턴 타입을 선언할 때 [] 안에 배열의 크기를 지정하지 않는다. 또한 리턴하는 배열의 타입이 리턴받는 레퍼런스 변수의 타입과 일치해야 한다.

 

int[] intArray;
intArray = makeArray();

 


 

 

 

 

배열 리턴

정수 4개를 가지는 일차원 배열을 생성하고, 1, 2, 3, 4로 초기화한다. 배열을 리턴하는 makeArray()를 작성하고, 이 메소드로부터 배열을 전달받아 값을 출력하는 프로그램을 작성한다.

 

 

 

 

이렇게 배열의 값이 생성되었다.


 

 

 

 

 

비정방형 배열 생성하기

Check Time 4번 문제를 풀어본다.

 

첫번째 도전

 

 

이번에도 오류가 발생했다. 무슨 문제일까?


 

 

 

두번째 도전

 

 

처음에는 1행의 값은 출력이 되었지만 그 이후에는 다시 오류가 발생했다. 알고 보니 j를 i로 잘못 써서 발생한 문제였다. 이전 예제에서는 이중 for문을 사용했는데, 여기서는 그냥 for문을 사용한 부분이 좀 이해가 되지 않았다.

 

이중 for문을 사용하는 경우는 일반적으로 모든 배열 요소를 순회하면서 값을 저장하거나 출력할 때 유용하지만, 이 경우는 배열의 크기가 각각 다르기 때문에 특정한 방식으로 값을 직접 저장하는 것이 효율적이다.

코드를 살펴보면:

  1. arr[0]은 길이가 4인 배열로, arr[1]과 arr[2]는 각각 길이가 1인 배열로, arr[3]은 다시 길이가 4인 배열이다.
  2. 각 배열의 요소 수가 다르므로, 각 배열의 요소를 저장할 때는 그 배열의 길이만큼만 순회하면 된다.

이중 for문을 사용하는 것보다 각 배열의 길이에 맞춰서 단일 for문으로 값을 저장하는 것이 더 간단하고 명확하다. 이중 for문을 사용하면 코드가 불필요하게 복잡해질 수 있다.


 

 

 

 

2. main() 메소드

main() 메소드의 특징

public static void main(String[] args) {
}

 

 

 


 

 

 

 

main() 메소드의 매개변수

자바에서 main() 메소드의 개배변수에 어떤 값이 어떻게 전달되는지 알아보자. 

 

그림에서는 총 3개의 명령행 인자들이 있다. Hello 클래스의 main() 메소드가 시작되기 전, 이 인잔들은 각각 문자열로 만들어지고 문자열 배열에 저장된다. 그리고 문자열 배열에 대한 레퍼런스가 main()의 매개변수 args에 전달된다. 이런 방식으로 main() 메소드는 명령행 인자들을 전달받는다.

 

 


 

 

 

이클립스에서 main() 메소드의 인자 전달

 

명령 프롬프트에서 할 수도 있지만 이 방법은 복잡해서 다른 방식으로 하기로 했다.

 

 

 

작성한 코드의 프로그램 파일에서 우클릭하여 Run As -> Run Confiqurations를 클릭하면 다음과 같은 화면이 뜬다.

여기서 새파일 + 버튼을 클릭하면 오른쪽에 Arguments 창이 나타난다. 이때 arguments에 원하는 값을 입력한다. 

 

 

 

 

 

 

 

 

이렇게 출력 결과가 잘 나왔다. 이 값은 문자열을 실수 타입으로 변환하여 합산한 결과이다.


 

 

 

 

 

 

 

이번에는 5를 넣었는데 소수점으로 5.0이 출력되었다.


 

 

 

 

핵심 체크 문제

 

 

 

문제 3번 

 

 

이렇게 arguments에 문자열을 입력하면 다음과 같이 출력된다.

 

 

 

이렇게 main() 메소드로 인자를 전달하는 장점은 scanner로 입력문을 작성하지 않아도 매개변수를 전달하여 값을 출력할 수 있다는 점이다. 이 문제는 출력문으로 아무리 뭔가를 작성해도 출력할 수 없지만, 이 방법을 사용할 때는 출력이 가능하다.


 

 

 

학습을 마치고

오늘 새벽에 일어나서 공부하기 정말 싫었지만 이럴 때는 좋아하는 방송을 시청하며 공부하면 다시 즐겁게 할 수 있기도 하다. 난 아직 방송과 드라마를 끊는 게 너무나 힘들다. 오늘까지는 이렇게 시청하고 내일부터는 정말 끊으려고 한다. 과연 할 수 있을지 의문이지만.. 그래도 정말 많은 것들을 배운 시간이었다.