이 글은 기본 for 문을 이해한다는 전제 하에 진행한다.
다중 for 문에서 초보자들은 조건식 작성시 어려움을 겪는다. 이런 어려움은 결국 고민에 고민을 더하고 경험에 경험을 쌓아서 코드를 보는 눈과 로직을 짜는 머리가 성장해야 해결될 것이란 것은 안다. 하지만 초보자 당사자에게 더 도움이 될 방법은 없을까?
난 그 어려움과 답답함을 다 벗어나진 못 했지만 그 와중에 조금 더 빨리 길을 찾아나갈 수 있는 등불 비슷한 것을 본 것 같아서 공유하려고 한다. (Java 가 아니라 python이거나 했다면 헷갈리고 어려울 일은 더 적었을 것이지만...) 내가 생각하는 꿀팁을 전하기 전에 가장 초보에게 정말 중요하고, 말하고 또 말해야 하는 원칙! 코드는 위에서 아래로! 한 줄 씩! 부족하다고 생각되고, 막힐 때마다 심호흡과, 저 원칙을 되새기면서 다시 코드를 훌어보도록 하자!
*
**
***
****
*****
위 출력물은 다중 for 문 초보자의 친구이자 적인 별찍기3이다. 처음에는 별찍기를 위해서 다중 for문을 써야한다는 개념이 필요하고 그 다음에는 다중 포문의 개념을 사용하지만 for문의 구조에서 해매기 쉽다. 이를 위해 헤매고 헤맨 결과... 내가 생각한 몇 가지 팁은 아래와 같다. 팁이 아니라 기본이라고 생각할 수도 있을 것 같지만
1. 대부분의 경우, 다중 for 문 중 바깥 for 문은 기본형이라는 것이다.
1-1. 대부분의 경우, 바깥 기본 for문은 내부의 반복을 풀어서 쓴 이후 그 전체 반복을 위해 목표 반복 횟수를 위해서 씌운 것이다. 물론, 위에서 아래로 내려가는 구조상, 바깥 for 문을 먼저 쓸 수밖에 없지만 대부분의 경우 기본형에서 벗어나지 않는다. 로직이 제대로 돌아가지 않는다고 해서 바깥 for문(괄호) 내부형태를 이리 저리 변형하는 것은, 보통의 경우 길을 돌아가서 더 헤매게 되는 길이다.
그런 고로 우선 상기 역별로 나오는 별찍기 3도 이것에 대한 풀이는 많지만 굳이 다시 하자면 일반적인 증가 for문을 쓰고 변형하지 않아도 된다.
for (int i = 0; i < 5; i++) {} // 5==N
다음으로 초보자일 때 많이 헷갈렸던 것은 반복 횟수가 되는 변수를 범위나 시작에 써도 되는지였다. 마치 다중 for문에 대한 개념이 없어서 for 문 안에 또 for 문을 쓴다는 것이 신기한 것처럼, 변수가 0이나 1 이 아니게 시작한다든지, i를 조건문에 연산자 상대 변수로 쓸 수 있다는 것이 놀라울 수 있는 것처럼 말이다. 그런 고로 두 번째 팁은 이것이다.
2. 증감이 있는 내부 for 문의 반복 조건에는 외부 i 등의 변수가 들어간다! 2-1. N회 반복, 증가와 감소에 따라 기본형을 바꿔잡으면 편하다. N회 반복은 바깥처럼 짜면되고, 증가하면, for(int j=0; j < i; j++){} , 감소하면 for(int j=N; j >i; j--){}이다.
2-2. 결국 다중 for 문으로 엮어내는 것은 제시된 N 값 만큼 반복하고, i 값의 변화하는 것에 영향을 받으면서 반복하기 때문에 내부 for 문에는 N과 i 값이 들어간다. 들어가지 않는다면 for 문이 내부에 있을 필요가 없다. 애초에 다중 for 문을 배울 때 내부의 for문에 N 과 i 가 들어가서 생소한기 때문에 이해하고 빨리 되지 않는데, 내부 for문은 경우가 다양하다고 해서 기본형 잘 안 가르쳐주는 것 같다. 그래서 다중이 되면 더 헷갈린다.
상기 내부 for문의 기본형이라고 하는 것은 내 개인적인 팁이다. 당연히 문제에 따라 다를 수 있고, 문제를 이해하면서 수정해야 하지만 이는 더 쉬운 이해를 위해 더 유익해보인다. 얼마든지 다를 수 있는, 말그래도 기본형이니까. 덧붙여 이해없는 암기를 걱정하는 이에게 하고싶은 말이다. 이해 없는 암기는 위험한 방법이지만 문자에 현혹되어 어지러운 사람의 정신을 차리게 해줄 때는 손가락 개수를 물어보듯 당연한 것을 보여주어 확인을 해야한다.
당연히 다중 초보자에게 언어는 반복 숙달이 답이다. 이는 이해를 돕고 헤매지 않기 위한 팁이다. 학습과 반복 연습이 컴퓨터 '언어'를 배우는 방법이 아닐까 싶다.
독후 기록 : 이펙티브 자바 (0) | 2022.06.05 |
---|---|
자바 +찍기 1탄 코드 퀴즈 (0) | 2021.12.16 |
Java 2차원 배열 퀴즈_다이아(?) 마름모 만들기, 그리고 수학. (0) | 2021.11.26 |
댓글 영역