본문 바로가기

[책]명품 JAVA Programming

명품 자바 프로그래밍 3장 요약

드디어 우리는 반복문과 배열을 사용할 수 있게 됐다. 앞의 실습문제를 작성할 때 매번 실행해야 돼서 불편하지 않았는가? 반복문을 배운다면 한번의 실행으로 여러번 테스트 할 수 있게 된다. 

 

반복문

여러분들이 프로그램을 만들다 보면 특정 코드를 여러번 반복해야 하는 경우가 많다. 이때 우리가 사용할 수 있는게

)for

)while

)do-while문 이다.

for문이 뭔지만 알아도 본인이 코드 짜는데 문제 없을 것이다. 그런데 내가 do-while을 즐겨 사용하는 사람이고 여러분이 내 소스코드를 참고할때 그게 있다면 어떻게 할것인가? for문으로된 새로운 코드를 찾을건지 아니면 잘 사용하지 않는 do-while문을 배울것인지는 본인이 선택하길 바란다.

 

for문의 형식은 for( 어디부터(초기문) ; 어디까지(조건식) ; 얼만큼(반복 후 작업) ) 이다.

예를들어 나는 1부터 10까지 반복하고 싶다면 for( int i = 1; i<=10; i++)로 작성하면 된다.

for문 안 int i = 1 의 뜻은 i라는 변수를 1로 초기화해 만들고

i<=10 의 뜻은 i를 10보다 작게 될때까지 아래 작업을 하라는 말이다.

i++ 의 뜻은 작업이 한번 끝났을때 i를 하나 증가시키라는 말이다.

 

보통 초기문은 int i = 0으로 쓰이고

조건식은 i<반복횟수

반복 후 작업은 i++로 쓰인다.

 

교재에 여러 예시가 있다.

혹시 자바를 처음 공부한다면 반드시 해보길 바란다! 꼭꼭!

저도 처음 공부할때 직접 다 해봤습니다.

while문은 몇번 반복할지를 나중에 정하는 반복문이다. while(조건){ ...... 조건++} 이런식으로 쓰이는데 보통 무한루프를 작성할때 사용한다. 조건문 안에 특정 문자나 숫자를 입력할 시에 종료되도록 만든다던지, boolean타입의 변수를 설정해 놓고 특정 조건을 달성했을때 boolean변수를 False로 만들어 while문을 종료 시킬지 등등으로 말이다. 이는 직접 해보면 이해가 빠를 것이다.

예를들어 -1을 입력할때 까지 정수를 입력하고 입력된 모든 정수를 합산해 주는 프로그램을 만든다고 했을때 우리가 필요한건

1. 입력받을 Scanner 객체  (아직 객체라는 말이 어색해도 참자 조금만 더 공부하면 된다.)

2. 종료할때 까지 계속 돌아갈 반복문

3. 입력받은 정수를 저장할 변수

이다. 이를 코드로 작성하면

이해가 안된다면 댓글 부탁드립니다.

do- while문은 일단 작업을 하고 나중에 얼마나 반복할지 알려주는 것인데... 사실 저도 이걸로 코드를 짜본적이 없습니다. 특이한건 조건문이 나중에 나오기 때문에 반드시 한번은 실행한다는 것인데, 큰 프로젝트 에서는 사용하려나? 싶네요.

 

** 구구단을 출력하는 예제는 반드시 직접 해보길 바랍니다. 몇시간이 걸리든 혼자 해보세요! 처음 배울때 정말 오래 걸렸습니다.

 

반복문을 쓸떄 중요한 코드가 있습니다. 바로 continue와 break문입니다.

continue문은 반복문 안에서 쓰일때 continue를 마주한다면 반복횟수를 늘리지 않고 바로 반복문의 처음으로 돌아갑니다. 만약 10번 반복하는 반복문에 continue가 한번 호출 됐다면 총 11번 반복을 돌린게 되겠죠.

break문은 그 즉시 반복문을 탈출하는 겁니다. 만약 10번 반복하는 반복문에 break문을 문을 만났다면 그즉시 반복을 종료합니다.

둘다 반복문 안의 if문에서 쓰이는 경우가 많습니다.

 

배열

'같은 데이터 타입'의 여러 데이터가 순차적으로 저장할 수 있게 하는것이 배열 입니다.

