변수는 보통 단일 자료를 담을 수 있지만 여러 자료를 담아야 할 경우에는 어떻게 해야 할까? 그럴 때는 배열변수를 사용해야 한다. 데이터 타입에 배열을 지정하면 같은 타입의 자료를 모아 하나의 변수에 저장하는 것이 가능한데 이렇게 저장된 배열변수의 값을 꺼내오고 활용하기 위해서는 반복문이 필요하다. 마치 어제 배운 제어문(조건문)의 조건식에 boolean(참과 거짓)값을 넣기 위해 연산자를 활용하는 것처럼.
배열의 길이를 지정한 경우 | 배열의 길이를 지정하지 않은 경우 | |
선언 | 데이터타입[ ] 변수명 = new 데이터타입 [길이] (ex. int[ ] array = new int[5];) |
데이터타입[ ] 변수명 = {값,값,값...} 선언과 초기화를 동시에 진행할 수 있다. (ex. int[ ] array = {10,20,30};) |
초기화 | 변수명[인덱스(주소)] = 값; (ex. array[2] = 10;) |
배열에 길이를 지정해두고 인덱스값을 참조하여 초기화하거나, 애초 선언과 동시에 중괄호를 활용하여 값을 순서대로 넣을 수 있다. 단, 길이를 지정했을경우 변수로 값이 바뀌지 않는 이상 그 배열에서 더 늘어날 수 없다. 이를테면 int[5]로 5개의 배열을 만들겠다 선언한 뒤 인덱스로 array[5]의 값을 넣게 되어도 출력할 때 인덱스의 범위를 초과했다는 에러창이 뜨게 된다. 자바스크립트에서는 길이를 지정한 뒤 초과해도 큰 문제가 없었지만 자바는 이 점에서 조금 차이가 있는 것 같다.
배열 변수에 담긴 값을 함수에 불러오거나 활용하려면 각 값이 담겨있는 주소, 즉 인덱스를 변수명 뒤에 대괄호를 붙여 호출할 수 있다. 하지만 적은 수의 배열의 값을 꺼내올 때는 [1], [2]... 하나씩 입력하는 것이 쉬울 수 있어도 만약 100개, 1000개, 혹은 그 이상의 값이 들어가 있다면 어떻게 하나하나 호출할 수 있을까.
그래서 오늘은 반복문을 배우게 됐다. 반복문의 종류도 몇 가지가 있다지만 말에서 알 수 있듯 특정 작업을 반복하기 위해 사용하는 명령어다. 이 반복문을 활용하면 배열변수에 있는 값을 꺼내어 활용하는 것은 정말 쉬워진다.
일단 for문의 기본적인 이용 방법이다. for문은 초기화와 조건식을 통해 참과 거짓을 가려내는 과정을 한번 거치게 된다. 만약 여기서 참이 나오면 중괄호 영역에 쓰인 구문이 실행되고 증감식으로 돌아가 변수의 값을 증가시키거나 혹은 감소시키게 된다. 그러고는 다시 조건식으로 넘어가 증감식을 거친 변수의 값에 따라 참과 거짓을 가려내고 다시 참일 경우 실행, 증감, 조건식 비교, 이 과정을 거짓이 나올 때까지 반복한다. 그래서 반복문이라고 불리는 것이다. 그렇다면 조건식 비교문에 배열이 가진 주소길이 만큼 지정할 수 있다면 활용하는 게 가능하지 않을까?
개발에서 0은 의미 없는 숫자가 아니다. 0과 1 사이에도 수가 존재하기 때문이다. 그렇기에 배열이 가진 인덱스도 0부터 시작하는데, 이를 활용하기 위해서 늘 초기값을 0으로 주는 습관을 들여야 한다. 그리고 반복할 횟수를 조건식으로 정해야 하는데 직접 3이라고 쓸 수도 있지만 만약 배열의 길이를 모르는 상태라면 .length를 통해 해당 배열변수의 길이를 자동으로 식에 대입할 수 있게 된다. 이렇게만 하면 반복문을 통해 배열변수의 값을 가져오는 것이 가능하다.
(물론 i의 값이 인덱스를 대신하기 때문에 배열변수를 부르는 방식으로 대괄호 안에 i를 넣어주어야 정삭 작동이 된다.)
하지만 반복할 구문이 있다는 것 외에, 이런 배열을 불러오기 위한 for문은 쓰다보면 번거롭지 않을 수가 없다. 그래서 이를 보완하고자 나온 기능이 바로 foreach문이다. foreach문은 기본적으로 for문과 같이 동작하지만 식을 적는 부분에 있어 좀 더 간편화되어 있다.
자바스크립트에서는 forEach문이라고 따로 썼는데 자바에서는 for문과 똑같이 적어주면 된다. 다만 식이 다를 뿐인데, 먼저 받아 올 데이터의 타입을 적고 임의 변수를 선언한다(꼭 i가 아니어도 된다! for문도 그렇다). 그런다음 콜론을 찍고 배열 변수명을 적어주면 알아서 변수 안에 들어있는 값이 foreach에서 선언한 변수에 담기며 구문을 실행하게 된다. 언제까지? 변수가 가지고 있는 값을 모두 쓸 때까지. 따로 조건식을 쓰지 않아도 알아서 배열변수의 길이만큼 스스로 동작하는 것이다. 이렇게 기능을 돌리면 첫 번째 foreach문에서는 Java Hello Programming 이라는 글자가 공백마다 줄이 바뀐 채 출력되고 두 번째 foreach문에서는 변수에 담긴 모든 값이 더해진 15가 화면에 출력된다.
이런 반복문에는 for문만 있냐면 그건 아니다, while문이 있는데 for문은 반복할 횟수를 정해서 돌리는 것이라면 while문은 정해진 반복횟수가 없다는 것이 특징이다. 물론 while문을 for문처럼 동작하는 것도 가능하지만 일단 기본적인 활용은 그렇다는 것. while문은 조건식에 담긴 값이 true면 무조건 반복하기 때문에 따로 false가 나올 수 있는 환경을 만들어 주어야 한다.
여기서 for문과 while문의 공통점이 보일 것이다, 바로 true와 false값에 따라 작동 여부가 갈린다는 것이다. 이는 if도 마찬가지로 모두 조건식에 비교 연산자를 대입하여 참과 거짓을 받아오거나 boolean값을 직접 입력하는 것으로 문장을 실행시킨다. 그러니 조건식의 자리엔 근본적으로 true와 false를 받는 공간이 되겠다. 위에서 말한대로 while문은 true를 받으면 무한 반복하게 된다, 여기서 빠져나오기 위해 이 true값을 false로 바꿔주는 작업이 필요한데 그것이 여의치 않다면 break를 쓰는 방법이 있다.
break 문 | 반복문 안에서 사용할 시 반복을 멈추고 해당 코드를 끝낸다. |
contiune 문 | 반복을 일시적으로 멈춘다, 해당 반복문만 멈추고 다시 증감식으로 돌아가 반복을 진행한다. |
아직 배운 것이 부족해 더 세세한 사항을 배우지는 못하고 추후에 다시 이 포스터를 확인해야 할 일이 생길 것 같다.
이렇듯 배열에 접근하는 방법을 반복문과 함께 알아 보았는데 단순 늘어놓는 것만 했던 배열변수는 대괄호를 추가하면 다차원의 배열로 만들 수도 있었다. 다차원은 대괄호를 추가한 만큼 2차원, 3차원... 계속 늘어나는 것 같지만 실제로 그렇게 많이 쓰이지는 않고 3차원 이상은 잘 쓰는 경우가 없다고 한다.
그렇다면 2차원 배열의 사용법은 어떻게 될까, 처음에는 긴가민가 했지만 우리가 늘 친숙하게 사용하는 엑셀을 예로 들면 의외로 간단했다. 첫 번째 배열을 엑셀의 열이라 생각하고 두 번째 배열을 행으로 두면 계산하기 편했다. 아래는 그렇게 이미지 메이킹을 하고 작성하여 출력까지 해 본 구문이다.
배열의 크기를 미리 주는 방법도 있겠지만 일단 초기화를 동시에 해주는 방향으로 작성해보았다. 스스로 4열 3행을 쓴다 생각하고 모든 값을 화면에 출력하는 반복문도 작성했는데 이해한 것이 맞았는지 출력하는 데 문제가 없었다. 일단 기본적으로 배열의 길이는 1차원일 때의 기준인 가로, 즉 열을 기준으로 잡는다. 나는 4열을 기준으로 작성하였으니 길이는 4, 행은 3으로 잡았기 때문에 해당 배열의 길이에서 -1한 값을 두번째 for문의 조건으로 삼았다. 이렇게 쓰는 for문을 중첩 for문이라고도 한다.
'아이티에듀넷' 카테고리의 다른 글
2024-09-10 :: 035 생성자 (0) | 2024.09.10 |
---|---|
2024-09-09 :: 034 객체 (0) | 2024.09.09 |
2024-09-05 :: 032 연산자와 조건문 (0) | 2024.09.05 |
2024-09-04 :: 031 Java 시작하기 (0) | 2024.09.04 |
2024-09-03 :: 030 반응형 CSS / typing Java script (0) | 2024.09.03 |