안녕하세요! 쏘코입니다.
이번 포스팅에서는 제어문의 핵심 중 하나인 반복문과 배열에 대해서 알아보도록 하겠습니다.
목차
0. 반복문
인간이 하기 힘든 반복적인 일들은 컴퓨터는 금방 처리할 수 있습니다!
그러니까 컴퓨터에게 일을 더 시켜야겠죠(?)
먼저 while문을 사용해보겠습니다.
while문이 if문과 유사한 형태이기 때문에 훨씬 이해하기 쉽습니다.
LoopApp이라는 클래스를 만듭니다.
그리고 main함수 안에 아래와 같이 입력합니다.
while문이 바로 눈에 보이죠?
if문과 동일하게 소괄호 안의 조건을 만족하면 중괄호 안의 코드가 돌아갑니다.
대신 if와는 다르게 중괄호 안의 코드가 끝나면 다시 while문의 조건을 확인하고, 조건을 만족하면 (true면) 중괄호 안의 코드가 다시 돌아갑니다.
만약 계속 true라면 무한으로 돌아가겠죠?
의도하지 않았다면 while문이 무한으로 돌아가는 것은 심각한 오류입니다.
잘못하면 컴퓨터가 뻗을 수도 있어요.
그렇기 때문에 while문을 빠져나갈 수 있도록 조치를 취해야 하는데,
위 코드에서는 i라는 변수를 이용해서 while문이 한 번 돌 때마다 i가 1씩 증가해서 i가 3까지 커지면 더이상 조건을 만족하지 못해서 while문 밖으로 빠져나오게 됩니다.
i = i + 1은 i를 1씩 증가시킨다는 식이라는 것을 쉽게 파악할 수 있습니다.
이것을 Java에서는 i++로 간단하게 표현할 수 있습니다!!
몇 번 반복할 지 이미 알고 있는 상태라면 while문 대신 for문이 더 효과적일 수 있습니다.
for (초기값; 조건문; 증감식){ }
형태로 구성되어있습니다.
초기값은 단 한 번만 작동하고, 매번 for문이 돌 때마다 증감식이 작동하고, 조건을 확인해서 조건에 맞지 않으면 for문이 끝나게 됩니다.
for문을 사용하면 반복에 필요한 요소들이 한 곳에 모여있기 때문에 훨씬 이해하기 쉽고 반복에 필요한 요소가 의도치 않게 변화할 위험도 현저히 낮아집니다.
그렇기 때문에 몇 번 반복할 지 아는 상태에서는 for문을 사용하는 것이 좋습니다.
public class LoopApp {
public static void main(String[] args) {
System.out.println(1);
int i = 0; // 일반적으로 i는 반복문을 위한 변수
while(i < 3) {
System.out.println(2);
System.out.println(3);
// i = i + 1; // i의 값을 1씩 증가시킨다
i++; // 이것도 같다!
}
System.out.println(4);
for(int j = 0; j < 3; j++) {
System.out.println(2);
System.out.println(3);
}
}
}
1. 배열
배열은 반복문과는 뗄레야 뗄 수 없는 관계입니다.
한 두 건이 아니라, 1억 건의 요소를 처리하기 위해서는 반복문이 필요합니다.
하나하나 다 작동시킬 수는 없잖아요?
배열은 1억 건의 요소를 하나로 묶어서 쉽게 관리할 수 있게 도와주는 데이터형입니다.
ArrayApp 클래스를 만들어줍니다.
하나의 변수에 세 사람의 이름을 넣을 수 있습니다.
하지만 이걸 꺼낼 때는 굉장히 난처합니다. 문자열의 어디서부터 어디까지 끊어야하나..
배열을 사용하면 보다 쉽게 데이터들을 관리할 수 있습니다.
String[] 배열명 = new String[배열크기];
형식으로 배열을 만들 수 있습니다.
그런데 이런 식으로 만들면 배열 안에 값을 나중에 할당해야 합니다.
만약 만들면서 동시에 할당하고 싶다면 { } 안에 배열의 값을 넣어주면 됩니다.
String[] 배열명 = {1, 2, 3};
이렇게 배열을 만들면 데이터끼리 잘 분리되어 있기 때문에 나중에 꺼내 쓸 때 굉장히 편리합니다.
또한 데이터의 개수도 String의 메소드를 이용하여 쉽게 구할 수 있습니다.
public class ArrayApp {
public static void main(String[] args) {
// egoing, ssoco, youbin
// String users = "egoing, ssoco, youbin"; // 이렇게 관리할 수 있겠지만, 불편하다!
String[] users = new String[3]; // 값 3개를 넣을 것이다! (아직 데이터가 없는 깡통 배열 생성)
users[0] = "egoing"; // 컴퓨터는 0부터 카운팅한다!
users[1] = "ssoco";
users[2] = "youbin";
System.out.println(users[1]); // ssoco 출력
System.out.println(users.length); // 3 : 세 칸짜리 배열이다
int[] scores = {10, 100, 100};
System.out.println(scores[1]); // 100
System.out.println(scores.length); // 3
}
}
지금까지 배열의 구조도 정확히 모르면서 배열을 사용했는데요, 그만큼 배열은 단순합니다.
배열은 index와 element로 구성되어 있습니다.
어느 위치에 있는 지를 표현하는 것이 index(색인), 그 위치에 있는 데이터가 Element(값)입니다.
배열은 이게 끝입니다. 수많은 데이터를 쉽게 관리할 수 있게 도와줄 정도로 강력하면서도 간단하죠?!
2. 반복문 + 배열
지금까지 배운 두 요소를 합쳐봅시다.
LoopArray라는 클래스를 생성합니다.
만약 <li></li> 안에 이름을 넣어야 하는 상황이라고 가정해봅시다.
하나하나 넣으려고 한다면 굉장히 시간이 오래 걸리겠죠?
이럴 때 for문과 배열을 사용하면 굉장히 쉽고 빠르게 데이터들을 요리할 수 있습니다.
public class LoopArray {
public static void main(String[] args) {
/*
* <li>egoing</li>
* <li>ssoco</li>
* <li>youbin</li>
*/
String[] users = new String[3];
users[0] = "egoing";
users[1] = "ssoco";
users[2] = "youbin";
// for(int i = 0; i < 3; i++) {
// System.out.println("<li>"+users[i]+"</li>");
// }
for(int i = 0; i < users.length; i++) {
System.out.println("<li>"+users[i]+"</li>");
}
}
}
그동안 배웠던 내용을 바탕으로 for문과 { } 안의 출력 코드를 작성해보았습니다.
주석처리된 for문과 그렇지 않은 for문이 있는데,
주석처리된 for문은 고정된 반복횟수를 가진 for문입니다.
만약 String의 크기가 바뀐다면 더이상 사용할 수 없게 되죠.
반면 아래의 for문을 사용한다면, users의 length만큼 반복하게 되므로 데이터의 개수가 바뀌어도 정상적으로 동작합니다.
대부분의 경우 아래 for문처럼 코딩하는 것이 더 좋습니다.
이렇게 for문, 배열, 메소드를 이용하면 지금처럼 훌륭한 프로그램을 만들 수 있게 됩니다!
이제 제어문도 끝을 향해 달려갑니다.
다음 포스팅을 마지막으로 제어문도 마무리가 되겠네요!
다음에는 지금까지 배운 내용을 종합해서 응용해보는 시간을 갖도록 하겠습니다!
오늘도 읽어주셔서 감사합니다 :)
최근댓글