이걸 어디에 쓸까요? 나와 같은반 아이들 31명을 저장할때 쓸 수 있고, 나의 대학교 8학기의 성적을 각각 저장할 수 있겠죠.

배열은 레퍼런스 변수를 선언해서 이를 새로운 변수를 만들어서 사용하는 방식입니다.

int intArray[]  로 배열 레퍼런스를 먼저 만들어 놓고

myArray = new intArray[몇개] 이제 myArray라는 변수에 int형 배열을 사용할 수 있게 됩니다.

 

레퍼런스를 설명하기 전에 1장 내용을 복습해 봅시다. 자바는 클래스를 필요할때마다 메모리에 로드하기 때문에 메모리 활용면에서 강점을 보인다고 했죠? 메모리에 로드된 데이터들을 '인스턴스'라고 합니다. 그 인스턴스들을 사용하기위해 가리키는 화살표를 '레퍼런스' 라고 합니다. 자그러면 위에서 레퍼런스 변수는 int intArray[] 라고 볼 수 있고 이를 이용해서 배열을 사용할 수 있게 되는 것입니다. 개념이 조금 복잡하게 느껴질 수 있지만 사용을 저렇게 한다~ 라고 알고 계시면 됩니다.

 

배열에 저장된 요소들에 접근할 때는 myArray[0], myArray[1], ......, myArray[n-1]로 접근할 수 있습니다. 0부터 시작이니 끝은 n-1이 됩니다.

 

for-each (advanced for문)

for(int i = 0 ; i < array.length; i++) 와 같이 배열의 길이만큼 반복하는 경우가 많다. 하도 많이 쓰이니까 간편하게 사용하기위해 향상된 for문이 탄생했다.

사용법은 for(데이터타입 i : array) 이다.

이러면 변수 i에 배열의 요소들이 순서대로 들어가게 된다. 물론 for문으로도 이를 처리할 수 있고 더 간편하다고 느낄 수도 있지만 소스코드 검색시 향상된 for문을 마주할일이 종종 있으므로 알아두는것이 좋다.

 

다차원 배열(2차원 배열)

 다차원 배열이라 함은 대부분 2차원 배열을 말한다. 물론 3차이상도 있지만 특별한 상황이 아니라면 3차를 사용하지 않고 다른 자료구조를 사용한다.

단순히 행렬을 만들어 데이터를 저장한다고 생각하면 된다. array[a][b]는 a행 b열 이다. 데이터 접근 또한 array[0][0] array[0][1]과 같이 사용한다. 아래는 제가 제작한 조원 추첨 프로그램인데 2차원 배열로 조와 조원을 적어놓았습니다.

소스가 내장되어 있기 때문에 조와 조원 수정은 불가능.

이 배열은 몇행 몇열일까요? 댓글에 적어주세요~

 

이처럼 2차원 배열의 행과열이 모두 같을 수 있지만 1행은 3열까지 있고 2행은 2열까지 있는 비정방형 배열이 있을 수 있다. 이는 열에 숫자를 넣지않고 데이터를 넣은만큼 늘어나게 할 수 있다. ex)myArray2 = new int [4][]; 는 4행 x열의 2차원 배열이 생성된다. 물론 레퍼런스 변수인 int i [][]; 를 위에 생성해야 한다.

이러면 각 행마다 길이가 달라지는데 myArray2[0].length , myArray2[1].length 와 같이 접근할 수 있다.

 

예외처리

내가 짠 코드가 큰 오류가 발생하면 프로그램에 악영향을 끼칠 수 있다. 그러므로 예외처리 라는것을 해야 하는데 이상하게 작성한 코드는 IDE가 알려주지만 파일 경로가 잘못 됐거나 배열의 인덱스가 넘어가거나 하는 경우는 예외처리 라는것을 해야 한다.

try{}catch(예외 타입){}문으로 작성할 수 있다. catch(예외 타입) 은 그때그때 정해져 있으므로 알아서 외워질것이다.

예를들어 입출력 동작 실패는 IOException이고 파일이 없거나 경로가 잘못된경우는 FileNotFoundException이다.

모든 예외를 외울 필요는 없다. 필요할때 검색해서 쓰자. 시험을 위해서만 외우자