3일동안 나름 푹 쉬고, 복습도 조금씩 하면서 시간을 보냈는데
쉬고나서 수업을 다시 들으려니 피곤한데다 비까지 와서 축축 쳐진당 T-T
그래도 2주차는 4일만 열심히 수업 들으면 되니까 다시 힘을 내서 탄탄하게 기초 다지기!
반복문 do-while문
do {
(실행문)
} while (조건식);
do-while문은 조건식을 입력하여 조건식이 만족한다면 do 블록내 실행문이 반복되고, 조건식을 만족하지 않으면 메소드를 종료하는 반복문이다. 예제는 값을 입력받아 입력값이 q가 아니라면 do 블록 내 실행문이 반복되고, 입력값이 q라면 반복문을 종료하는 메소드이다. 여기서 !inputString.equals("q"); 구문은 inputString != "q"를 의미하는 메소드 구문이다.
break문
break문은 switch, for, while, do-while문에서 블록을 종료시킬 때 특정 조건에 도달하면 조건문, 반복문 메소드를 탈출하는 용도로 활용할 수 있다. switch문에서는 break를 사용하면 case에 따른 실행문을 실행한 후 곧바로 메소드를 탈출하고, while문에서는 대부분 if문을 활용하여 특정 조건에 도달하면 반복문을 탈출하여 조건문, 반복문 메소드가 종료된다. 이는 break를 활용하지 않고 do-while문을 단일로 사용해도 동일하게 수행할 수 있다.
해당 코드는 중첩 for문에서 break문을 활용하는 코드이다. 위의 코드에서는 중첩된 반복문에서 lower 변수가 a부터 z까지 순차적으로 증감하다가 g에 도달하면 반복을 종료하도록 작성된 코드이다. 이 때 바깥 for문은 A부터 Z까지 증감을 반복하여 수행된다. 아래의 코드는 라벨을 붙여 바깥 반복문을 탈출하는 코드를 추가로 작성한 것이다. 바깥 for문 앞에 라벨을 붙이고 break 라벨을 해주면 바깥 반복문도 탈출하게 되어 안쪽 for문이 g에 도달하면 실행이 종료되므로 바깥 for문의 시작값에서 더이상 증감하지 않는다.
continue문
continue문은 조건식에 만족하지 않을 경우 다시 조건 검사를 실행하도록 하고, 조건식에 만족하면 실행문을 수행하도록 한다. 위의 코드에서는 i를 2로 나누었을 때 나머지가 0인 경우 실행문을 수행하고, 0이 아닌 경우 조건 검사를 다시 실행하도록 하여 1부터 10까지의 정수 중 2의 배수(짝수)를 출력하는 코드이다.
참조 타입 변수 비교 연산
참조값 & 값
이전 수업시간에는 비교연산과 .equals() 메소드를 이용해 간단하게 참조값과 실제값을 비교해보았다면 이번에는 값을 비교하는 메소드를 생성하여 메인메소드에서 호출하는 방식으로 코드를 작성하여 비교해보았다. 참조값 비교연산 결과를 출력하는 메소드 isRefEquals()와 실제값을 비교하여 결과를 출력하는 메소드 isValueEquals()를 생성하고, String타입의 변수를 리터럴 방식으로 객체를 생성했을 때와 new 연산자를 이용해 생성 방식으로 새로운 객체를 생성했을때 참조값과 실제값의 비교를 진행해보았다. 생성 방식을 통해 새로운 객체를 생성하게 되면 같은 실제값을 갖는다고 하더라도 참조값은 다르다는 결과를 확인해 볼 수 있었다.
NullPointerExeption
String 타입은 선언 후 초기화 할 때 기본값을 null로 갖게 되는데, 위와 같이 String 타입의 변수 str에 null 값을 저장하였을 때 length()메소드를 실행하면 NullPointerException이 발생한다. 즉 참조 변수가 null 값을 가지고 있을 때 객체나 필드의 메소드를 사용하려는 경우 발생하는 오류이다.
배열 생성 및 활용
<배열의 생성 및 변수에 요소를 저장하는 방법>
데이터 타입[] 변수명 = {값1, 값2, 값3, …};
or
데이터 타입[길이] 변수명;
변수명[0] = 값1;
변수명[1] = 값2;
변수명[2] = 값3;
:
변수명[길이-1] = 마지막값;
or
데이터 타입[] 변수명 = new 데이터 타입 {값1, 값2, 값3, …}
배열의 생성은 모든 데이터 타입에서 가능하다. 가장 흔히 사용되는 int 타입의 배열을 통해 배열의 생성과 변수에 요소를 저장하는 방법을 알아보았다. 배열은 0부터 시작되는 각 index에 값을 저장하는 방식으로 생성되며, 참조 타입 변수를 생성하고 변수에 요소를 저장하는 방법은 기본 타입의 변수를 생성하고 값을 저장하는 방법과는 다르기 때문에 헷갈리지않게 잘 숙지해둬야 할 것 같다! 배열 요소에 직접 접근하여 값을 출력 해볼수도 있고, 배열 요소를 별도의 변수에 저장하여 값을 출력 해볼수도 있다.
배열은 index가 0부터 1씩 순차적으로 증감되기 때문에 index의 최댓값은 (배열의 길이 -1)이 되므로 for문에서 반복되는 범위를 배열의 길이 미만으로 지정해주면 합계와 평균을 손쉽게 구해볼 수 있다.
배열의 선언과 초기화
위의 코드는 기본 타입 변수를 선언하고 초기화, 재할당하는 방법을 참조 타입 변수에 적용하였을 때 컴파일 오류가 발생하는지를 직접 확인해 본 것이다. 참조 타입의 변수에 요소의 값을 재할당 하기 위해서는 new 연산자를 반드시 사용해야한다.
배열 요소의 전달
배열의 합을 구하는 메소드를 생성하고, 메인 메소드에서 호출하는 코드를 작성해서 배열의 전달 형태를 확인해보았다. 기본 배열은 매개 변수에 값을 전달하여 각 요소의 합을 전달받을 수 있고, 새로운 요소들의 구성을 같은 방법으로 수행하고 싶다면 반드시 new 연산자를 이용해 새로운 객체를 생성하여 값을 재할당 해준 다음 수행해야한다.
Line 15 ~ Line 20은 데이터 타입에 따라 초기화된 기본값을 확인해보는 코드이다.
각 데이터의 타입별로 데이터 초기값을 다르게 갖는데, 아래 표와 같다.
분류 | 데이터 타입 | 초기값 |
기본 타입 (정수) | byte[] char[] short[] int[] long[] |
0 '₩u0000' 0 0 0L |
기본 타입 (실수) | float[] double[] |
0.0F 0.0 |
기본 타입 (논리) | boolean[] | false |
참조 타입 | 클래스[] 인터페이스[] |
null null |
Arrays.toString() 메소드를 활용하면 요소들을 배열의 형태로 나열하여 확인해 볼 수 있다. Line7에서 int 타입의 배열을 선언하여 4개의 index를 갖는 배열로 초기화해주면 최초의 값음 [0, 0, 0, 0]으로 생성된다. 그리고 다음 각 index에 요소를 저장해준 다음 Arrays.toStirng() 메소드로 확인해보면 [10, 5, 0, 11] 이 출력되어 각 index에 값이 잘 저장되었음을 확인해 볼 수 있다 :)
커맨드 라인 입력 및 활용
<커맨드 라인 입력>
Run As - Run Configurations... -> 클래스 이름 입력 -> Arguments에 원하는 값 입력
.parseInt() : 문자열을 정수값으로 변환하는 메소드
사실 이 내용은 뭐가뭔지 잘 모르겠지만ㅋㅋ main 메소드에 사용되는 Stirng[] args 배열을 활용하여 커맨드 라인을 입력하고 확인해보는 코드를 작성해서 수행해보았다. 어떤 때에 활용되는지는 잘 모르겠지만 우선 내용은 정리해두는걸로,,,, :)
다차원 배열
배열은 1차원 뿐만 아니라 2차원 이상의 배열로도 활용이 가능하다. 다차원 배열은 1차원 배열을 여러개 가진 구조로 구성된다. 요소들을 저장할 때 역시 배열 구조의 요소로 저장되고, 행과 열의 index값을 대입하여 해당하는 요소를 출력할 수 있다. 1차원 배열에서 요소들을 배열로 나타내는 메소드가 Arrays.toString()이었다면 다차원 배열에서는 Arrays.deepToString() 메소드를 활용하여 배열의 형태로 출력해 볼 수 있다. 또한 중첩 for문을 활용하여 요소 전체를 나열하여 확인하는 것도 가능하다.
배열의 복사 - for문 활용
배열의 복사는 새로운 참조 변수를 생성하고, for문을 활용해 기존의 배열을 그대로 복사하여 활용할 수 있다.
for문으로 기존의 배열을 그대로 복사한 다음 남은 자리에 값을 저장해주면 새로운 배열이 완성된다!
배열의 복사 - System.arraycopy()
System.arraycopy(기존 배열, 복사를 시작할 index, 새로운 배열, 붙여넣을 index 위치, 복사할 값의 갯수);
다음은 System.arraycopy() 메소드를 활용하여 배열을 복사하는 방법이다. 위의 방식처럼 메소드 내에 차례로 정보를 입력하면 기존 배열에서 원하는 값을 새로운 배열의 원하는 위치에 복사할 수 있다. 이 때 복사된 값은 새로운 객체를 생성하지않고, 같은 참조값을 복사한다고 하여 얕은 복사라고도 표현한다.
향상된 for문
향상된 for문은 for(타입 변수 : 배열) { 실행문 } 형태로 index를 활용하지 않고 배열 내 값을 순차적으로 처리하는 반복문인데, 위의 실행문에서는 요소들을 나열하는 실행문으로 작성하였다. 향상된 for문을 활용해 타입 변수에 값을 누적하여 저장하면 요소들의 합계도 쉽게 구할 수 있다.

'Develop growth diary > JAVA' 카테고리의 다른 글
자바 기반 객체지향 프로그래밍 01 - 객체 생성과 클래스 변수 (0) | 2022.10.05 |
---|---|
자바 기반 구조적 프로그래밍 07 - 열거 타입 생성과 메소드 활용 (0) | 2022.10.05 |
자바 기반 구조적 프로그래밍 04 - 조건문과 반복문 (1) | 2022.09.30 |
자바 기반 구조적 프로그래밍 03 - 라이브러리 활용, 조건문 if (2) | 2022.09.29 |
자바 기반 구조적 프로그래밍 02 - 연산자와 연산식 (0) | 2022.09.28 |